任务:流程中的任务是流程与操作者的交互的一种手段 是JBPM的核心 在jbpm中任务主要定义在Task Node节点上。
任务保存在jbpm_taskinstrance
一个任务对应一个任务实例
任务实例的生命周期:创建(create)-开始处理(start)-完成(end) 这3步骤是一般情况下的,实际开发中 还有
取消(cancel) 挂起(suspend)
在任务实例结束的时候 也可以像流程发出向下流转的型号(signal) 如果一个Task node里面只定义了一个task 那么这个任务实例借宿的时候就会想流程实例发出向下流转信号。
任务分配
任务可以分配给一个或多个参与者
在Assignment 分配参与者 有以下几种分配方式
1:Handler 方式 实现AssignmentHandler 接口的任务分配类
package assignment;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;
/**
* 对TaskNode节点进行任务分配
* @author wwwlike
*/
public class TestAssignment implements AssignmentHandler {
public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("zhongjian");
}}
因为TaskInstrance 实现了Assignable 对象 所以assignable 也相当于是TaskInstrance的实例
2 Expression 方式
以后补充
3 swimlance 方式
就是为多个任务分配相同的执行者 在配置文件下 定义 <swimlane name="name"></swimlane>
4Pool Actors方式
这个可以是静态的在XMl标签上 定义任务的参与者,也可以用JPDL表达式动态的从上下文中取得任务的参与者
<task-node name="" > <task > <assignment pooled-actors=""></assignment> </task> </task-node>
任务事件
一般有四种事件 :task-create.task-assign(进行任务实例和参与者分配的事件),task-start,task-end 配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="taskeventtest"> <start-state name="start-state1"> <transition to="task-node1"></transition> </start-state> <task-node name="task-node1"> <task name="test event task"> <assignment actor-id="zhongjian"></assignment> <controller></controller> </task> <event type="task-create"> <script> print("触发了task-create事件"); </script> </event> <event type="task-start"> <script> print("触发了task-start事件"); </script> </event> <event type="task-assign"> <script> print("触发了task-assign事件"); </script> </event> <event type="task-end"> <script> print("触发了task-end事件"); </script> </event> <transition to="end-state1"></transition> </task-node> <end-state name="end-state1"></end-state> </process-definition>
任务控制器
简单的介绍 任务控制器就是对流程上下文中的变量进行读写操作
<task-node name="task-node1"> <task name="test notify task" notify="true"> <controller> <varible access="" name="" mapped-name=""></variable> </controller> </task> <transition to="end-state1"></transition> </task-node>
access :指出读写属性: read.write,required
(read表示任务实例化完毕后 从上下文中去读name
write 表示任务完成后 写入name的新值回到流程上下文中
required 和write 配对 如没有回写 者抛出异常)
name:指的是变量名称 相当于key 从map 为key的中间读取,写入值value
mapped-name 非必填属性(当定义了这个值后 进行写入的key 不是name 而是mapeed-name这个)