需求:明细行摘要字段赋值到主表隐藏字段,隐藏摘要字段在标题中显示
代码如下,代码中的获取字段名获取方式,自行转换成jQuery("#fieldid").val()替换。
//1:参数表单id 2:流程字段名 3:0代表主表,1代表明细1 4:固定参数0 var ma_mxzy= "<%=FormIdCacheUtil.getFieldId(iFormid,"mxzy","1",0)%>";//主表 获取明细摘要
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="weaver.general.Util" %>
<%@ page import="weaver.general.TimeUtil" %>
<%@ page import="java.util.*" %>
<%@ page import="weaver.hrm.*" %>
<%@ page import="weaver.hrm.*" %>
<%@ page import="weaver.hrm.*" %>
<%@ page import="com.customcode.util.FormIdCacheUtil" %>
<jsp:useBean id="wfc" class="weaver.workflow.workflow.WorkflowComInfo" scope="page"/>
<%
int iRequestid = Util.getIntValue(request.getParameter("requestid")); //获取当前流程请求ID
int iWorkflowid = Util.getIntValue(request.getParameter("workflowid")); //获取当前流程ID
int iNodeid = Util.getIntValue(request.getParameter("nodeid")); //获取当前流程节点ID
int iFormid = Util.getIntValue(wfc.getFormId(String.valueOf(iWorkflowid)), 0); //获取当前表单ID 兼容手机端
//int iFormid = Util.getIntValue(request.getParameter("formid")); //获取当前表单ID
//int iIsBill = Util.getIntValue(request.getParameter("isbill")); //获取当前表单类型(1单据|0表单)
User user = HrmUserVarify.getUser (request,response) ; //获取当前登录对象
int iUserId = user.getUID(); //获取当前登录用户ID
//int iUserSubCompanyId = user.getUserSubCompany1(); //获取当前登录用户公司ID
//int iUserDepId = user.getUserDepartment(); //获取当前登录用户部门ID
//String sLogintype = user.getLogintype(); //当前用户类型(1内部用户|2外部用户)
//String sUsername = user.getUsername(); //获取当前登录用户姓名
//String sUserJobtitle = user.getJobtitle(); //获取当前登录用户职务IDdd
//out.print("Requestid="+Requestid);
%>
<script type="text/javascript">
//1:参数表单id 2:流程字段名 3:0代表主表,1代表明细1 4:固定参数0
var ma_mxzy= "<%=FormIdCacheUtil.getFieldId(iFormid,"mxzy","1",0)%>";//主表 获取明细摘要
var dt_abstract= "<%=FormIdCacheUtil.getFieldId(iFormid,"abstract","1",0)%>";//明细1 摘要
var maString="";
jQuery(document).ready(function(){
jQuery("button[name='addbutton0']").click(function(){ //绑定明细1添加点击事件
var indexnum1=jQuery("#indexnum0").val();//行数
var i=indexnum1-1;
mxzyget(i);
});
jQuery("button[name='delbutton0']").click(function(){ //绑定明细1添加点击事件
var indexnum1=jQuery("#indexnum0").val();//行数
//var i=indexnum1-1;
maString="";
for(var j=0;j<indexnum1;j++){
console.log("j>>>"+j+",indexnum1>>>"+indexnum1);
var abstract=jQuery("#" + dt_abstract+"_"+j).val();
if(abstract!==undefined){
maString+=abstract+" | ";
console.log("maString>>>"+maString);
var mxzy=jQuery("#"+ma_mxzy).val(maString);
console.log("mxzy>>>"+maString);
}
}
});
});
function mxzyget(i) {
jQuery("#" + dt_abstract+"_"+i).bind("change",function () {
var abstract=jQuery("#" + dt_abstract+"_"+i).val();
maString+=abstract+" | ";
console.log("maString>>>"+maString);
var mxzy=jQuery("#"+ma_mxzy).val(maString);
console.log("mxzy>>>"+maString);
});
}
</script>
逻辑就是循环判断明细行字段,用“maString+=abstract+" | " ”拼接赋值给主表字段,在明细删除按钮事件中(delbutton0)重新循环获取明细行,再重新赋值,避免用户填错删除任意行。注意:明细行删除事件,如果删除中间行例如1 2 3 4,删除了2或者3的中间行,用if字段xx.length!=0判断,会导致循环中断,导致第四行值无法获取。顾转化思路,打印出明细值会发现,明细字段值=undefined(一个未定义或者未赋值的变量),所以用使用严格相等 ===(!==)来判断。
对用历史字段处理,利用数据库语句来批量更新。我们系统数据为oracle,用到以下语句
formtable_main_958为主表,formtable_main_958_dt1为明细表
UPDATE formtable_main_958 o
SET o.mxzy = (
SELECT LISTAGG(od.abstract, ' | ') WITHIN GROUP (ORDER BY od.abstract)
FROM formtable_main_958_dt1 od
WHERE od.mainid = o.id
)