task-node (任务节点)
其性质和node节点一样,在没有task的时候,也都是自动执行,不等待。task-node被归类为一个等待节点,是指在task-node中的task列表中的task没有全部执行完之前,它会一直等待。Task可以在task-node节点下定义,也可以挂在process-definition节点下。最普遍的方式是在task-node节点下定义一个或多个任务。默认情况下,流程在task-node节点会处于等待状态,直到所有的任务被执行完毕。Task的执行是按顺序执行的,任务都完成后,token仍然不会指向后面的节点;需要自己手动调用processInstance.signal()才会驱动流程到下面的节点。
名称 | 类型 | 数量 | 描述 |
signal | 属性 | 可选的 | {unsynchronized|never|first|first-wait|last|last-wait},默认是last。signal指定了任务的完成对流程执行继续的影响。 |
create-tasks | 属性 | 可选的 | {yes|no|true|false},默认是true。当需要在运行时通过计算来决定哪个任务将被创建时,可以设置为false,如果这样的话,在node-enter事件上加一个动作,在动作中创建任务,并且把create-tasks设置为false。 |
end-tasks | 属性 | 可选的 | {yes|no|true|false},默认是false。如果设置end-tasks为true,在离开节点时,所有打开的任务将被结束。 |
task | 元素 | [0..*] | 当执行到达本节点时所应被创建的任务。 |
| | | 请参考。 |
为了帮助读者理解task-node节点的signal属性,这里举例如下:
对于这样的流程定义:
<task-node name='a'>
<task name='laundry' />
<task name='dishes' />
<task name='change nappy' />
<transition to='b' />
</task-node>
a) 这里没有定义signal属性的值,这就表明当节点中的三个任务都完成后,流程才进入后面的节点
b) 当<task-node name='a' signal='unsynchronized'>表明token不会在本节点停留,而是直接到后面的节点
c) 当<task-node name='a' signal='never'>表明三个任务都完成后,token仍然不会指向后面的节点;需要自己手动调用processInstance.signal()才会驱动流程到下面的节点
d) 当<task-node name='a' signal='first'>表明只要有一个任务完成后,token就指向后面的节点
e) 当<task-node name='a' signal='first-wait'>表明当第一个任务实例完成时继续执行;当在a节点入口处没有任务创建时,token在a任务节点处等待,直到任务被创建或完成。
f) 当<task-node name='a' signal='last'>时,这是默认值,和不设置signal属性的情况相同。
g) 当<task-node name='a' signal='last-wait'>时,当最后一个任务实例完成时候继续执行下去。当a这个任务节点没有任务被建立时,任务节点等待直到任务被建立