工作流插件开发——监听器或自动节点及其撤回业务插件原创
金蝶云社区-刘子洋
刘子洋
6人赞赏了该文章 3,606次浏览 未经作者许可,禁止转载编辑于2019年09月27日 14:47:26
summary-icon摘要由AI智能服务提供

本文介绍了在业务流程中如何根据节点不同时机进行操作,并通过插件实现自定义功能。文中首先概述了用户可以在节点进入或撤回时执行特定逻辑操作。接着,详细说明了业务插件的注册过程,包括JAVA插件和KS脚本两种类型,并分别介绍了它们的注册和使用方法。JAVA插件部分详细说明了如何通过实现特定接口来编写插件,并提供了获取和设置流程信息的示例代码。KS脚本部分则介绍了如何在KDE平台中新增脚本并编写监听器或自动节点的扩展插件。整体内容涵盖了插件的注册、使用以及示例代码,旨在帮助用户实现业务流程中的自定义功能。


一、 业务场景 


用户创建流程时,针对每个节点不同时机可以有不同的操作。当平台提供的操作不能满足用户需要时,用户可以通过插件来实现自己需要的功能。以“进入节点时执行”为例,可以在进入节点时做默写逻辑操作,也可以在撤回时操作,如下图

                        1.png


二、 业务插件注册


 注册业务插件:业务插件分为两种,分别是JAVA插件和KS脚本。选择不同的操作类型进入对应的操作方式,如下图所示:

                        2.png


  三、 JAVA插件使用 


  1. JAVA插件注册 将完整包名输入“插件类”文本框,当流程走到该节点后会按照执行时机执行注册的插件。如下图


                     3.png

2. 监听器或自动节点及其撤回(进入离开节点)插件API-JAVA要求

  • 实现接口:kd.bos.workflow.engine.extitf.IWorkflowPlugin

  • 方法: public void notify(AgentExecution execution)      

  •            public void notifyByWithdraw(AgentExecution execution)

  • 说明:执行特定的业务逻辑,实现特定功能

  • 参数:AgentExecution对象,对象中可获取单据id,实体编码,当前节点信息等

3. 监听器或自动节点及其撤回(进入离开节点)插件-JAVA插件例子


  1. @Override  

  2.     public void notify(AgentExecution execution) {//监听器或自动节点请实现此方法——插件  

  3.         String BusinessKey = execution.getBusinessKey();//单据的BusinessKey(业务ID)  

  4.         List<Long> currentApprover = execution.getCurrentApprover();//获取当前节点的审批人  

  5.         WorkflowElement<?> flowElement = execution.getCurrentFlowElement();//当前节点  

  6.           String id = flowElement.getId();//当前流程节点ID  

  7.           String name = flowElement.getName();//当前节点名称  

  8.           String number = flowElement.getNumber();//当前节点id  

  9.         AgentTask currentTask = execution.getCurrentTask();//获取当前任务,  

  10.         Long CurrentTaskId = execution.getCurrentTaskId();//当前任务ID  

  11.         Object currentTaskResult = execution.getCurrentTaskResult(WFTaskResultEnum.auditName);//获取当前 任务执行结果,参数为WFTaskResultEnum类型,除此之外还有三个可以选择的参数:WFTaskResultEnum.auditMessage; WFTaskResultEnum.auditNumber;WFTaskResultEnum.auditType                                                                                                                                        

  12.         String entityNumber = execution.getEntityNumber();//单据实体编码  

  13.         Long processDefinitionId = execution.getProcessDefinitionId();//获取流程定义ID  

  14.         Long processInstanceId = execution.getProcessInstanceId();//获取流程实例ID  

  15.         Long startUserId = execution.getStartUserId();//获取流程发起人  

  16.         Object variable = execution.getVariable("aaa");//获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值  

  17.         execution.setVariable("aaa", "BBB");//设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值;第二个值为Object,是“默认值”的值  

  18.     }  

  19. @Override  

  20.     public void notifyByWithdraw(AgentExecution execution) {  

  21.         String BusinessKey = execution.getBusinessKey();//单据的BusinessKey(业务ID)  

  22.         List<Long> currentApprover = execution.getCurrentApprover();//获取当前节点的审批人  

  23.         WorkflowElement<?> flowElement = execution.getCurrentFlowElement();//当前节点  

  24.           String id = flowElement.getId();//当前流程节点ID  

  25.           String name = flowElement.getName();//当前节点名称  

  26.           String number = flowElement.getNumber();//当前节点id  

  27.         AgentTask currentTask = execution.getCurrentTask();//获取当前任务  

  28.         Long CurrentTaskId = execution.getCurrentTaskId();//当前任务ID  

  29.         String entityNumber = execution.getEntityNumber();//单据实体编码  

  30.         Long processDefinitionId = execution.getProcessDefinitionId();//获取流程定义ID  

  31.         Long processInstanceId = execution.getProcessInstanceId();//获取流程实例ID  

  32.         Long startUserId = execution.getStartUserId();//获取流程发起人  

  33.         Object variable = execution.getVariable("aaa");//获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值  

  34.         execution.setVariable("aaa", "BBB");//设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值:第二个值为Object,是“默认值”的值  

  35.     }  



