jbpm学习七

6.task任务节点----个人任务

task任务节点一般是用来处理涉及人机交互的,其中有一个assign属性可以将任务分配给指定用户。

下面通过一个demo来说明一下:


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

<process name="demo6_personaltask" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="241,6,48,48">
      <transition name="to 员工请假" to="员工请假" g="-71,-17"/>
   </start>
   <end name="end1" g="247,317,48,126"/>
   <!-- 只有张三可以请假 -->
   <task name="员工请假" g="225,76,92,52" assignee="张三">
      <transition name="to 部门经理审批" to="部门经理审批" g="-95,-17"/>
   </task>
   <!-- 实际中请假,审批人一定是申请人所在部门主管 -->
   <task name="部门经理审批" g="226,160,92,52" assignee="#{manager}">
      <transition name="to 总经理审批" to="总经理审批" g="-83,-17"/>
   </task>
   <task name="总经理审批" g="232,236,92,52">
      <assignment-handler class="learn.PersonalAssignmentHandler"/>
      <transition name="to end1" to="end1" g="-47,-17"/>
   </task>
</process>
以上是一个流程定义图和它所对应的xml配置文件。这个配置文件很好的展现了为个人分配任务的3种方式,分别是:

1.指定人  2.指定变量,为变量赋值    3.Handler方式

下面为了讲解这个流程,附上代码更好理解:

<span style="white-space:pre">	</span>//发布流程
	@Test
	public void demo1(){
		
		RepositoryService repositoryService = new Configuration().buildProcessEngine().getRepositoryService();
		NewDeployment createDeployment = repositoryService.createDeployment();
		createDeployment.addResourceFromClasspath("demo6_personaltask.jpdl.xml");
		createDeployment.addResourceFromClasspath("demo6_personaltask.png");
		createDeployment.deploy();
	}
	
	//启动流程
	@Test
	public void demo2(){
		ExecutionService executionService = new Configuration().buildProcessEngine().getExecutionService();
		executionService.startProcessInstanceById("demo6_personaltask-1");
	}
以上是发布和启动流程实例。此时jbpm4_task表中数据如下:


看以清楚地看到,ASSIGN字段记录当前节点是某人的个人任务(说白了就是谁可以操作,在谁的待办工作中显示),‘张三’和我们在task节点的name为‘员工请假’中assign配置的‘张三’

相对应。接着走:

//办理'部门经理审批'节点
	@Test
	public void demo3(){
		
		TaskService taskService = new Configuration().buildProcessEngine().getTaskService();
		HashMap<String, Object> variables = new HashMap<String, Object>();
		variables.put("manager", "李经理");
		taskService.setVariables("10002", variables);
		taskService.completeTask("10002");
	}
办理‘部门经理审批’节点,将manager作为变量传给taskService,taskService为xml配置文件assign="#{manager}"赋值,此时jbpm4_task表中数据如下:


可以看到,此时‘部门经理审批’节点的办理人是‘李经理’。接着走:

<span style="white-space:pre">	</span>//办理'总经理审批'节点
	@Test
	public void demo4(){
		
		TaskService taskService = new Configuration().buildProcessEngine().getTaskService();
		taskService.completeTask("20002");
	}
package learn;


import org.jbpm.api.model.OpenExecution;
import org.jbpm.api.task.Assignable;
import org.jbpm.api.task.AssignmentHandler;

/**
 * 需要一个handler 指定任务负责人
 * @author seawind
 */
public class PersonalAssignmentHandler implements AssignmentHandler {

	@Override
	public void assign(Assignable assignable, OpenExecution openExecution) throws Exception {
		// assignable 设置任务负责人
		// openExecution 获取流程变量
		assignable.setAssignee("老王");// 设置负责人
	}
}
这就是Handler方式给为办理人赋值,当执行次节点时,会读取xml配置文件的<assignment-handler class="learn.PersonalAssignmentHandler"/>,去PersonalAssignmentHandler

的assign方法获得,代码注释写的很清楚了。此时jbpm4_task表中数据如下:


此时该总经理‘老王’办理了,但是老王太忙,没时间办,于是可以委托给他的秘书小丽来办理:

<span style="white-space:pre">	</span>@Test
	// 更换任务负责人
	public void demo6() {
		// 1、 获得流程引擎
		ProcessEngine processEngine = new Configuration().buildProcessEngine();
		// 2、获得Service
		TaskService taskService = processEngine.getTaskService();
		// 3、更换负责人
		taskService.assignTask("30001", "小丽"); //30001是jbpm4_task的DBID
	}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值