如何在工作流插件中获取当前节点后续的节点信息原创
14人赞赏了该文章
4,230次浏览
未经作者许可,禁止转载编辑于2022年07月04日 17:48:38
摘要由AI智能服务提供
本文介绍了在金蝶云苍穹的工作流系统中,如何通过自定义插件获取当前审批节点后续节点信息的方案。通过实现`IWorkflowPlugin`接口的`notify`方法,并利用`WorkflowServiceHelper`获取所有节点信息,然后自行判断当前节点及其后续节点。文章还提供了实现代码示例及注册插件的步骤,并说明了实现效果、开发环境版本不限及注意事项。最后,鼓励用户分享和反馈。
关键字:工作流、后续节点信息
一、需求背景:
苍穹的工作流使用的时候,在流程到达某个审批节点的时候,想要获取该节点后续的节点信息。比如根据后续节点信息来发消息或者查看后续还有几级节点等。那么如何来获取当前节点的后续节点信息呢?
二、思路与方案:
在工作流插件的notify方法中完成该逻辑。
调试入参AgentExecution,发现没有获取剩余节点信息的方法,退而求其次,获取所有节点信息,然后自行判断
三、实现过程
实现代码:
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.workflow.WorkflowServiceHelper; import kd.bos.workflow.api.AgentExecution; import kd.bos.workflow.api.WorkflowElement; import kd.bos.workflow.engine.dynprocess.freeflow.WFFlowElement; import kd.bos.workflow.engine.dynprocess.freeflow.WFFlowNode; import kd.bos.workflow.engine.extitf.IWorkflowPlugin; import java.util.List; public class GetWFInfoDemo implements IWorkflowPlugin { /** * 获取所有工作流节点信息 * 节点信息的对象是 WFFlowElement * * @param e */ @Override public void notify(AgentExecution e) { //获取当前审批的单据标识 String entityNumber = e.getEntityNumber(); Long processDefinitionId = e.getProcessDefinitionId(); QFilter qFilter = new QFilter("entrabillid.number", "=", entityNumber); qFilter.and("enable", "=", "enable"); //根据单据标识和已启用两个条件,查询wf_processdefinition(流程管理)实体,获取流程的标识和版本 //这里要注意,根据实际情况可能还要加条件来定位具体的流程管理实体,因为一个单据可能对应多个已启用的流程管理实例,所以返回值可能不止一个 DynamicObject wfProcessdefinition = BusinessDataServiceHelper.loadSingle("wf_processdefinition", "key,version", new QFilter[]{qFilter}); String wfNumber = wfProcessdefinition.getString("key"); String version = wfProcessdefinition.getString("version"); //根据流程标识和版本获取流程所有的节点信息 List<WFFlowElement> processElements = WorkflowServiceHelper.getProcessElements(wfNumber, version); //遍历所有节点和当前节点比较,如果是当前节点,则获取后续的节点数据 WorkflowElement currentFlowElement = e.getCurrentFlowElement(); String curEleId = currentFlowElement.getId(); boolean flag = false; for (WFFlowElement processElement : processElements) { String processElementId = processElement.getId(); if (!curEleId.equals(processElementId) && !flag) { continue; } flag = true; // 第一次进入的是当前节点,这里改成true,那么后续节点也会进来 // 后续节点包括各类型的节点和线条,根据type区分 String type = processElement.getType(); // 获取后续节点执行逻辑。。。。 // 如果只需要节点信息,可直接获取后续node节点信息,都封装在nextNodes中。如果要判断线条信息,可以遍历获取下个processElement对象 List<WFFlowNode> nextNodes = processElement.getNextNodes(); String number = processElement.getNumber(); System.out.println("----------"); } } }
并在对应的工作流节点注册插件
四、实现效果
我们看到代码中已经获取到当前节点信息及后续节点信息,可以执行剩下的逻辑
五、开发环境版本
不限
六、注意事项
该代码只完成了获取后续节点的部分,剩余的业务逻辑可自行根据实际情况完成。
七、参考资料:
如果发现文章有什么问题欢迎大家指出,我将积极验证修改。如果有帮到你,还请来一波三连:关注,点赞,收藏。觉得有用也可以分享到公司云之家群,惠及其他同事,感谢您的耐心观看~~~
GetWFInfoDemo.zip(1.42KB)
赞 14
14人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读