JBPM中采用el表达式动态分配任务

    工作流中非常重要的一个就是任务的分配,这里我们采用assignee的分配方式,对于其他的几种方式我们在后面的博客中详细介绍。任务的分配分为动态和静态两种,我们之前对jbpm的讲解都采用的是静态的分配方式,也就是对于任务分配给了谁,我们都会写死在jpdl文件中,例如科长审批分配给了张三我们会这样写:

<task assignee="张三"name="111科长审批" g="255,101,92,52"> 

     <transition name="提交到主任" to="主任审批" g="-69,-20"/> 

</task>

    采用这种方式分配任务,使程序不灵活,如果我们想要更改任务分配人,还需要手动更改流程定义文件,这会带来极大的不方便。

    现在我们采用动态分配的方式,使任务的分配人根据程序的确定而进行选择,结合el表达式我们来对动态分配做一个简单的实践。

建立一个User实体对象:

package com.tgb.video.entity;

import java.io.Serializable;

public class User implements Serializable{
	private String kezhang;
	public String getKezhang() {
		return kezhang;
	}
	public void setKezhang(String kezhang) {
		this.kezhang = kezhang;
	}
	public String getZhuren() {
		return zhuren;
	}
	public void setZhuren(String zhuren) {
		this.zhuren = zhuren;
	}
	private String zhuren;
	
}

   因为实体对象要放到数据库中进行持久化,所以一定要实现一个序列化接口。

   然后我们部署流程和创建流程实例,在创建流程实例的时候动态赋值即可:

	public void createInstance() {
		super.startUp();
		Map<String,Object> map=new HashMap<String,Object>();
		User user=new User();
		user.setKezhang("张三");
		user.setZhuren("李四");
		map.put("user", user);
		
		ProcessInstance  processInstance=executionService .startProcessInstanceByKey("test",map);
		print("流程实例ID",processInstance.getId());	
	}
    这样,我们设置了kezhang为张三,zhuren为李四。此时任务已经分配下去了,我们只要在流程定义文件中采用el表达式取得即可:

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

<process name="test" key="test" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="310,49,48,48">
      <transition name="提交到科长" to="科长审批" g="-52,-22"/>
   </start>
   <task assignee="${user.kezhang}" name="科长审批" g="285,151,92,52">
      <transition name="提交到主任" to="主任审批" g="-52,-22"/>
   </task>
   <task assignee="${user.zhuren}" name="主任审批" g="281,256,92,52">
      <transition name="通过" to="end1" g="-50,-22"/>
   </task>
   <end name="end1" g="302,359,48,48"/>
	
</process>

    ${user.kezhang}的值就是张三,${user.zhuren}的值就是李四。采用这种方式动态分配,使得我们程序更加灵活,更加容易扩展。就和我们采用配置文件读取数据一样,我们把这些容易改变的数据和重要的文件隔离开,如果一方面需要修改不会影响到另一个方面。这种思想是我们程序开发非常重要的。





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值