泛微E9,ecode中怎么定位到具体的流程节点呢

我新建了一个测试流程,并且希望在这个节点模板中编写一些js代码

img

这里是这个节点和流程的id

img

我在ecode中新建了这样一个应用,设置regist.js文件为前置加载,并在其中指定了对应的workflowID和nodeID

img

然后,我在index.js中编写了一小段测试代码

img

然后发布了应用

img

前端刷新该节点页面,代码并没有生效,F12中也没有对应的报错

img

register.js代码如图

let isRun = false; //控制执行次数

const config = ecodeSDK.getCom('${appId}','config');

let lockBtn = false;
let didLoadJs = false;
const runScript = ()=>{ //代码块钩子,类似放在代码块中或者jquery.ready
  //可操作WfForm,以及部分表单dom hiden、ReactDOM.render
  //console.log('runScript!');
  ecodeSDK.load({
    id:'${appId}',
    noCss: true,
    cb:()=>{
      lockBtn = false;
      didLoadJs = true;
      // console.log('加载成功');
    }
  });
  isRun = true; //确保只执行一次
}

//PC端代码块
//利用组件复写作为代码块执行钩子,这种方案可以支持覆盖到所有流程,也可以判断到指定流程指定节点
ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop',{
  fn:(newProps)=>{
    if(!config.enable) return ; //开关打开
    const {hash} = window.location;
    if(!hash.startsWith('#/main/workflow/req')) return ; //判断页面地址
    if (!didLoadJs) lockBtn = true; // 锁定按钮,避免没有拦截到用户提交动作(针对注册钩子事件,例如WfForm.registerAction)
    if(!ecCom.WeaTools.Base64) return ; //完整组件库加载完成
    if(!WfForm) return ; //表单sdk加载完成
    const baseInfo = WfForm.getBaseInfo();
    const {workflowid,nodeid} = baseInfo;
    if(workflowid!==636 || nodeid !== 4646)return;
    if (config.enableUuid && window.uuIdEcode && config.uuIds) {
      // window.uuIdEcode 插入代码块中写入的唯一值
      if (config.uuIds.indexOf(window.uuIdEcode) < 0) return;
    } else if(!config.base[workflowid]) return;
    if(isRun) return ; //执行过一次就不执行
    runScript(); //执行代码块
  }
});
// 锁定按钮
ecodeSDK.overwritePropsFnQueueMapSet('Button', {
  fn: (newProps) => {
    if(!config.enable) return ; //开关打开
    const {hash} = window.location;
    if(!hash.startsWith('#/main/workflow/req')) return ; //判断页面地址
    if(!ecCom.WeaTools.Base64) return ; //完整组件库加载完成
    if(!WfForm) return ; //表单sdk加载完成
    const baseInfo = WfForm.getBaseInfo();
    const {workflowid,nodeid} = baseInfo;
    if(workflowid!==636 || nodeid !== 4646)return;
    if (config.enableUuid && window.uuIdEcode && config.uuIds) {
      // window.uuIdEcode 插入代码块中写入的唯一值
      if (config.uuIds.indexOf(window.uuIdEcode) < 0) return;
    } else if(!config.base[workflowid]) return;
    const oldClick = newProps.onClick;
    newProps.onClick = (e) => {
      if (!lockBtn) {
        oldClick(e);
      } else {
        // console.log('锁定');
      }
    }
  }
})

//移动端触发代码块,由于移动端代码块使用的组件和PC端代码块不同,所以此方法可以建一个独立项目(橙色)
ecodeSDK.overwriteMobilePropsFnQueueMapSet('TabPage',{
  fn:(newProps)=>{
    if(!config.enable) return ; //开关打开
    const {hash} = window.location;
    if(!hash.startsWith('#/req')) return ; //判断页面地址
    if(!WfForm) return ; //表单sdk加载完成
    const baseInfo = WfForm.getBaseInfo();
    if(!baseInfo) return ;
    const {workflowid,nodeid} = baseInfo;
    if(workflowid!==636 || nodeid !== 4646)return;
    if (config.enableUuid && window.uuIdEcode && config.uuIds) {
      // window.uuIdEcode 插入代码块中写入的唯一值
      if (config.uuIds.indexOf(window.uuIdEcode) < 0) return;
    } else if(!config.base[workflowid]) return;
    if(isRun) return ; //执行过一次就不执行
    runScript(); //执行代码块
  }
});


index.js代码如下:

jQuery(document).ready(function(){
  alert("nihao !");
})