jbpm4指派任务

这两天在写一个指派任务的功能,本来在jpdl.xml中以配置好每一步审批的用户、角色等信息,但是客户希望能够在表单页面上指定下一步的处理人,所以这两天想办法把这问题解决了,大致步骤如下。

      首页新建类实现AssignmentHandler接口,代码如下:
  1. public class UserAssignHandler implements AssignmentHandler{  
  2.     private static final long serialVersionUID = 1L;  
  3.       
  4.     String users;           //授权用户  
  5.     String groups;          //授权分组  
  6.       
  7.     @Override  
  8.     public void assign(Assignable assignable, OpenExecution execution) throws Exception {  
  9.         /** 
  10.          * 首先从流程参数中获取指派人,如果有指派人,则任务只分给指派人,jpdl.xml配置的参数无效 
  11.          * 如果没有指派人,则按jpdl.xml中的配置分配,users和groups可以同时生效 
  12.          */  
  13.           
  14.         //从参数中获取指派人,执行完移除该变量,则不会影响之后的步骤  
  15.         String assignUsers = (String)execution.getVariable("assignUsers");  
  16.         if(assignUsers!=null&&assignUsers.length()>0){  
  17.             String[] uids = assignUsers.split(",");  
  18.             if(uids!=null&&uids.length>0){  
  19.                 for(String uid:uids){  
  20.                     assignable.addCandidateUser(uid);  
  21.                 }  
  22.             }else{  
  23.                 assignable.setAssignee(assignUsers);  
  24.             }  
  25.             //移除指派人参数  
  26.             execution.removeVariable("assignUsers");  
  27.             return;  
  28.         }  
  29.         if(users!=null&&users.length()>0){  
  30.             String[] us = users.split(",");  
  31.             if(us!=null&&us.length>0){  
  32.                 for(String u:us){  
  33.                     assignable.addCandidateUser(u);  
  34.                 }  
  35.             }else{  
  36.                 assignable.setAssignee(users);  
  37.             }  
  38.         }  
  39.         if(groups!=null&&groups.length()>0){  
  40.             String[] gs = groups.split(",");  
  41.             if(gs!=null&&gs.length>0){  
  42.                 for(String g:gs){  
  43.                     assignable.addCandidateGroup(g);  
  44.                 }  
  45.             }else{  
  46.                 assignable.addCandidateGroup(groups);  
  47.             }  
  48.         }  
  49.     }  
  50. }  
      然后修改jpdl.xml,在有可能被指派的任务上配置assignment-handler,如下:
  1. <task form="/project/hzzfw/problem/form/techAccept.jsp" g="190,100,92,52" name="技术科受理">  
  2.     <assignment-handler class="com.shine.sourcedesk.jbpm.identity.UserAssignHandler">  
  3.         <field name="groups">  
  4.             <string value="TECH_EMPLOYEE"/>  
  5.         </field>  
  6.     </assignment-handler>  
  7.     <transition g="236,204:-66,-24" name="提交给主任" to="主任审批"/>  
  8.     <transition g="128,126;128,286;129,372:-60,-46" name="直接处理" to="技术科处理"/>  
  9. </task>  

      然后在这一步执行时把所指派的用户传参给当前的流程,参数名与代码中的对应(assignUsers),值就是所选用户的用户名(或者ID),多个用英文逗号隔开,代码大致如下(大概意思下,具体参数应该从表单页面中传过来):
  1. Map<String, Object> vars = new HashMap<String, Object>();  
  2. vars.put("assignUsers""jkp,admin");  
  3. taskService.completeTask("taskID","技术科受理",vars);  
      到这里差不多了,另外注意下这句:execution.removeVariable("assignUsers");,将参数删掉,避免又被之后的任务用到(下一步不一定会选择指派人)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值