使用计算脚本做表单¶
使用计算脚本做表单示例代码:
#include "数据字典";
(function(){
//项目编号、项目名称、项目类型、项目负责人、合同金额、已开票金额、已到账金额
var doc = getCurrentDocument();
var projectId= doc.getItemValueAsString("签进合同ID");
var projectName="";
var sql=" select item_项目编号,item_项目名称,item_项目类型,item_项目负责人,合同金额_bak as item_已开合同金额,开票金额_bak as item_已开票金额, ";
sql +=" 到账金额_bak as item_已到帐金额 ,domainid from tlk_项目 where item_项目编号 in ";
sql += "(select distinct item_项目编号 from tlk_签进合同明细 where parent ='"+projectId+"' and item_项目编号 is not null ";
sql +=" and item_项目编号 <> '')";
var query = queryBySQL(sql);
var html="";
if(query!=null){
html+="<table cellSpacing='0' cellPadding='1' width='100%' align='center' style='border:solid #cccccc;border-width:1px 0px 0px 1px;'><tbody> ";
html+=" <tr style='line-height:22px;'> ";
html+=" <td style='align:center;font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=200px;' >项目名称</td> ";
html+=" <td style='align:center;font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=50px' >项目编号</td> ";
html+=" <td style='align:center;font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=50px' >项目类型</td> ";
html+=" <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;' >项目负责人</td> ";
html+=" <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=100px' >项目合同金额(元)</td> ";
html+=" <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=100px' >已开票金额(元)</td> ";
html+=" <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=100px' >已到账金额(元)</td> ";
html+="</tr>";
for(var its = query.iterator();its.hasNext();){
var datas=its.next();
var xmNum=datas.getItemValueAsString("项目编号");
var xmName=datas.getItemValueAsString("项目名称");
var xmType_x=datas.getItemValueAsString("项目类型");
var xmTypeName=getProjectTyle(xmType_x);
var xmFzPeo_id=datas.getItemValueAsString("项目负责人");
var xmFzPeo_name="";
if(xmFzPeo_id!=null && xmFzPeo_id.trim().length>0){
var userDoc=getUserById(xmFzPeo_id);
if(userDoc!=null){
xmFzPeo_name=userDoc.getName();
}
}
var xm_htMon=datas.getItemValueAsDouble("已开合同金额");
var xm_kpMon=datas.getItemValueAsDouble("已开票金额");
var xm_dzMon=datas.getItemValueAsDouble("已到帐金额");
html+="<tr><td>"+xmName;
html+="</td><td>"+xmNum;
html+="</td><td>"+xmTypeName;
html+="</td><td>"+xmFzPeo_name;
html+="</td><td>"+xm_htMon;
html+="</td><td>"+xm_kpMon;
html+="</td><td>"+xm_dzMon;
html+="</td></tr>";
}
html+=" </tbody></table>";
}
return html;
})();
脚本说明¶
该脚本使用计算脚本功能在表单中动态生成HTML表格。通过查询数据库获取项目相关信息,并以表格形式展示在表单的计算脚本字段中。
脚本功能¶
- 引入数据字典: 使用
#include "数据字典"引入数据字典,可以使用自定义函数如getProjectTyle() - 查询项目数据: 根据当前文档的"签进合同ID"查询关联的项目信息
- 生成HTML表格: 动态生成包含项目信息的HTML表格
- 数据展示: 展示项目编号、项目名称、项目类型、项目负责人、合同金额、已开票金额、已到账金额等信息
关键步骤说明¶
1. 引入数据字典¶
2. 查询数据¶
var sql=" select item_项目编号,item_项目名称,item_项目类型,item_项目负责人,合同金额_bak as item_已开合同金额,开票金额_bak as item_已开票金额, ";
sql +=" 到账金额_bak as item_已到帐金额 ,domainid from tlk_项目 where item_项目编号 in ";
sql += "(select distinct item_项目编号 from tlk_签进合同明细 where parent ='"+projectId+"' and item_项目编号 is not null ";
sql +=" and item_项目编号 <> '')";
var query = queryBySQL(sql);
3. 生成HTML表格¶
- 创建表格头部(表头)
- 遍历查询结果
- 生成表格行(数据行)
- 返回完整的HTML字符串
关键函数说明¶
#include "数据字典": 引入数据字典,可以使用自定义函数getCurrentDocument(): 获取当前文档对象queryBySQL(sql): 执行SQL查询getProjectTyle(xmType_x): 从数据字典获取项目类型名称getUserById(id): 根据用户ID获取用户对象userDoc.getName(): 获取用户名称
使用场景¶
- 在表单中动态展示关联数据
- 生成统计报表
- 展示主子表关联信息
- 数据汇总展示
- 自定义数据展示格式
扩展示例¶
示例1:简化版表格生成¶
(function(){
var doc = getCurrentDocument();
var sql = "select domainid,item_字段1,item_字段2 from tlk_表单名 where parent='"+doc.getId()+"'";
var query = queryBySQL(sql);
var html = "<table border='1'><tr><th>字段1</th><th>字段2</th></tr>";
if(query != null){
for(var it = query.iterator(); it.hasNext(); ){
var data = it.next();
html += "<tr>";
html += "<td>" + data.getItemValueAsString("字段1") + "</td>";
html += "<td>" + data.getItemValueAsString("字段2") + "</td>";
html += "</tr>";
}
}
html += "</table>";
return html;
})();
示例2:带样式的表格¶
(function(){
var doc = getCurrentDocument();
var sql = "select domainid,item_名称,item_金额 from tlk_表单名";
var query = queryBySQL(sql);
var html = "<table style='width:100%;border-collapse:collapse;'>";
html += "<thead><tr style='background-color:#f0f0f0;'>";
html += "<th style='border:1px solid #ccc;padding:8px;'>名称</th>";
html += "<th style='border:1px solid #ccc;padding:8px;'>金额</th>";
html += "</tr></thead><tbody>";
if(query != null){
for(var it = query.iterator(); it.hasNext(); ){
var data = it.next();
html += "<tr>";
html += "<td style='border:1px solid #ccc;padding:8px;'>" + data.getItemValueAsString("名称") + "</td>";
html += "<td style='border:1px solid #ccc;padding:8px;'>" + data.getItemValueAsDouble("金额") + "</td>";
html += "</tr>";
}
}
html += "</tbody></table>";
return html;
})();
HTML表格样式说明¶
脚本中使用的表格样式:
cellSpacing='0': 单元格间距为0cellPadding='1': 单元格内边距为1border:solid #cccccc: 边框颜色为灰色background-color:#EFF0F1: 表头背景色为浅灰色font-size:larger: 字体较大font-family: Arial: 字体为Arial
注意事项¶
- 计算脚本字段需要设置为"HTML"类型才能正确显示HTML内容
- SQL查询需要注意性能,避免查询大量数据
- HTML字符串拼接时注意转义特殊字符
- 使用
#include引入数据字典时,确保数据字典文件存在 - 表格样式可以根据实际需求调整
- 注意处理空值情况,避免显示异常
- 用户ID转换为用户名时,需要判断用户是否存在
数据字典函数¶
如果使用了 #include "数据字典",可以在脚本中使用数据字典中定义的自定义函数,例如:
getProjectTyle(typeId): 获取项目类型名称- 其他自定义函数根据数据字典定义而定
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4dhso2b0a
文档更新时间: 2023-09-16 06:51 作者:admin