JBPM 中如何实现任务回退,并且分配给指定的人

SingleSea 2007-02-25
举个例子说:有个task是"申请",它的Actor是多个人.张三提出"申请"后提交给另一个task "审批",审批不通过要退回给张三,而其他人(李四)不会分配到该任务.
我是这样定义的:
<process-definition xmlns="" name="Simple">
       <swimlane name="sa_employee">
         <assignment pooled-actors="张三,李四"/>
       </swimlane>
       <swimlane name="sa_lead">
         <assignment pooled-actors="王五"/>
       </swimlane>
       <!-- 申请 --> 
       <start-state name="申请">
          <task name="申请" swimlane="sa_employee"> 
            <controller> 
                <variable name="name" /> 
                <variable name="day" /> 
                <variable name="note" />
                <variable name="comment" access="read" />
                <variable name="modifyflag" />
            </controller> 
          </task>
          <transition name="提交" to="审批"></transition>
       </start-state> 
    <!-- 审批 --> 
    <task-node name="审批">
    	<task name="审批" swimlane="sa_lead">
            <controller> 
                <variable name="name" access="read" /> 
                <variable name="day" access="read" /> 
                <variable name="note" access="read" />
                <variable name="comment" />
                <variable name="modifyflag" />
            </controller> 
         </task>
      <transition name="修改" to="申请"></transition>
      <transition name="通过" to="结束"></transition> 
    </task-node> 
    <!-- 结束 --> 
    <end-state name="结束" />
</process-definition>


请指点,谢谢
tomkoo 2007-03-02
这个问题其实也是我以前提到过的问题,在我的项目中也有这样的需求。我是通过程序来实现的。
1、给整个processInstance指定一个流程变量preActor,用来记录上一个节点由谁完成的;

2、当task被打回的时候根据这个preAction在设定任务的Actor就可以了。
wangyong58566 2007-04-16
呵呵。不错的做法。
huangxx 2007-04-25
根据NAME来判别吗?
firewindaa 2007-05-27
直接调用TaskInstance.getPreviousActId()方法,获得上一个任务的执行者,任务回退后,后在任务设定这个Actor就OK了
lyo 2007-07-19
如果上一个 Actor不是一个人呢?例如有几个人审批的,我这个 preActor是哪一个? 就是说我获得上一个任务的执行者如果有很多个,我需要调用多次setActor方法吗?
whk1007 2007-07-20
可以解决的. 你在ASSIGN时候,用assignable.setPooledActors(),这样,每个人都能看到这个TASKINSTANCE, 然后比如张三进去处理,在SAVETASK时,设置taskInstance.setActor("张三");下次打回时,你用张三的ACTOR去findTaskInstances(actor)时,就可以看到.
gabriel80 2008-04-24
恩。想法不错。。我试下啊
linuja 2008-04-28
还有种更灵活的方式,详见这里:http://jbpm.group.javaeye.com/group/topic/4497