snaker工做流引擎学习记录。app
任务1: 完成一个完整的流程设计图。学习
任务2: 搞懂方法中的参数的做用以及使用场景。测试
任务3: 写一个会签测试Demo。spa
snaker中的会签功能取决于节点中performType属性的属性值来决定是否产生多个相同的任务。
设计
performType
的属性只有两个: ANY(表明多个参与者时,只要有一个参与者经过,则流程即可以继而往下流转)、ALL(表明多个参与者时,必须全部的参与者都必须经过,流程才会往西继续流转)。code
在写会签节点时,参与者是在哪里添加的呢?orm
参与者的设置方法在snaker官方文档中有介绍,这里我使用的是在代码中动态添加一个参与者。blog
如图:文档
在设计图中只有一个参与者,但只是一个标记,在流程数据构造的时候,会给每一个标记赋予对应的角色。get
在设计图时参与者的名称必须和数据构造时给的标记是一致的,不然程序就会找不到对应到参与者,会报一个没法执行下一步的错误。
/** 流程数据构造开始 */ Map<String, Object> params = new HashMap<String, Object>(); String falg= ShiroUtils.getOrgCode(); String falg1= ShiroUtils.getParentOrgCode(falg); String falg2= ShiroUtils.getParentOrgCode(falg1); String falg3= ShiroUtils.getParentOrgCode(falg2); params.put("apply.operator",SecurityUtil.getApprover(prop.get("falg"), falg)); params.put("cwh.operator", SecurityUtil.getApprover(prop.get("falg"), falg1)); params.put("sybAndJdxz.operator",SecurityUtil.getApprover(prop.get("falg"), falg2)); params.put("mzj.operator", SecurityUtil.getApprover(prop.get("flag"), falg3)); /** 流程数据构造结束 */
数据流程构造的时候给了他一个角色,也就是参与者。接下来在会签节点对应的方法中再为它动态的添加一个参与者。
engine.task().addTaskActor(taskId, 1 ,SecurityUtil.getApprover(prop.get("falg"), falsg4));
这样会签须要的参与者就搞定了。
而后就是决策,每一个节点的返回结果无非就是赞成/不一样意,经过/不经过 等等。。这个结果能够以变量的形式来储存,以${result}这种形式返回给流程,告诉它这个节点的最后决定是什么,是否继续往下流转。
if(result.equals("甲赞成") && result.equals("乙赞成")){ setAttr("result", "甲乙赞成"); }else{ setAttr("result", "甲乙不一样意"); }
在开始并执行流程的时候须要实现这样一个方法,其中有三个参数,分别表明任务ID、当前操做人员ID(当前登陆人员)、参与者列表集合(流程数据构造时的集合)
/** * 根据任务主键ID,操做人ID,参数列表执行任务 * @param taskId 任务主键ID * @param operator 操做人主键ID * @param args 参数列表 * @return List<Task> 任务集合 */ public List<Task> executeTask(String taskId, String operator, Map<String, Object> args);
写过的东西记录下来,方便后用。