JBPM具体应用之EL表达式动态分配assignee

分配assignee的方式大致分为静态和动态两种,所谓的静态分配指的是写死在jpdl文件中,而动态分配主要是用EL表达式进行分配。首先我们来看静态分配:

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

<process name="test" key="mytest" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="275,16,48,48">
      <transition name="而提交到科长审批" to="111科长审批" g="-110,-15"/>
   </start>
   <task assignee="张三" name="111科长审批" g="255,101,92,52">
      <transition name="提交到主任" to="主任审批" g="-69,-20"/>
   </task>
   <task assignee="李四" name="主任审批" g="259,186,92,52">
      <transition name="通过" to="end1" g="-50,-20"/>
   </task>
   <end name="end1" g="283,283,48,48"/>
	
</process>


 

指的是我们将task标签中的assignee属性直接赋值为“张三”,这样的话非常的不灵活,我们如果想要达到能够动态的改变任务执行人的效果,则需要在后台代码中进行过动态设置,这时就需要用EL表达式。其方法也很简单,首先将task标签中的assignee属性写为“assignee="${user.kezhang}"”形式,然后在后台代码中进行设置,如下:

首先建立User类:

public class User implements Serializable{

	/**
	 * 用户类
	 */
	private static final long serialVersionUID = 1L;

	private String kezhang;
	
	private String zhuren;

	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;
	}
	
	
}


 

需要注意的是,因为需要将类的属性值持久化到数据库,所以该类一定要实现序列化接口,否则会报错。然后在创建流程实例的时候进行动态赋值:

public class TestJUEL extends JbpmTestCase implements JbpmUtil {

	@Override
	public void deploy() {
		super.startUp();
		repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();
		

	}

	@Override
	public void createInstance() {
		super.startUp();
		Map<String,Object> map = new HashMap<String,Object>();
		User user = new User();
		user.setKezhang("userA");
		user.setZhuren("userB");
		map.put("user", user);
		ProcessInstance processInstance = executionService.startProcessInstanceByKey("test",map);
		print("流程实例ID",processInstance.getId());

	}

}

在使用EL表达式动态分配assignee的时候需要注意的有两点:

1.与jsp中使用EL表达式一样,类的属性一定要有get,set方法。

2.el表达式中的变量名称为user,user的属性名为kezhang和zhuren,那么在后台User类中的属性也要为kezhang和zhuren,另外在创建流程实例的时候所用到的变量名称也一定要为user,否则会报错。

 

 

你可能感兴趣的:(JBPM具体应用之EL表达式动态分配assignee)