pwj_xmlChk.ss.jsp 17 KB

1
  1. <html> <head> <css.ss file="/ss/treedata/zTreeStyle.css"/> <js.ss file="/ss/jquery/jquery.js"/> <js.ss file="/ss/treedata/jquery.ztree.all-3.5.js"/> <!-- 依赖css与js start --> <css.ss file="/ss/codemirror/docs.css"/> <css.ss file="/ss/codemirror/codemirror.css"/> <css.ss file="/ss/codemirror/show-hint.css"/> <js.ss file="/ss/codemirror/codemirror.js"/> <js.ss file="/ss/codemirror/anyword-hint.js"/> <js.ss file="/ss/codemirror/css-hint.js"/> <js.ss file="/ss/codemirror/show-hint.js"/> <js.ss file="/ss/codemirror/xml-hint.js"/> <js.ss file="/ss/codemirror/html-hint.js"/> <!-- 在此文件添加代码提示 --> <js.ss file="/ss/codemirror/javascript-hint.js"/> <js.ss file="/ss/codemirror/xml.js"/> <js.ss file="/ss/codemirror/javascript.js"/> <js.ss file="/ss/codemirror/css.js"/> <js.ss file="/ss/codemirror/htmlmixed.js"/> <js.ss file="/ss/codemirror/codemirror.init.js"/> <%-- 再增加,统一用 initCmEditor(mode)。Lin --%> <!-- 依赖css与js end --> </head> <body> <%-- 再改,增加文件名称、类别 和 业务名、对象名。Lin <button onclick='<serv@ss dlg="true" name="pwjbb_cx" dest="pwjbb_list" parm="{pwjid:&quot;${wj.pwjid}&quot;}"/>'>i</button> --%> <span>&nbsp;&nbsp;${wj.mc}</span>&nbsp;<span><cbTrans.ss cb="pwjlb" val="${wj.pwjlbm}"/></span>&nbsp; <span>${ywmStr}</span>&nbsp;<span>${wj.dxm}(${objDesc})</span> <input type="button" class="list-button" value="i" onclick='<serv.ss dlg="true" name="pwjbb_search" dest="pwjbb_list" parm="{pwjid:&quot;${wj.pwjid}&quot;}"/>'/> <input id="putFileUrl" type="hidden" value="<serv.ss name='pwj_wrFile' parm='{gzjdid:"${gzjdid}",pwjid:"${wj.pwjid}",pwjbbid:"${wj.zxpwjbbid}"}'/>"/> <input id="getFileUrl" type="hidden" value="<serv.ss name='pwj_rdFile' parm='{gzjdid:"${gzjdid}",pwjid:"${wj.pwjid}",pwjbbid:"${wj.zxpwjbbid}"}'/>"/> <%-- 新的 makeObjXml,这里的 ObjXml 是 对象 的 XML,不是 .obj.xml。Lin --%> <input id="makeObjXmlUrl" type="hidden" value="<serv.ss name='pwj_makeObjXml' parm='{pwjlbm:"${wj.pwjlbm}",pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/> <%-- 再合并成一个,新的 makeObjXml。Lin <input id="makeServXmlUrl" type="hidden" value="<serv.ss name='pwj_makeServXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/> <input id="makePageXmlUrl" type="hidden" value="<serv.ss name='pwj_makePageXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/> <input id="makeIchkXmlUrl" type="hidden" value="<serv.ss name='pwj_makeIchkXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/> <input id="makeCbXmlUrl" type="hidden" value="<serv.ss name='pwj_makeCbXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/> <input id="makeBpmXmlUrl" type="hidden" value="<serv.ss name='pwj_makeBpmXml' parm='{pwjid:"${wj.pwjid}",objDesc:"${objDesc}"}'/>"/> --%> <form id="form" method="post" > <%-- 先去掉,老是最外层的出纵向滚动条。Lin <div class='content-div' wdFitHeight="true,top:1"> --%> <div > <%-- 再去掉 <table,改用 <div。Lin <table> <tr> <th></th> <td> --%><div style="margin:8px 0 16px;"> <%-- 再合并成一个,新的 makeObjXml。Lin <equal.ss val="${wj.pwjlbm}" val2="110211"> <input id="makeObjXml" type="button" value="生成对象配置" class="bottom-button"/> </equal.ss> <equal.ss val="${wj.pwjlbm}" val2="110215"> <input id="makeServXml" type="button" value="生成服务配置" class="bottom-button"/> </equal.ss> <equal.ss val="${wj.pwjlbm}" val2="110221"> <input id="makePageXml" type="button" value="生成部件配置" class="bottom-button"/> </equal.ss> <equal.ss val="${wj.pwjlbm}" val2="110225"> <input id="makeIchkXml" type="button" value="生成录入校验配置" class="bottom-button"/> </equal.ss> <equal.ss val="${wj.pwjlbm}" val2="110235"> <input id="makeCbXml" type="button" value="生成码本配置" class="bottom-button"/> </equal.ss> <equal.ss val="${wj.pwjlbm}" val2="110251"> <input id="makeBpmXml" type="button" value="生成流程配置" class="bottom-button"/> </equal.ss> --%> <equal.ss val="${isXml}" val2="true"> <input id="makeObjXml" type="button" value="生成配置文件" class="bottom-button"/> </equal.ss> <input id="hotSave" type="button" value="保存" class="bottom-button"/> <input id="save" type="button" value="提交" class="bottom-button"/> <%-- 再去掉 <table,改用 <div。Lin </td> </tr> </table> --%></div> <div id="code" style="height:590px;width:100%;min-height:400px;max-width: 1024px;float: left;overflow-y:auto;"></div><!-- 代码编辑框 --> </div> </form> </body> <script> function attributesCheck(){ var alertResult=""; var result=""; //检查可能属性 /* 改,重写。Lin var DICTS=["URL","abstract","add","adminNo","agree","archiveName","asc","assignee","author","authorizable","batchField","body","business","button","bycslb","cService","cacheable","captchaLength","card","categoryNo","changeNo","check","child","class","code","codebook","content","date","default","definition","desc","dest","display","displayDesc","disturb","editable","enable","end","enrolDate","exportDesc","exportNo","field","file","fileName","filter","fkey","forEach","format","formula","function","height","hscslb","iService","icon","id","importCode","importKey","importName","key","keyword","keywordNo","lead","length","local","localDesc","longDistancePrefix","menu","miniDate","moreDesc","multiLine","name","necessary","next","no","nullable","number","objClass","object","objectId","objectName","order","outsidePrefix","param","parent","path","percent","print","printNo","process","public","recall","reject","rule","runonstartup","rycol","scope","scopeName","searchNo","searchable","seniority","service","sql","start","statsNo","subject","thumbnail","title","titlecolumn","token","type","validator","value","view","website","width"]; DICTS.push("primary"); DICTS.push("group"); DICTS.push("client"); DICTS.push("objectCode"); DICTS.push("scan"); DICTS.push("smallIcon"); DICTS.push("miniIcon"); DICTS.push("defaultValue"); DICTS.push("redirect"); DICTS.push("listMode");//hierarchical 升级 listMode DICTS.push("hierarchical"); DICTS.push("defination"); DICTS.push("condition"); DICTS.push("remindNo"); DICTS.push("allowServer"); DICTS.push("setField"); */ // obj.xml。Lin /* 再改为动态针对不同的配置文件类型加载。Lin var DICTS=["biz","name","desc","po","child","search","keyword","order","cat","chgFunc","rootFunc","cb","width","inp","objName","key","def","type" ]; */ var DICTS=[${allAtr}]; //检查true or false /* 再改为动态针对不同的配置文件类型加载。Lin var BOOEANDIC=["racall","nullable","enable","pubilc","primary","cService","objectCode","scan","miniDate","recall","disturb","necessary","abstract","skippable","menu","token","asc","authorizable","body","view","hierarchical","enrolDate","add","thumbnail","check","multiLine","public","cacheable","iService","objectId","editable","forEach","importKey","print","objectName"]; */ var BOOEANDIC=[${boolAtr}]; /// 再增加 uniqDict、mustField、numDict,不写死 -- 动态针对不同的配置文件类型加载。Lin var uniqDict = ${uniqAtr}; var mustField=[${mustField}]; // "objName=true"。Lin var numDict=[${numAtr}]; /// var boolean_result=""; var num_result = ""; var xmlDom=new DOMParser().parseFromString(codemirrorEditor.getValue(),"application/xml"); var aaa=xmlDom.querySelectorAll("*"); var lj='${wj.mc}'; /* 再完全重写,支持动态针对不同的配置文件类型加载。Lin * 必须有的 Field -- objName=true * 对 .obj.xml,不允许写 <field objectId="true" 了 * 先去掉 parm 值是否有 ""/'' 的判断,不好判断 -- {buttons:'meeting,scan'} -- 多了 "{"、"}",存在非分隔参数的 "," * xmlDom.querySelector("field[objName=true]") 总是返回 null,不管写没写 objName="true" if(/obj.xml$/i.test(lj)){ // (/object.xml$/。Lin if(!xmlDom.querySelector("field[objectId=true]")){ alertResult+="缺少objectId \r\n"; } if(!xmlDom.querySelector("field[objName=true]")){ // [objectName=true]。Lin alertResult+="缺少 objName=\"true\"\r\n"; } }else if(/serv.xml$/i.test(lj)){ // (/service.xml$/。Lin var repeatService=""; var temp1={}; var services= xmlDom.querySelectorAll("serv"); // ("service")。Lin for(var i=0;i<services.length;i++){ var n=services[i].getAttribute("name"); if(!temp1[n]){ temp1[n]=1; }else{ temp1[n]++; } } for(var key in temp1){ if(temp1[key]==1)continue; repeatService+=key+" "; } if(repeatService){ alertResult+="存在重复服务名:"+ repeatService +"\r\n"; } } var names={}; var paramValue=[]; for(var i=0;i<aaa.length;i++){ var attributeNames=aaa[i].getAttributeNames(); for(var j=0;j<attributeNames.length;j++){ names[attributeNames[j]]=1; var v=aaa[i].getAttribute(attributeNames[j]); if(attributeNames[j]=="parm"){ // =="param")。Lin paramValue.push(v); } if(v&&$.inArray(attributeNames[j],BOOEANDIC)>-1){ // >0)。应该是 > -1。Lin if("true"==v||"false"==v){ }else{ boolean_result+=v+" "; } } } } for(var key in names){ if($.inArray(key,DICTS)<0){ result+=key+" "; } } if(result.length>0){ console.log(result); alertResult+="属性名错误:"+ result +"\r\n"; } if(boolean_result.length>0){ alertResult+="写错 true/false 值:"+ boolean_result +"\r\n"; } if(paramValue.length>0){ var res=""; for(var i=0;i<paramValue.length;i++){ var v=paramValue[i]; var vv=v.split(","); var testParam=true; for(var j=0;j<vv.length;j++){ var vvv=vv[j].split(":")[1]; if(isNaN(vvv)&&!/^\".*\"$/.test(vvv)&&!/^\'.*\'$/.test(vvv)){ testParam=false; } } if(!testParam) res+=v+" "; } if(res.length>0) alertResult+="parm 值没有加引号:"+ res +"\r\n"; } */ ///// 完全重写。Lin var names = {}; var uniqName = {}; // 原 .serv.xml 里的 temp1。Lin var uniq_result = ""; // 原 .serv.xml 里的 repeatService。Lin var must_result = ""; /// 初始化 mustAtr、mustVal。Lin var mustAtr = {} var mustVal = {} for (var i = 0; i < mustField.length; i ++) { var vv = mustField[i].split("="); mustAtr[vv[0]] = 1; mustVal[vv[0]] = vv[1]; } /// for (i = 0; i < aaa.length; i ++) { var attributeNames = aaa[i].getAttributeNames(); for(var j = 0; j < attributeNames.length; j ++) { var atrN = attributeNames[j]; names[atrN] = 1; var v = aaa[i].getAttribute(atrN); // 检查 true/false 值。Lin if ($.inArray(atrN, BOOEANDIC) > -1) { // >0)。应该是 > -1。Lin if (v != "true" && v != "false") { boolean_result += (atrN +"=\""+ v +"\" "); } } // 检查 数字 值。Lin if ($.inArray(atrN, numDict) > -1) { if (!(/^\d+$/.test(v))) { num_result += (atrN +"=\""+ v +"\" "); } } // 收集 uniqAtr 值。Lin if (v && atrN == uniqDict) { if (!uniqName[v]) { uniqName[v] = 1; } else { uniqName[v]++; } } // 收集 mustField 值。Lin if (v) { for (var mustA in mustAtr) { if (atrN == mustA) { vv = mustVal[mustA].split(","); for (var k = 0; k < vv.length; k ++) { if (v == vv[k]) { mustAtr[mustA] = 0; break; } } } } } /// } } // 判断 allAtr。Lin for (var key in names) { if ($.inArray(key,DICTS) < 0) { result += key +" "; } } if (result.length > 0) { alertResult += "属性名错误:"+ result +"\r\n"; } // 判断 boolAtr。Lin if (boolean_result.length > 0) { alertResult += "写错 true/false 值:"+ boolean_result +"\r\n"; } // 判断 numAtr。Lin if (num_result.length > 0) { alertResult += "写错 数字 值:"+ num_result +"\r\n"; } // 判断 uniqAtr。Lin for (var uniqKey in uniqName){ if (uniqName[uniqKey] == 1) continue; uniq_result += uniqKey +" "; } if (uniq_result.length > 0) { alertResult+="存在重复名:"+ uniq_result +"\r\n"; } // 判断 mustField。Lin for (mustA in mustAtr) { if (mustAtr[mustA] == 0) continue; must_result += mustA +"=\""+ mustVal[mustA] +"\" "; } if (must_result.length > 0) { alertResult+="缺少属性值:"+ must_result +"\r\n"; } ///// if (alertResult.length > 0) return confirm(alertResult); return true; } $(function(){ /* 再统一用 initCmEditor(mode)。Lin * 改为 "xml" codemirrorEditor = CodeMirror(document.getElementById("code"), { mode: "text/html", lineNumbers: true }); */ initCmEditor("xml"); var url=document.querySelector("#getFileUrl").value; $.post(url,function(data){ if(data.type!=1){ alert(data.msg); return ; } codemirrorEditor.setValue(data.content); },"json") $("#makeObjXml").on("click",function(){ var url = document.querySelector("#makeObjXmlUrl").value; makeCont(url); }) $("#makeServXml").on("click",function(){ var url = document.querySelector("#makeServXmlUrl").value; makeCont(url); }) $("#makePageXml").on("click",function(){ var url = document.querySelector("#makePageXmlUrl").value; makeCont(url); }) $("#makeIchkXml").on("click",function(){ var url = document.querySelector("#makeIchkXmlUrl").value; makeCont(url); }) $("#makeCbXml").on("click",function(){ var url = document.querySelector("#makeCbXmlUrl").value; makeCont(url); }) $("#makeBpmXml").on("click",function(){ var url = document.querySelector("#makeBpmXmlUrl").value; makeCont(url); }) function makeCont(url) { $.post(url,function(data) { if (data.type != 1) { alert(data.msg); return ; } codemirrorEditor.setValue(""); codemirrorEditor.clearHistory(); codemirrorEditor.setValue(data.content); },"json"); } $("#save").on("click",function(){ if(new DOMParser().parseFromString(codemirrorEditor.getValue(),"application/xml").getElementsByTagName("parsererror").length>0){ wd.display.fixationAlert("xml parse error"); return; } if(!attributesCheck()){ return; } // wd.display.fixationAlert(codemirrorEditor.getValue()); // 去掉,混淆了重要的信息。Lin wd.display.fixationAlert("提交"); var url=document.querySelector("#putFileUrl").value; var param={content:codemirrorEditor.getValue()}; $.post(url,param,function(data){ if(data.type==1){ wd.display.fixationAlert("提交成功!"); /* 去掉 check < wd.completeTask < wd.core.service.BpmService.completeTask() + sfty:"1",直接用 ss.agrTask。Lin window.location.href='@service{name:"check",dest:"sys_info",param:{shid:"${shid}",sfty:"1"}}@'; */ window.location.href="<serv.ss name='ss.agrTask' dest='info' parm='{shid:"${shid}"}'/>"; }else{ // alert(data.msg); wd.display.confirm({width:400,height:300,title:"保存异常",msg:data.msg,callback:function(){wd.display.alert("got it!");}}); } },"json"); }) $("#hotSave").on("click",function(){ if(new DOMParser().parseFromString(codemirrorEditor.getValue(),"application/xml").getElementsByTagName("parsererror").length>0){ wd.display.fixationAlert("xml parse error"); return; } if(!attributesCheck()){ return; } // wd.display.fixationAlert(codemirrorEditor.getValue()); // 去掉,混淆了重要的信息。Lin wd.display.fixationAlert("保存"); var url=document.querySelector("#putFileUrl").value; var param={content:codemirrorEditor.getValue()}; $.post(url,param,function(data){ if(data.type==1){ wd.display.fixationAlert("保存成功!"); wd.display.closeDialog(); }else{ // alert(data.msg); wd.display.confirm({width:400,height:300,title:"保存异常",msg:data.msg,callback:function(){wd.display.alert("got it!");}}); } },"json"); }) }) $.post("<serv.ss name='pwj_rdFileState' parm='{gzjdid:"${gzjdid}",pwjid:"${wj.pwjid}"}'/>",function(res){ if(res.length>0){ /* 去掉,多余的 -- 标题已有。Lin var alertmsg="正在修改:\r\n"; */ var alertmsg=""; for(var i=0;i<res.length;i++){ /* 再改 List<Map<String, Object>> 为 List<Object>,只返回一个字段值(mc) -- Db.doSelMapListByC( 改为 .doSelListByC(。Lin alertmsg+="<h5>"+res[i]["mc"]+"</h5>"; */ /* 再改回,去掉 to_char(sj,,直接输出 sj(Timestamp),在页面生成 -- SqlCmd.init( 里,去掉拆分 "'" -- SQL 的 '' 字符串里,不能有 :。Lin alertmsg+="<h5>"+res[i]+"</h5>"; */ alertmsg+="<h5>"+res[i]["mc"]+res[i]["sj"]+"</h5>"; } // alert(alertmsg); wd.display.confirm({width:400,height:300,title:"正在修改:",msg:alertmsg,callback:function(){wd.display.alert("got it!");}}); } },"json"); </script> </html>