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

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

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process name="test" key="mytest" xmlns="http://jbpm.org/4.4/jpdl">  
  4.    <start name="start1" g="275,16,48,48">  
  5.       <transition name="而提交到科长审批" to="111科长审批" g="-110,-15"/>  
  6.    </start>  
  7.    <task assignee="张三" name="111科长审批" g="255,101,92,52">  
  8.       <transition name="提交到主任" to="主任审批" g="-69,-20"/>  
  9.    </task>  
  10.    <task assignee="李四" name="主任审批" g="259,186,92,52">  
  11.       <transition name="通过" to="end1" g="-50,-20"/>  
  12.    </task>  
  13.    <end name="end1" g="283,283,48,48"/>  
  14.       
  15. </process>  


 

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

首先建立User类:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. public class User implements Serializable{  
  2.   
  3.     /** 
  4.      * 用户类 
  5.      */  
  6.     private static final long serialVersionUID = 1L;  
  7.   
  8.     private String kezhang;  
  9.       
  10.     private String zhuren;  
  11.   
  12.     public String getKezhang() {  
  13.         return kezhang;  
  14.     }  
  15.   
  16.     public void setKezhang(String kezhang) {  
  17.         this.kezhang = kezhang;  
  18.     }  
  19.   
  20.     public String getZhuren() {  
  21.         return zhuren;  
  22.     }  
  23.   
  24.     public void setZhuren(String zhuren) {  
  25.         this.zhuren = zhuren;  
  26.     }  
  27.       
  28.       
  29. }  


 

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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. public class TestJUEL extends JbpmTestCase implements JbpmUtil {  
  2.   
  3.     @Override  
  4.     public void deploy() {  
  5.         super.startUp();  
  6.         repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();  
  7.           
  8.   
  9.     }  
  10.   
  11.     @Override  
  12.     public void createInstance() {  
  13.         super.startUp();  
  14.         Map<String,Object> map = new HashMap<String,Object>();  
  15.         User user = new User();  
  16.         user.setKezhang("userA");  
  17.         user.setZhuren("userB");  
  18.         map.put("user", user);  
  19.         ProcessInstance processInstance = executionService.startProcessInstanceByKey("test",map);  
  20.         print("流程实例ID",processInstance.getId());  
  21.   
  22.     }  
  23.   
  24. }  

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值