一、start节点
start表示了一个流程在哪里开始执行。在一个流程至少得有一个start节点。一个start节点中必须有一个外流迁移(transition)并且这个转移
在流程开始时就会执行。
到目前为止,一个流程有且只有一个start节点。
元素 | 数量 | 描述 |
---|---|---|
transition | 1 | 外流转移 |
二、state节点
state表示了一个等待状态。流程的执行将会等到有通过API提供的外力触发。state节点除了常用的节点内容(name, transition)外没有其他的属性
或元素。
2.1、state序列
如以下实例,展现了一个通过transition链接的state序列
此序列的代码如下:
<process name="StateSequence" xmlns="http://jbpm.org/4.4/jpdl">
<start>
<transition to="a" />
</start>
<state name="a">
<transition to="b" />
</state>
<state name="b">
<transition to="c" />
</state>
<state name="c" />
</process>
你可以通过以下方式启动执行:
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("StateSequence");
当你执行启动此流程后,此流程将会停留在a节点上,可以通过方法signalExecution提供一个外力使其继续执行。如下代码所示:
Execution executionInA = processInstance.findActiveExecutionIn("a");
assertNotNull(executionInA);
processInstance = executionService.signalExecutionById(executionInA.getId());
Execution executionInB = processInstance.findActiveExecutionIn("b");
assertNotNull(executionInB);
processInstance = executionService.signalExecutionById(executionInB.getId());
Execution executionInC = processInstance.findActiveExecutionIn("c");
assertNotNull(executionInC);
2.2、选择方式state
下面这个例子将向你展现state如何被用为提供一个选择外力来决定流程的走向。
对应的代码如下所示:
<process name="StateChoice" xmlns="http://jbpm.org/4.4/jpdl">
<start>
<transition to="wait for response" />
</start>
<state name="wait for response">
<transition name="accept" to="submit document" />
<transition name="reject" to="try again" />
</state>
<state name="submit document" />
<state name="try again" />
</process>
我们可以通过以下的方法启动这个流程
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("StateChoice");
现在,我们假设流程已经执行到了wait for response节点。此流程将会在这里等待直到一个外力触发此流程。由于此state节点有两个流出转移,在外力触发中给的标志名称将会匹配外流转移中的名称来确定流程的流向。所以当我们提供accept时,如下:
String executionId = processInstance
.findActiveExecutionIn("wait for response")
.getId();
processInstance = executionService.signalExecutionById(executionId, "accept");
assertTrue(processInstance.isActive("submit document"));
流程将通过名称为accept的外流转移继续执行。同样当我们提供一个名称为reject的触发时,流程会通过名称为reject的外流转移继续执行。