已知的限制:直到现在, 一个流程处理只能有一个启动节点(start)。 表 6.3. start启动的属性 默认是否属性 类型 值 必须 name名文 称 本 表 6.4. start启动的元素
元素 个数 描述 可选 描述 活动的名字,在启动活动没有内部的转移(transition)时, name名称是可选的。 transition转移 1 向外的转移 6.2.2. State状态节点
一个等待状态节点。 流程处理的流向会在外部触发器调用提供的API之前一直等待。 状态节点和其他的活动不一样, 它没有其他任何属性或元素。
6.2.2.1. 序列状态节点
让我们看一个用序列连接状态 和转移的例子。
图 6.1. 序列状态节点
ProcessInstance processInstance = executionService.startProcessInstanceByKey(\创建的流程处理实例会停留在状态节点a的位置, 使用signalExecution方法就会触发 一个外部触发器。
Execution executionInA = processInstance.findActiveExecutionIn(\assertNotNull(executionInA); processInstance = executionService.signalExecutionById(executionInA.getId()); Execution executionInB = processInstance.findActiveExecutionIn(\assertNotNull(executionInB); processInstance = executionService.signalExecutionById(executionInB.getId()); Execution executionInC = processInstance.findActiveExecutionIn(\assertNotNull(executionInC); 6.2.2.2. 可选择的状态节点
在第2个状态节点的例子里, 我们将演示如何使用状态节点实现 路径的选择。
图 6.2. 状态节点中的选择
String executionId = processInstance .findActiveExecutionIn(\ .getId(); processInstance = executionService.signalExecutionById(executionId, \ assertTrue(processInstance.isActive(\流向会沿着名字是accept的向外的转移继续进行。 同样,当使用reject作为参数触发signalExecutionXxx方法时。流 向会沿着名字是reject的向外的转移 继续进行。
6.2.3. decision决定节点
在多个选择中选择一条路径。也可以当做是一个决定。 一个决定活动拥有很多个向外的转移。当一个流向到达一个决定活动时, 会自动执行并决定交给哪个向外的转移。
一个决定节点应该配置成下面三个方式之一。
6.2.3.1. decision决定条件
decision中会运行并判断每一个transition里的判断条件。 当遇到一个嵌套条件是true或者没有设置判断条件的转移, 那么转移就会被运行。 表 6.5. exclusive.transition.condition 属性 属性 类型 默认值 是否必须? 描述 将被运required行的 必须 指定脚本 指定expr中执行的 脚本语言的种类 expr expression lang expression 从脚本引擎配置里得到的默认代表性可选 language 语言(default-expression-language) 例子:
图 6.3. 流程处理的决定条件例子
Map
assertTrue(processInstance.isActive(\参考实例中的单元测试,了解更多的场景。
6.2.3.2. decision expression唯一性表达式