一、相关资源:
泛微Ecology9.0流程二开演示:使用Ecode对流程浏览框进行赋值
泛微Ecology9.0流程二开亲测:隐藏新建流程页面中的Tab页签
泛微Ecology9.0流程Ecode实践:新建流程页面增加自定义页签简单实例
泛微Ecology9.0流程Ecode实践:新建流程页面隐藏操作按钮及右键菜单实例
二、效果展示:
Ecode代码发布后,演示验证[开始日期]、[结束日期]列是否重复,如下图:
三、实现方式:
新建项目(详细步骤可参考相关资源中之前发布的文章链接)
1.新建项目文件夹;
2.在项目文件夹下新建js代码文件register.js,并设置前置加载;
const enable = true;//总开关
let isRun = true; //控制执行次数
/** ----------Start(配置区) --------------**/
/**configOptions对象配置文件
* 作用:绑定具体流程并配置不可重复字段ID
* workflowid:要绑定的流程id,修改后面的id,
* 键名:detail_1对应明细表1,支持多明细依此类推,
* 键值:fieldid,不可重复字段数组。
**/
const configOptions = {
workflowid :4,
checkFields:{
detail_1 :['field5843','field5845'],
}
}
/** -----------End(配置区) --------------**/
const isTargetLocation = () => { //定位到要修改的位置
//如果不是pc流程表单或移动端流程表单中,则不执行下面逻辑
//if (!(ecodeSDK.hash('#/main/workflow/req') || ecodeSDK.checkLPath('/spa/workflow/static4mobileform/index.html#/req')))
const {hash} = window.location;
if(!hash.startsWith('#/main/workflow/req')) return ; //判断页面地址
if(!ecCom.WeaTools.Base64) return ; //完整组件库加载完成
//const {iscreate} =weaJs && weaJs.getFrameParams();
//if(iscreate !== '1') return;
const {workflowid} = WfForm && WfForm.getBaseInfo();
if (workflowid != configOptions.workflowid) return;
return true;
}
const runScript = ()=>{ //代码块钩子,类似放在代码块中或者jquery.ready
//可操作WfForm,以及部分表单dom hiden、ReactDOM.render
if (!isRun) return;
ecodeSDK.load({
id:'${appId}',
noCss: true,
cb:()=>{
//console.log('加载成功');
}
});
//绑定提交事件,点击提交按钮时触发明细表重复校验判断
WfForm.registerCheckEvent(WfForm.OPER_SUBMIT, function(callback){
var result=getReapetColumInfo();
//console.log('检查结果:'+JSON.stringify(result));
if (!Object.keys(result).length>0){
callback();//继续提交需调用callback,不调用代表阻断
}
else{
let info=JSON.stringify(result);
console.log('WfForm.getFieldInfo(5845)'+WfForm.getFieldInfo('5845'));
window.weaJs.alert(`指定列${info}内容不允许有重复值,请修改重复列中的内容后,再提交!`); //提示内容修改
}
});
isRun = false; //确保只执行一次
}
function getReapetColumInfo(){//检查所有的重复列,将重复字段信息写入对象返回
const result={};
const entries = Object.entries(configOptions.checkFields);
entries.forEach(([key, value]) => {
value.forEach(item=>{
if (checkCustomize(key,item)) result[key]=result[key]?[...result[key],item]:[item]
});
});
return result;
}
function checkCustomize(detail_id,dtField) {//判断单列是否有重复:重复返回true,不重复返回false
var dtFieldValueArray = new Array();
var dtRowsIndexArray = WfForm.getDetailAllRowIndexStr(detail_id).split(","); //获取明细表1的所有行标
dtRowsIndexArray.some(function (i) {
var dtFieldValue = WfForm.getFieldValue(dtField + "_" + i);
dtFieldValue && dtFieldValueArray.push(dtFieldValue);
});
var repeatValueArray=dtFieldValueArray.filter((element, index)=>dtFieldValueArray.lastIndexOf(element) != index && index == dtFieldValueArray.indexOf(element));
return repeatValueArray.length>0?true:false; //true表示有重复;
}
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop',{ //重复流程组件
fn:(newProps)=>{ //newProps代表组件参数
if(!enable) return ;
if (!isTargetLocation()) return;
runScript();
return newProps;
},
order:1, //排序字段,如果存在同一个页面复写了同一个组件,控制顺序时使用
desc:'明细表列内重复不允许提交!'
});
发布项目
1.选中新建的项目文件夹,右键点击【发布】,发布成功后文件夹显示为黄色。
2.<完>