四、 KS脚本使用 


  1. KS插件注册 类型选择脚本,点击下图红框弹出选择脚本页面。

    5.png

2. 点击如下图红框所示,进入KDE平台

4.png

3. 在KDE平台新增脚本,插件类型为“流程插件”,插入方法为“notify”和“ notifyByWithdraw”点击确定进入脚本编辑页面

6.png

4. 监听器或自动节点及其撤回(进入离开节点)扩展插件-KS脚本例子


  1. /** 

  2.  * @author IERP 

  3.  * @date 2019-09-27 

  4.  */  

  5. var plugin = new WorkflowPlugin({  

  6.     notify: function(e) {  

  7.         var BusinessKey = execution.getBusinessKey(); //单据的BusinessKey(业务ID)  

  8.         var currentApprover = execution.getCurrentApprover(); //获取当前节点的审批人  

  9.         var flowElement = execution.getCurrentFlowElement(); //当前节点  

  10.         var id = flowElement.getId(); //当前流程节点ID  

  11.         var name = flowElement.getName(); //当前节点名称  

  12.         var number = flowElement.getNumber(); //当前节点id  

  13.         var currentTask = execution.getCurrentTask(); //获取当前任务,  

  14.         var CurrentTaskId = execution.getCurrentTaskId(); //当前任务ID  

  15.         var currentTaskResult = execution.getCurrentTaskResult(WFTaskResultEnum.auditName); //获取当前任务执行结果,参数为WFTaskResultEnum类型,除此之外还有三个可以选择的参数WFTaskResultEnum.auditMessage;WFTaskResultEnum.auditNumber;WFTaskResultEnum.auditType  

  16.         var entityNumber = execution.getEntityNumber(); //单据实体编码  

  17.         var processDefinitionId = execution.getProcessDefinitionId(); //获取流程定义ID  

  18.         var processInstanceId = execution.getProcessInstanceId(); //获取流程实例ID  

  19.         var startUserId = execution.getStartUserId(); //获取流程发起人  

  20.         var variable = execution.getVariable("aaa"); //获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值  

  21.         execution.setVariable("aaa", "BBB"); //设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值;第二个值为Object,是“默认值”的值  

  22.     },  

  23.   notifyByWithdraw: function(e) {  

  24.         var BusinessKey = execution.getBusinessKey(); //单据的BusinessKey(业务ID)  

  25.         var currentApprover = execution.getCurrentApprover(); //获取当前节点的审批人  

  26.         var flowElement = execution.getCurrentFlowElement(); //当前节点  

  27.         var id = flowElement.getId(); //当前流程节点ID  

  28.         var name = flowElement.getName(); //当前节点名称  

  29.         var number = flowElement.getNumber(); //当前节点id  

  30.         var currentTask = execution.getCurrentTask(); //获取当前任务  

  31.         var CurrentTaskId = execution.getCurrentTaskId(); //当前任务ID  

  32.         var entityNumber = execution.getEntityNumber(); //单据实体编码  

  33.         var processDefinitionId = execution.getProcessDefinitionId(); //获取流程定义ID  

  34.         var processInstanceId = execution.getProcessInstanceId(); //获取流程实例ID  

  35.         var startUserId = execution.getStartUserId(); //获取流程发起人  

  36.         var variable = execution.getVariable("aaa"); //获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值  

  37.         execution.setVariable("aaa", "BBB"); //设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值:第二个值为Object,是“默认值”的值  

  38.     }  

  39. });  



图标赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0