有关会签的讨论

这里仅讨论通过action动态创建task来实现的方式。

决定会签的方式主要是通过task-node的signal属性来决定的。

  1. 会签中,一个人reject,则结束会签,退回起草人;全部通过,则流到下一个node。
  2. 会签中,等待所有的人完成会签任务,然后根据会签人的意见(即所选的transition),来决定流程流向哪个node。

第一种情况,signal="last-wait",只要一个人拒绝,则系统需要将其他没有完成的任务完成掉,在完成时需要以拒绝的那个transition来做end,具体可以参考 http://tomkoo.iteye.com/blog/24690  ,里面有很清楚的代码及解释。

第二种情况, signal="never",这种情况正是我现在需要解决的。以前一直没有空来测试。今天看了一下signal的说面,突然来了灵感,以前也问过别人,好像也这么说的。因为使用never后,流程不会往下执行,需要通过processInstance.signal("xx")来确定流程流程哪个节点。

请看下面我的实现。

第一步一样,进入节点(node-enter)需要动态创建会签任务实例。

xml 代码
  1. <event type="node-enter">  
  2.   <action name="createInstance" class="com.ivo.bpm.action.DynamicCreateTaskAction">  
  3.   </action>  
  4. </event>  
java 代码
  1. public class DynamicCreateTaskAction extends BaseAction {      
  2.      
  3.     private static final long serialVersionUID = 1L;      
  4.      
  5.     public void execute(ExecutionContext executionContext) throws Exception {      
  6.         Token token = executionContext.getToken();      
  7.         TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();      
  8.         TaskNode taskNode = (TaskNode) executionContext.getNode();      
  9.         Task task = (Task)taskNode.getTasks().iterator().next();      
  10.   
  11.         tmi.createTaskInstance(task, token).setActorId( "T0512001" );   
  12.         tmi.createTaskInstance(task, token).setActorId( "T0512002" );   
  13.     }      
  14. }  

为了方便,随便指定了两个参与者。在实际情况中,这些参与者应该是在客户端指定的。然后通过流程变量的方式传入jbpm中。

第二步是关键,在结束任务(task-end)事件中,判断用户到底选择了哪个transition,然后再判断任务有无全部结束,如果已经全部结束,则通过processInstance.signal(transition)驱动流程流程指定的node。经过测试,在task-end事件中,无法再调用signal方法,两个方法冲突,本身task-end就在signal方法中。只能在task-end完成之后,通过另外的session来驱动流程的流向。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值