需求:明細行摘要字段賦值到主表隱藏字段,隱藏摘要字段在標題中顯示
代碼如下,代碼中的獲取字段名獲取方式,自行轉換成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
)