天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

 找回密码
 注册成为天翎用户
查看: 2737|回复: 0

[常见问题] 通过脚本修改当前节点审批人

[复制链接]
Chain 发表于 2021-3-30 17:43:23 | 显示全部楼层 |阅读模式
常用场景:根据用户的情况,在表单中选择用户,将现在需要审批处理的节点,转给另一个用户进行审批。

参考脚本:
  1. (function(){
  2.         var doc = getCurrentDocument();
  3.         var userIds = getWebUser().getId();
  4.         var user = doc.getItemValueAsString("审批人"); //表单字段
  5.         var docProcess = getDocProcess(getApplication());  
  6.         var docids = splitText(user, ";");
  7.         var userlist = createObject("java.util.ArrayList");
  8.         var list = new Packages.java.util.ArrayList();
  9.         for (var i = 0; i < docids.length; i++) {
  10.                 if(docids != null) {
  11.                         list.add(docids[i]);
  12.                 }
  13.         }

  14.         var params = getParamsTable();
  15.         params.setParameter("auditorList",list);
  16.         var currNodeId= "1617073756399"; //当前节点ID
  17.         params.setParameter("_currid", currNodeId);
  18.         var actorJson = new Packages.net.sf.json.JSONObject();

  19.         actorJson.put(currNodeId,list);
  20.         doc.setAuditorList(actorJson.toString());

  21.         docProcess.doChangeAuditor(doc,params,getWebUser());
  22. })();
复制代码
补充:
  1. /**
  2. * 批量更新当前流程节点审批人
  3. * @param docid
  4. *                         文档id
  5. * @param applicationId
  6. *                         软件id
  7. * @param content 请求包体
  8. * @return
  9. * @throws Exception
  10. */
  11. @PutMapping("/domain/workflow/approvers/batch")
  12. @ResponseStatus(HttpStatus.OK)
  13. @ApiOperation(value = "批量更新当前流程节点审批人", notes = "批量更新当前流程节点审批人")
  14. @ApiImplicitParams({
  15. @ApiImplicitParam(name = "content",value = "请求包体",required = true,paramType = "body",dataType = "string")
  16. })
  17. public Resource batchuUpdateApprovers(@RequestBody String content) {
  18.         try {
  19.         JSONObject jsonObject = JSONObject.fromObject(content);
  20.         List<String> userIds = jsonObject.getJSONArray("userIds");
  21.         JSONArray docs = jsonObject.getJSONArray("docs");
  22.         WebUser user = WebUser.getAdminUser(request);

  23.         List<String> errorMsg = new ArrayList<String>();
  24.         int count = 0;
  25.         for(Iterator<JSONObject> iterator = docs.iterator();iterator.hasNext();){
  26.         try{
  27.                 JSONObject json = iterator.next();
  28.                 String docId = json.getString("docId");
  29.                 String applicationId = json.getString("applicationId");
  30.                 DocumentProcess process = (DocumentProcess)ProcessFactory.createRuntimeProcess(DocumentProcess.class, applicationId);
  31.                 Document doc = (Document)process.doView(docId);
  32.                 if(doc == null){
  33.                         count++;
  34.                         errorMsg.add("第"+ count + "条处理失败。原因:数据不存在!");
  35.                         continue;
  36.                 }
  37.                 var params = createParamsTable();
  38.                 //ParamsTable params = new ParamsTable(getParams());
  39.                 params.setParameter("auditorList", userIds);

  40.                 FlowStateRT instance = doc.getState();
  41.                 if(instance == null){
  42.                         count++;
  43.                         errorMsg.add("第"+ count + "条处理失败。原因:当前流程实例不存在!");
  44.                         continue;
  45.                 }
  46.                 NodeRT nodeRT = instance.getNoderts().iterator().next();
  47.                 if(nodeRT == null){
  48.                         count++;
  49.                         errorMsg.add("第"+ count + "条处理失败。原因:当前节点实例不存在!");
  50.                 }
  51.                 String currNodeId = nodeRT.getNodeid();

  52.                 JSONObject actorJson = new JSONObject();
  53.                 actorJson.put(currNodeId, userIds);
  54.                 doc.setAuditorList(actorJson.toString());
  55.                 params.setParameter("_currid", currNodeId);

  56.                 process.doChangeAuditor(doc, params, user);
  57.                 doc.setEditAbleLoaded(false);
  58.                 MemoryCacheUtil.putToPrivateSpace(doc.getId(), doc, user);
  59.                 count++;
  60.         } catch (Exception e){
  61.                 count++;
  62.                 errorMsg.add("第"+ count + "条处理失败。");
  63.         }
  64.         }
  65.         if(errorMsg.isEmpty()){
  66.                 return success("ok", null);
  67.         } else {
  68.                 return success("ok", errorMsg);
  69.         }
  70.         } catch (Exception e) {
  71.                 e.printStackTrace();
  72.                 return error(500, e.getMessage(), null);
  73.         }
  74. }
复制代码

本版积分规则

QQ|手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-12 04:00

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表