swimlane一般是为了task准备的,任务总是要分配到某个人头上的。如果在流程定义文件中任务没有指定对应的泳道如:<task name="bank"/>,那么就需要在程序代码中分配相关的处理人taskInstance.setActorId("jeffen")。如果程序都是这样来搞那其实是很麻烦的,而且分配代码分散到各个地方,很容易出错。于是引进了泳道,我们可以在流程定义文件中统一指定swimlane和处理人的关系、task和swimlane的关系,只需要维护这一个文件就好了,(有点像struts的配置文件)如下:
<
swimlane name
=
"
banker
"
>
< assignment expression = " user(jeffen) " />
</ swimlane >
......
< task name = " bank " swimlane = " banker " >
< assignment expression = " user(jeffen) " />
</ swimlane >
......
< task name = " bank " swimlane = " banker " >
这样就将任务实例和处理人松耦合了,对于多任务对应相同的处理人,这种方式的好处显而易见。
当然还可以在程序中动态指定处理人,如上taskInstance.setActorId("jeffen"),也可以通过泳道实例swimlaneInstance.setActorId("jeffen")指定。