snaker工作流引擎

时间:2021-12-12 04:09:26

snaker工作流引擎学习记录。

  任务1: 完成一个完整的流程设计图。

  任务2: 搞懂方法中的参数的作用以及使用场景。

  任务3: 写一个会签测试Demo。

    snaker工作流引擎

 

  snaker中的会签功能取决于节点中performType属性的属性值来决定是否产生多个相同的任务。

  performType的属性只有两个: ANY(代表多个参与者时,只要有一个参与者通过,则流程便可以继而往下流转)、ALL(代表多个参与者时,必须所有的参与者都必须通过,流程才会往西继续流转)。

  在写会签节点时,参与者是在哪里添加的呢?

  参与者的设置方法在snaker官方文档中有介绍,这里我使用的是在代码中动态添加一个参与者。

  如图:

    snaker工作流引擎

  在设计图中只有一个参与者,但只是一个标记,在流程数据构造的时候,会给每个标记赋予对应的角色。

  在设计图时参与者的名称必须和数据构造时给的标记是一致的,否则程序就会找不到对应到参与者,会报一个无法执行下一步的错误。

  

		/** 流程数据构造开始 */
		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}这种形式返回给流程,告诉它这个节点的最后决定是什么,是否继续往下流转。

snaker工作流引擎

        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);

  写过的东西记录下来,方便后用。