变量是工作流实例的一部分,表示实例的数据。变量有一个名称和一个JSON值。变量的可见性由变量范围定义。
Variable Values
变量的值存储为JSON值。它必须具有以下类型之一:
- String
- Number
- Boolean
- Array
- Document/Object
- Null
Access Variables
可以在工作流实例中访问变量,例如,在输入/输出映射或条件中。在表达式中,变量通过其名称进行访问。如果变量是文档,那么可以通过点表示法访问嵌套属性。
实例:
Variable Scopes
变量范围定义变量的可见性。根作用域是工作流实例本身。此范围中的变量在工作流的任何位置都可见。
当工作流实例进入子流程或活动时,将创建一个新范围。此范围中的活动可以查看此范围和更高范围(即父范围)的所有变量。但是这个范围之外的活动看不到这个范围中定义的变量。
如果一个变量与来自更高范围的变量同名,那么它将覆盖这个变量。此范围中的活动只看到此变量的值,而不是更高范围中的值。
变量的作用域是在创建变量时定义的。默认情况下,变量是在根作用域中创建的。
例子:
此工作流实例具有以下变量:
- A和B在根作用域上定义,可以由任务A、任务B和任务C看到。
- C在子流程范围中定义,可以由任务A和任务B看到。
- B在任务A的活动范围中重新定义,只能由任务A看到。它覆盖了根范围中的变量B。
Variable Propagation
当变量合并到工作流实例(例如,作业完成时、消息关联时)中时,每个变量都将从活动范围传播到其更高的范围。
当作用域包含同名变量时,传播结束。在这种情况下,将更新变量值。
如果没有作用域包含此变量,那么它将在根作用域中创建为新变量。
例子:
任务B的任务由变量B、C和D完成。变量B和C已经在更高的范围内定义,并用新值更新。变量d以前不存在,在根作用域中创建。
Local Variables
在某些情况下,变量应该设置在给定的范围内,即使它们以前不存在于这个范围内。
为了停用变量传播,变量被设置为局部变量。这意味着变量是在给定的作用域中创建或更新的,不管它们以前是否存在于这个作用域中。
Input/Output Variable Mappings
输入/输出变量映射可用于创建新变量或自定义变量如何合并到工作流实例中。
变量映射在工作流中定义为IOMapping下的扩展元素。每个变量映射都有一个源表达式和一个目标表达式。源表达式定义值的复制位置。目标表达式定义值的复制位置。表达式通过变量的名称或嵌套属性引用变量。
如果目标表达式的变量或嵌套属性不存在,则创建该变量或嵌套属性。但如果源表达式的变量或嵌套属性不存在,则会创建事件。
例子
XML表示:
<serviceTask id="collectMoney" name="Collect Money">
<extensionElements>
<zeebe:ioMapping>
<zeebe:input source="customer.name" target="sender"/>
<zeebe:input source="customer.iban" target="iban"/>
<zeebe:input source="totalPrice" target="price"/>
<zeebe:input source="reference" target="orderId"/>
<zeebe:output source="status" target="paymentStatus"/>
</zeebe:ioMapping>
</extensionElements>
</serviceTask>
Input Mappings
输入映射可用于创建新变量。它们可以在服务任务和子流程上定义。
当应用输入映射时,它会在定义映射的作用域中创建一个新变量。
实例:
Output Mappings
输出映射可用于自定义如何将作业/消息变量合并到工作流实例中。它们可以在服务任务、接收任务、消息捕获事件和子进程上定义。
如果定义了一个或多个输出映射,则作业/消息变量将在定义映射的范围内设置为局部变量。然后,将输出映射应用于变量,并在此范围中创建新的变量。新变量合并到父范围中。如果没有作业/消息变量的映射,则不会合并该变量。
如果未定义输出映射,则所有作业/消息变量都将合并到工作流实例中。
在子流程的情况下,行为是不同的。没有要合并的作业/消息变量。但是输出映射可以用来将子进程的局部变量传播到更高的范围。默认情况下,保留作用域时将删除所有局部变量。
实例:
zeebe qq交流群群号:856546010