需求:明细行摘要字段赋值到主表隐藏字段,隐藏摘要字段在标题中显示
代码如下,代码中的获取字段名获取方式,自行转换成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")); //获取当前流程请求IDint iWorkflowid = Util.getIntValue(request.getParameter("workflowid")); //获取当前流程IDint iNodeid = Util.getIntValue(request.getParameter("nodeid")); //获取当前流程节点IDint 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:固定参数0var 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 odWHERE od.mainid = o.id
)