`

二十二、如何给角色分配任务,而且拥有此角色的用户均需审批通过之后才能继续往下?

 
阅读更多

解决方法:
* 在一个node-enter事件中,我们自己来接管TaskInstance的创建过程,并给每个TaskInstance设置actorId
* 在定义流程的时候,指定create-tasks="no",告诉JBPM不要自动创建TaskInstance
* 在定义流程的时候,指定signal="last"(或不指定,因为默认就是这个取值)

 

<?xml version="1.0" encoding="UTF-8"?>

<process-definition
  xmlns="urn:jbpm.org:jpdl-3.2"  name="test12">
   <start-state name="开始">
      <transition name="" to="系统管理员审批"></transition>
   </start-state>
   <task-node name="系统管理员审批" create-tasks="no" >
         <event type="node-enter">
             <action class="com.ygtim.domain.RoleAssignmentActionHandler">
                 <roleName>系统管理员</roleName>
             </action>
         </event>

         <task name="审批"/>
      <transition name="" to="结束" ></transition>
   </task-node>
   <end-state name="结束"></end-state>
  
</process-definition>

 

 

public class RoleAssignmentActionHandler implements ActionHandler {
   
    /** Comment for <code>serialVersionUID</code> */
    private static final long    serialVersionUID    = -5348773299229669146L;
    /**
     * 由JBPM来注入
     */
    private String                roleName;
   
    @Override
    public void execute(ExecutionContext executionContext) throws Exception {
       
        List<String> actors = new ArrayList<String>();
       
        //根据roleName来得到该角色下面的所有用户
        if ("系统管理员".equals(roleName)) {
            actors.add("张三");
            actors.add("李四");
        }
        TaskMgmtInstance taskMgmtInstance = executionContext.getTaskMgmtInstance();
        //因为只定义了一个任务
        Task task = (Task) ((TaskNode) executionContext.getNode()).getTasks().iterator().next();
       
        for (String actor : actors) {
            TaskInstance ti = taskMgmtInstance.createTaskInstance(task, executionContext);
            ti.setActorId(actor);
            //注意,这些操作在事务提交的时候会自动保存
        }

    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics