本文介绍了在业务流程中如何根据节点不同时机进行操作,并通过插件实现自定义功能。文中首先概述了用户可以在节点进入或撤回时执行特定逻辑操作。接着,详细说明了业务插件的注册过程,包括JAVA插件和KS脚本两种类型,并分别介绍了它们的注册和使用方法。JAVA插件部分详细说明了如何通过实现特定接口来编写插件,并提供了获取和设置流程信息的示例代码。KS脚本部分则介绍了如何在KDE平台中新增脚本并编写监听器或自动节点的扩展插件。整体内容涵盖了插件的注册、使用以及示例代码,旨在帮助用户实现业务流程中的自定义功能。
一、 业务场景
用户创建流程时,针对每个节点不同时机可以有不同的操作。当平台提供的操作不能满足用户需要时,用户可以通过插件来实现自己需要的功能。以“进入节点时执行”为例,可以在进入节点时做默写逻辑操作,也可以在撤回时操作,如下图
二、 业务插件注册
注册业务插件:业务插件分为两种,分别是JAVA插件和KS脚本。选择不同的操作类型进入对应的操作方式,如下图所示:
三、 JAVA插件使用
JAVA插件注册 将完整包名输入“插件类”文本框,当流程走到该节点后会按照执行时机执行注册的插件。如下图
2. 监听器或自动节点及其撤回(进入离开节点)插件API-JAVA要求
实现接口:kd.bos.workflow.engine.extitf.IWorkflowPlugin
方法: public void notify(AgentExecution execution)
public void notifyByWithdraw(AgentExecution execution)
说明:执行特定的业务逻辑,实现特定功能
参数:AgentExecution对象,对象中可获取单据id,实体编码,当前节点信息等
3. 监听器或自动节点及其撤回(进入离开节点)插件-JAVA插件例子
@Override
public void notify(AgentExecution execution) {//监听器或自动节点请实现此方法——插件
String BusinessKey = execution.getBusinessKey();//单据的BusinessKey(业务ID)
List<Long> currentApprover = execution.getCurrentApprover();//获取当前节点的审批人
WorkflowElement<?> flowElement = execution.getCurrentFlowElement();//当前节点
String id = flowElement.getId();//当前流程节点ID
String name = flowElement.getName();//当前节点名称
String number = flowElement.getNumber();//当前节点id
AgentTask currentTask = execution.getCurrentTask();//获取当前任务,
Long CurrentTaskId = execution.getCurrentTaskId();//当前任务ID
Object currentTaskResult = execution.getCurrentTaskResult(WFTaskResultEnum.auditName);//获取当前 任务执行结果,参数为WFTaskResultEnum类型,除此之外还有三个可以选择的参数:WFTaskResultEnum.auditMessage; WFTaskResultEnum.auditNumber;WFTaskResultEnum.auditType
String entityNumber = execution.getEntityNumber();//单据实体编码
Long processDefinitionId = execution.getProcessDefinitionId();//获取流程定义ID
Long processInstanceId = execution.getProcessInstanceId();//获取流程实例ID
Long startUserId = execution.getStartUserId();//获取流程发起人
Object variable = execution.getVariable("aaa");//获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值
execution.setVariable("aaa", "BBB");//设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值;第二个值为Object,是“默认值”的值
}
@Override
public void notifyByWithdraw(AgentExecution execution) {
String BusinessKey = execution.getBusinessKey();//单据的BusinessKey(业务ID)
List<Long> currentApprover = execution.getCurrentApprover();//获取当前节点的审批人
WorkflowElement<?> flowElement = execution.getCurrentFlowElement();//当前节点
String id = flowElement.getId();//当前流程节点ID
String name = flowElement.getName();//当前节点名称
String number = flowElement.getNumber();//当前节点id
AgentTask currentTask = execution.getCurrentTask();//获取当前任务
Long CurrentTaskId = execution.getCurrentTaskId();//当前任务ID
String entityNumber = execution.getEntityNumber();//单据实体编码
Long processDefinitionId = execution.getProcessDefinitionId();//获取流程定义ID
Long processInstanceId = execution.getProcessInstanceId();//获取流程实例ID
Long startUserId = execution.getStartUserId();//获取流程发起人
Object variable = execution.getVariable("aaa");//获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值
execution.setVariable("aaa", "BBB");//设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值:第二个值为Object,是“默认值”的值
}
四、 KS脚本使用
KS插件注册 类型选择脚本,点击下图红框弹出选择脚本页面。
2. 点击如下图红框所示,进入KDE平台
3. 在KDE平台新增脚本,插件类型为“流程插件”,插入方法为“notify”和“ notifyByWithdraw”点击确定进入脚本编辑页面
4. 监听器或自动节点及其撤回(进入离开节点)扩展插件-KS脚本例子
/**
* @author IERP
* @date 2019-09-27
*/
var plugin = new WorkflowPlugin({
notify: function(e) {
var BusinessKey = execution.getBusinessKey(); //单据的BusinessKey(业务ID)
var currentApprover = execution.getCurrentApprover(); //获取当前节点的审批人
var flowElement = execution.getCurrentFlowElement(); //当前节点
var id = flowElement.getId(); //当前流程节点ID
var name = flowElement.getName(); //当前节点名称
var number = flowElement.getNumber(); //当前节点id
var currentTask = execution.getCurrentTask(); //获取当前任务,
var CurrentTaskId = execution.getCurrentTaskId(); //当前任务ID
var currentTaskResult = execution.getCurrentTaskResult(WFTaskResultEnum.auditName); //获取当前任务执行结果,参数为WFTaskResultEnum类型,除此之外还有三个可以选择的参数WFTaskResultEnum.auditMessage;WFTaskResultEnum.auditNumber;WFTaskResultEnum.auditType
var entityNumber = execution.getEntityNumber(); //单据实体编码
var processDefinitionId = execution.getProcessDefinitionId(); //获取流程定义ID
var processInstanceId = execution.getProcessInstanceId(); //获取流程实例ID
var startUserId = execution.getStartUserId(); //获取流程发起人
var variable = execution.getVariable("aaa"); //获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值
execution.setVariable("aaa", "BBB"); //设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值;第二个值为Object,是“默认值”的值
},
notifyByWithdraw: function(e) {
var BusinessKey = execution.getBusinessKey(); //单据的BusinessKey(业务ID)
var currentApprover = execution.getCurrentApprover(); //获取当前节点的审批人
var flowElement = execution.getCurrentFlowElement(); //当前节点
var id = flowElement.getId(); //当前流程节点ID
var name = flowElement.getName(); //当前节点名称
var number = flowElement.getNumber(); //当前节点id
var currentTask = execution.getCurrentTask(); //获取当前任务
var CurrentTaskId = execution.getCurrentTaskId(); //当前任务ID
var entityNumber = execution.getEntityNumber(); //单据实体编码
var processDefinitionId = execution.getProcessDefinitionId(); //获取流程定义ID
var processInstanceId = execution.getProcessInstanceId(); //获取流程实例ID
var startUserId = execution.getStartUserId(); //获取流程发起人
var variable = execution.getVariable("aaa"); //获取流程变量,参数为String,此处为流程动态配置方案中"名称"的值,得到的是“默认值”的值
execution.setVariable("aaa", "BBB"); //设置流程变量,第一个参数为string,为流程动态配置方案中"名称"的值:第二个值为Object,是“默认值”的值
}
});
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *