本文介绍了在流程管理系统中,用户可以通过设置条件和注册业务插件来自定义审批流程。设置条件的方法包括规则设置和外部接口,后者允许用户自定义JAVA或KS脚本插件。详细说明了JAVA插件的注册和使用方式,包括插件注册方法、接口实现要求及示例代码。对于KS脚本插件,也介绍了注册和编写脚本的方法及示例代码,说明了如何获取流程执行中的各项数据并返回审批结果。
一、 业务场景
平台考虑到用户在使用流程中可能会设置条件,所以在对应位置开放该权限。设置条件的方法有两种:规则设置和外部接口。当规则设置不能满足用户要求时,用户可以使用外部接口,自己定义插件,完成对应的功能。外部接口设置如下图(以自动审批条件为例):
二、 业务插件注册
注册业务插件:业务插件分为两种,分别是JAVA插件和KS脚本。如下图所示,选择对应的种类填写插件类:
三、 JAVA插件使用
1. JAVA插件注册
将完整包名输入“插件类”文本框,当流程执行到该节点时,需要计算是否需要自动审批时,会触发该方法。如下图
2. 条件规则外部接口插件API-JAVA要求
实现接口:kd.bos.workflow.engine.extitf.IWorkflowPlugin
方法: public boolean hasTrueCondition(AgentExecution execution)
说明:根据特定的业务逻辑返回true或false。
参数:AgentExecution对象,对象中可获取单据id,实体编码,当前节点信息等
返回值:true或false
3. 条件规则外部接口插件扩展插件-JAVA插件例子
@Override
public boolean hasTrueCondition(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,此处为流程动态配置方案 中"名称"的值,得到的是“默认值”的值
return true;//返回值为boolean
}
四、 KS脚本使用
1. KS插件注册 类型选择脚本,点击下图红框弹出选择脚本页面。
2. 点击如下图红框所示,进入KDE平台
3. 在KDE平台新增脚本,插件类型为“流程插件”,插入方法为“hasTrueCondition”点击确定进入脚本编辑页面
4. 条件规则外部接口插件-KS脚本例子
/**
* @author IERP
* @date 2019-09-27
*/
var plugin = new WorkflowPlugin({
hasTrueCondition: 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,此处为流程动态配置方案中"名 称"的值,得到的是“默认值”的值
return true; //返回值为boolean
}
});
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *