SpringBoot集成SnakerFlow流程引擎,简介、功能列表、详细解读、扩展点分
⽂章⽬录
☎  ☎  ☎  已开源基于SnakerFlow轻量级⼯作流引擎的脚⼿架项⽬
详情参见:
简介
SnakerFlow是⼀个基于Java的轻量级⼯作流引擎,适⽤于企业应⽤中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境⽀持。
轻量: snaker-core.jar⼤⼩208K,代码⾏数约7000⾏,强⼤的扩展⽀持,不依赖于具体的ORM框架,默认⽀持以下框架:Spring、Jfinal、Nutz
Jdbc、SpringJdbc、Hibernate3、Hibernate4、Mybatis
简单: 表设计简单,七张核⼼表
表设计简单[核⼼表7张]
流程组件简单[start/end/task/custom/subprocess/decision/fork/join]
灵巧: 预留⼤量扩展接⼝,⽀持web流程设计器
暴露⼤量可扩展接⼝
⽀持流程设计器、流程引擎的组件模型⾃定义[节点⾃定义、属性⾃定义、表单⾃定义]
相关⽹站如下:
功能列表
流程定义
待办
已办
任务到达某节点发出sms email 创建任务、完成实例
催办
转办
会签
snaker的会签⽬前相对⽐较简单,仅仅是根据任务节点的performType属性值确定是否产⽣多个相同任务。
performType的值有两种,分别是ANY、ALL。
ANY多个参与者时,任何⼀个完成任务即继续流转
ALL多个参与者时,所有都需要完成任务才能继续流转
performType为0 ANY,则仅仅向wf_task_actor表中增加⼀条参与者信息performType为1ALL,则会在wf_task表中增加⼀条任务数据。
加签
engine.task().addTaskActor(String taskId, 1, String… actorIds)
审批环节 同意 拒绝
驳回到任意节点
流程图
撤回
任务参与者
流程定义
⽀持Eclipse插件、web设计器。
任务参与者
snaker的任务⽀持静态配置、动态传递、⾃定义类处理、动态设置、组等⽅式。
参与者设置
动态添加、删除参与者
组⽀持
参与者设置
直接设置静态参与者,即assignee值为⽤户、部门或⾓⾊的标识符
通过运⾏时动态传递,即assignee值为变量名称,在调⽤流程引擎的api时,通过map参数传递这个变量值
通过⾃定义类[继承Assignment类],设置assignmentHandler属性,assign⽅法返回值就是参与者
常⽤的动态添加、删除参与者⽰例
Order dm = snakerEngineFacets.Id(), "张三", ate()
.set("user1", "张三排")
.set("user2", "组长")
.set("approveBoss.operator", "部门经理"));
<task assignee="user1"displayName="请假申请"form="/flow/leave/apply"layout="117,122,-1,-1"name="apply"
performType="ANY">
<transition g=""name="transition2"offset="0,0"to="approveDept"/>
</task>
<task assignee="user2"displayName="部门经理审批"form="/flow/leave/approveDept"layout="272,122,-1,-1"
name="approveDept"performType="ANY">
<transition g=""name="transition3"offset="0,0"to="decision1"/>
</task>
<decision displayName="decision1"expr="#day > 2 ? 'transition5' : 'transition4'"layout="426,124,-1,-1"
name="decision1">
<transition displayName="<=2天"g=""name="transition4"offset="0,0"to="end1"/>
<transition displayName=">2天"g=""name="transition5"offset="0,0"to="approveBoss"/>
</decision>
<task assignee="approveBoss.operator"displayName="总经理审批"form="/flow/leave/approveBoss"layout="404,231,-1,-1"
name="approveBoss"performType="ANY">
<transition g=""name="transition6"offset="0,0"to="end1"/>
</task>
源码:TaskService
/**
* 根据Task模型的assignee、assignmentHandler属性以及运⾏时数据,确定参与者
* @param model 模型
* @param execution 执⾏对象
* @return 参与者数组
*/
private String[]getTaskActors(TaskModel model, Execution execution){
Object assigneeObject =null;
AssignmentHandler handler = AssignmentHandlerObject();
if(StringHelper.Assignee())){
// Args{user1:张三,user2:李四},Assignee() user1
assigneeObject = Args().Assignee());
}else if(handler !=null){
if(handler instanceof Assignment){
assigneeObject =((Assignment)handler).assign(model, execution);
}else{
assigneeObject = handler.assign(execution);
}
}
return getTaskActors(assigneeObject ==null? Assignee(): assigneeObject);
}
动态添加、删除参与者
向指定任务动态添加参与者,同时⽀持设置参与类型
performType为0,则仅仅向wf_task_actor表中增加⼀条参与者信息performType为1,则会在wf_task表中增加⼀条任务数据。engine.task().addTaskActor(String taskId, actors)
engine.task().addTaskActor(String taskId, Integer performType, actors)
对指定任务动态删除其中的参与者
engine.task().removeTaskActor(String taskId, actors)
组⽀持
由于snaker引擎与⽤户权限完全解耦的,所以对于组的⽀持,仅仅是你设置组作为参与者,你就要⾃定义⼀个任务的访问策略,能够根据操作⼈得到所有的组集合,这样流程引擎才能允许该操作⼈处理任务。
⾃定义任务访问策略类
public class CustomAccessStrategy extends GeneralAccessStrategy {    protected List<String> ensureGroup(String operator) {
//此处根据实际项⽬获取操作⼈对应的组列表
Groups();
}
}springboot框架的作用
配置
在l中增加下⾯的配置
<bean class="com.snakerflow.framework.flow.CustomAccessStrategy"/>详细解读
Spring Boot集成
l依赖
<dependency>
<groupId>com.github.snakerflow-starter</groupId>
<artifactId>snakerflow-spring-boot-starter</artifactId>
<version>1.0.7</version>
</dependency>
2.新增配置项
mybatis-plus:
type-aliases-package: ity
3.初始化sql脚本
表定义
Snaker流程引擎核⼼共7张表,关系图如下所⽰:
表详细说明:
表名称描述备注
wf_process流程定义表
wf_order活动实例表
wf_task活动任务表
wf_task_actor活动任务参与者表
wf_hist_order历史实例表
wf_hist_task历史任务表
wf_hist_task_actor历史任务参与者表
wf_surrogate委托代理管理表⼀般业务⽤不到wf_cc_order抄送实例表⼀般业务⽤不到字段详细说明:
wf_process
字段名称字段描述
id主键ID
name流程名称
display_Name流程显⽰名称
type流程类型
instance_Url实例url
state流程是否可⽤
content流程模型定义
version版本
create_Time创建时间
creator创建⼈
wf_order
字段名称字段描述
id主键ID
parent_Id⽗流程ID
process_Id流程定义ID
creator发起⼈
create_Time发起时间
expire_Time期望完成时间
last_Update_Time上次更新时间
last_Updator上次更新⼈
priority优先级

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。