jbpm swimlance

http://www.iteye.com/topic/409861

 

http://www.iteye.com/topic/34142

 

http://www.cn-java.com/www1/?uid-550631-action-viewspace-itemid-4212

 

swimlane一般是为了task准备的,任务总是要分配到某个人头上的。如果在流程定义文件中任务没有指定对应的泳道如:,那么就需要在程序代码中分配相关的处理人taskInstance.setActorId("jeffen")。如果程序都是这样来搞那其实是很麻烦的,而且分配代码分散到各个地方,很容易出错。于是引进了泳道,我们可以在流程定义文件中统一指定swimlane和处理人的关系、task和swimlane的关系,只需要维护这一个文件就好了,(有点像struts的配置文件)如下:

< swimlane name = " banker " >
        
< assignment expression = " user(jeffen) " />
</ swimlane >
......

< task name = " bank "   swimlane = " banker " >

这样就将任务实例和处理人松耦合了,对于多任务对应相同的处理人,这种方式的好处显而易见。

当然还可以在程序中动态指定处理人,如上taskInstance.setActorId("jeffen"),也可以通过泳道实例swimlaneInstance.setActorId("jeffen")指定。

 

<task-node name="first">
      <task name="task1" swimlane="admin"></task>
      <task name="task2" swimlane="admin"></task>  因为swimlane是相同的,所以会依次调用task1,task2
      <transition name="" to="end"></transition>
   </task-node>
   <swimlane name="admin">
    <assignment class="com.sample.action.Admin"></assignment>
   </swimlane>

 

public class Admin implements AssignmentHandler {

private static final long serialVersionUID = 1L;

@Override
public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("SuperAdminUser");   //task1,task2共用这个actorId,只在node-enter时执行一次
}

}

你可能感兴趣的:(struts,jbpm)