JBPM 任务

任务:流程中的任务是流程与操作者的交互的一种手段 是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(&quot;触发了task-create事件&quot;);
			</script>
		</event>
		<event type="task-start">
			<script>
				print(&quot;触发了task-start事件&quot;);
			</script>
		</event>
		<event type="task-assign">
			<script>
				print(&quot;触发了task-assign事件&quot;);
			</script>
		</event>
		<event type="task-end">
			<script>
				print(&quot;触发了task-end事件&quot;);
			</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这个)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值