公司一直在用kingdee OA 5.2的版本,虽然好多功能不太完善,好在它的一些架构还是比较好的,最近在用js+css对其进行一些改动。
从琴日开始,在想一个问题,根据查询结果向表单中自动填充内容。难点在于1.表单保存时是html格式,2。系统展现表单时做了一些转义,如原来是文本框的,转义后会变成了下拉框,这不是最大问题,最大问题是它的name属性改变了,而且没有包含id属性,无法直接用document.getElementById("b1"),看来只能供助jquery之类的工具库了
下面是一个例子,放在这里备查吧!
服务器端的程序(GetValue.jsp)
<%@ page import="javax.xml.parsers.*,javax.xml.transform.*,javax.xml.transform.dom.*,javax.xml.transform.stream.*,org.w3c.dom.*,java.util.*,java.sql.*"
contentType="text/html; charset=UTF-8"
%>
<%
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setContentType("text/xml; charset=utf-8");
%>
<%
// 创建文档对象。
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
// 创建文档对象根元素。
Element xmlRoot = doc.createElement("result");
//连接数据库(最原始的方式)
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
String url="jdbc:jtds:sqlserver://*********:1433;DatabaseName=*****";
String user="sa";
String password="*****";
Connection conn= DriverManager.getConnection(url,user,password);
PreparedStatement stmt=conn.prepareStatement(" exec GetNeiBuZhuanZhanRecrod ? "); //调用存储过程
stmt.setString(1,request.getParameter("fileno1")); //获取传递过来的参数值,给当前参数赋值
ResultSet rs =stmt.executeQuery(); //将查询结果返回给rs
String country="" //定义参数存放查出的结果
if (rs.next() ) //这一句一定要加,因为只返回一个结果,如果要规范一些的,可以将if 换成while
{
country =rs.getString("str1") ; //将查出的结果赋值
}else
{
country="none"; //当没有结果时显示none
}
rs.close(); //关闭
stmt.close();
conn.close();
//生成xml节点
Element city = doc.createElement("city");
city.appendChild(doc.createTextNode(country ));
xmlRoot.appendChild(city);
// 将文档根元素加到文档对象。
doc.appendChild(xmlRoot);
// 将xml文档数据发送给客户端浏览器。
DOMSource doms = new DOMSource(doc);
StreamResult sr = new StreamResult(response.getOutputStream( ));
TransformerFactory tf = TransformerFactory.newInstance( );
Transformer t = tf.newTransformer( );
t.setOutputProperty("encoding", "UTF-8");
t.transform(doms, sr);
%>
一个公文表单(html文件):
<script src="../jquery.js"></script>
<table style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" align="center" height="42"><font size="+1"><strong>转账通知单</strong></font></td>
</tr>
</tbody>
</table>
<p align="center"><span class="writetd">申请人职务:<input id="c1" class="igray" size="10" name="开票人" /> 收/付款部门:<input id="c2" class="igray" size="10" name="收付款部门" /> NO:</span><span class="writetd"><input class="igray" name="文件编号" /> </span></p>
<table style="BORDER-COLLAPSE: collapse" bordercolor="#666666" cellspacing="0" cellpadding="0" width="95%" align="center" border="1">
<tbody>
<tr valign="middle">
<td align="center" bgcolor="#ffffff">收款部门</td>
<td class="writetd" width="15%" bgcolor="#ffffff"><input id="c3" class="igray" size="12" name="收款部门" /></td>
<td class="writetd" width="8%" bgcolor="#ffffff">申请人</td>
<td align="center" width="11%" bgcolor="#ffffff"> <input class="igray" size="8" name="提交人" /></td>
<td align="center" width="11%" bgcolor="#ffffff"><span class="writetd">付款部门</span></td>
<td class="writetd" width="18%" bgcolor="#ffffff"><input id="c4" class="igray" size="12" name="付款部门" /></td>
<td class="writetd" width="10%" bgcolor="#ffffff">转账日期</td>
<td class="writetd" width="18%" bgcolor="#ffffff"><input class="igray" id="转账日期" size="12" name="转账日期" /></td>
</tr>
<tr valign="middle">
<td align="center" width="9%" bgcolor="#ffffff">摘要</td>
<td class="writetd" bgcolor="#ffffff" colspan="7"><textarea id="c5" class="igray" rows="3" cols="98" name="摘要"></textarea></td>
</tr>
<tr valign="middle">
<td align="center" bgcolor="#ffffff">文件标题</td>
<td class="writetd" bgcolor="#ffffff" colspan="5"><input class="igray" id="文件标题" size="50" name="文件标题" /></td>
<td class="writetd" bgcolor="#ffffff">转账金额</td>
<td class="writetd" bgcolor="#ffffff"><input class="igray" id="c6" size="12" name="转账金额" /></td>
</tr>
<tr>
<td align="center" bgcolor="#ffffff">备注</td>
<td class="writetd" bgcolor="#ffffff" colspan="7"><textarea id="c7" class="igray" rows="3" cols="98" name="备注"></textarea></td>
</tr>
<tr>
<td align="center" bgcolor="#ffffff">收款方确认人员</td>
<td class="writetd" bgcolor="#ffffff" colspan="7"><textarea class="igray" rows="3" cols="98" name="收款方确认人员"></textarea></td>
</tr>
<tr>
<td align="center" bgcolor="#ffffff">付款方确认人员</td>
<td class="writetd" bgcolor="#ffffff" colspan="7"><textarea class="igray" rows="3" cols="98" name="付款方确认人员"></textarea></td>
</tr>
<tr>
<td align="center" bgcolor="#ffffff">总账核算会计确认</td>
<td class="writetd" bgcolor="#ffffff" colspan="7"><textarea class="igray" rows="3" cols="98" name="总账核算会计确认"></textarea></td>
</tr>
</tbody>
</table>
<input id="wtu1" name="输入查询条件" size="12" />
<input id="b1" οnclick="processData(1) ;" type="button" value="点击查询" style="DISPLAY: ''"/>
<input id="b2" οnclick="processData(2);" type="button" value="点击直接获取最新的" style="DISPLAY: ''"/>
<input οnclick="ShowHelp();" type="button" value="显示帮助" />
<input οnclick="NoShowHelp();" type="button" value="隐藏帮助" />
<div id="test2" style="DISPLAY: none">
<p><em> </em><font size="1">转账流程:分三种情况<br />
收/付款部门意为:收款和付款部门</font></p>
</div>
<script type="text/javascript">
function ShowHelp()
{ document.getElementById("test2").style.display="" ;
}
function NoShowHelp()
{ document.getElementById("test2").style.display="none" ;
}
//读出服务器端(jsp)返回的xml格式文档
// 从指定URL加载XML文档数据对象。
// @param url 请求地址
// @param reqText 请求数据
function loadXMLDoc(url,reqData)
{
try
{
var xmlHttp;
if (window.XMLHttpRequest)
{
// 创建 Mozilla/FireFox平台的 XMLHttpRequest 对象
xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject)
{
// 创建 IE/Windows 平台的XMLHttp对象
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
// 用POST,非异步方式开启请求地址,
xmlHttp.open("POST", url, false);
// 设置提交数据的格式为Form表单格式。
// 如要发送xml格式的数据,将此行注释掉即可。或者显式指定为"Content-Type", "text/xml; charset=utf-8"
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
// 发送数据
xmlHttp.send(reqData);
// alert(xmlHttp.responseXML.documentElement);
// 返回xml文档数据对象
return xmlHttp.responseXML;
}catch(exception)
{
//alert(exception);
}
}
function processData(param1)
{
if (param1==1) {
var param=document.getElementById("wtu1").value; //取输入的查询条件值
} else {
var param="a9999";
}
// 请求地址
var sUrl = "GetValue.jsp?fileno1="+param;
// 加载xml文档数据对象
var xmlDOM = loadXMLDoc(sUrl,param);
// 下面开始将返回的xml数据解析出来,并添加到列表中。
var root = xmlDOM.documentElement;
try
{
var sValue = root.getElementsByTagName('city')[0].firstChild.data;
var i;
var sa=sValue.split(";;"); //因为在存储过程中将各个字段合并成了一个字符串,每个字段间用";;"隔开,所以在这里再把它们分开出来,便于下面的赋值
// document.getElementById("c1").value=sa[4];
// document.getElementById("c2").value=sa[5];
document.getElementById("c3").value=sa[3];
document.getElementById("c4").value=sa[1];
document.getElementById("c5").value=sa[6];
document.getElementById("c6").value=sa[2];
document.getElementById("c7").value=sa[7];
document.getElementById("title").value=sa[0];
$("select[name='fieldstr5']").val(sa[4]); // 因为OA在生成界面时做了一些转义方面的处理(将文本框的变成了下拉框,没有id,只有name属性,这里只能用jquery处理了
$("select[name='fieldstr6']").val(sa[5]);
}catch(exception)
{
//alert(exception);
}
}
function initT()
{
var te1=document.getElementById("wtu1"); //控制操作的权限,只有出现查询条件录入框时,两个按钮才会出现。
if (te1==null)
{
document.getElementById("b1").style.display="none" ;
document.getElementById("b2").style.display="none" ;
}else {
document.getElementById("b1").style.display="" ;
document.getElementById("b2").style.display="" ;
}
}
initT();
</script>