jbpm任务管理

1 分配任务

流程定义时,分配任务有多种方法:

1.  直接分配给成员:assignee="user1"  可以同时分配多人: candidate-users "user1","user2","user3"

2.  分配给组:candidate-groups="it_dept"  分 配给多个组:用逗号隔开部门 id 组列表。

3.  利用任务泳道进行分配:

1. 任 务泳道分配的特点:一个单子可以有多个人填写,一旦A 填写了,别人就不能 填写。而且 当A 提交的单子被退回的时候还应该有 A 来继续。

2. 泳 道定义:<swimlane candidate-groups="it_dept" name="test"/> ,也可以为  candidate-users.

3. 使 用泳道:在task 定义时  swimlane="test"  使用泳道,任务分配 给 it_dept  门

4. 使 用任务分配器assignment-handler 标签 使用方法: <assignment-handler class = "">

<field name="test"><string value="ttttttt"/></field>

</assignment-handler>

class 里面动态分配 assignable.setAssignee(test);

通过传参数,设置 test 的值。实现动态分配

 

成员任务列表

List<Task> taskList = taskService.findPersonalTasks(username);

组成员任务列表

List<Task> taskList = taskService.findGroupTasks(username);

由于任务有转交,加签等功能,所以一个人想要得到自己的任务就包括 组成员任务和 成 员任务两部分组成。


2 执行任务

得到任务列表后,如果任务有对应的表单,就先跳到表单,填写,然后执行。表单的绑定:在task 标签中使用  form = "xxxx.jsp" ,执行语句:

 

taskService.completeTask(taskId,"toFork1",map);

taskId 是任务 id 

toFork1  outcome ,即任务的出口

Map 是 传递的任务参数,通过任务就可以得到这些参数 :

得到指定的参数值:taskService.getVariable(taskId, "user")

    得到所 有的参数:taskService.getvariableNames(java.lang.String.taskId);

 转交任务

taskService.assignTask(taskId,"用户 Id");

任务加签

taskService.addTaskParticipatingUser(taskId,"用户 Id",Participation.CANDIDATE);

 fork  join 异步分支

<fork g="276,239,48,48" name="fork1">

      <transition g="-54,-18" name="to 计划部 " to=" 计划部 "/>

      <transition g="-54,-18" name="to 法务部 " to=" 法务部 "/>

      <transition g="-64,-18" name="to IT规划部 " to="IT 规划部 "/>

</fork>

Fork join 处理并发的情况,分配给的三个部门当执行完后,都流入到 join 标签。

Join标签属性:  multiplicity="3" multiplicity  的意思是当有几个执行到了 join 时,流程继续。

decision 决定条件

decision中会运行并判断每一个 transition  里的判断条件。 当遇到一个嵌套 条件是 true  或者没有

设置判断条件的 转移,那么转移就会被运行。

例子:当天数大于3 天,总经理审批 否则 结束

<decision expr="#{day > 3 ? 'to 总经理 ' : 'to  结束 }" g="361,280,48,48"  name="exclusive1">

      <transition g="-40,-18" name="to end1" to="end1"/>

      <transition g="-48,-18" name="to task2" to="总经理审核 "/>

   </decision> 

Decision属性:  expr  表达式 必填


 

 

Events 事件

 当一个流程通 过这一点时,事件监听器就会被提醒。

用法:在流程的 任何地方都可以加入监听 

<on event="start"> 

<event-listener class="org.jbpm.examples.eventlistener.LogListener"> 

// 参数

      <field name="msg"><string value="start on process definition"/></field> 

    </event-listener> 

 

你可能感兴趣的:(JOIN,jbpm,user,任务,transition,events)