Activiti bpmn - 缺少与 false 的变量比较

Activiti bpmn - missing variable comparision to false

在我的 BPMN 文件中,我有一个 gateway 定义如下:

<exclusiveGateway id="gateway" name="An gateway"/>

<sequenceFlow id="sequence1" sourceRef="gateway"
        targetRef="task1">
    <conditionExpression xsi:type="tFormalExpression">${variableABC == true}
    </conditionExpression>
</sequenceFlow>

<sequenceFlow id="sequence2" sourceRef="gateway"
        targetRef="task2">
        <conditionExpression xsi:type="tFormalExpression">${variableABC == false}
    </conditionExpression>
</sequenceFlow>

我想知道当缺少变量variableABC(未在工作流引擎中设置)时会发生什么?

根据我的测试,流程似乎会转到第二个分支。谁能解释一下为什么?

在Java中null == false会抛出异常(?)。 Activiti引擎在这种情况下是如何工作的?谢谢

我尝试部署与上述类似的工作流程,但无法部署。它给我一个错误

org.activiti.engine.ActivitiException:表达式中使用的未知 属性:${variableABC == true}

然后我把它改成了

[CDATA[${execution.getVariable('variableABC') == true}]]

[CDATA[${execution.getVariable('variableABC') == false}]]

[CDATA[${execution.getVariable('variableABC') == null}]]

在此之后我能够部署它并且运行我的测试成功。

观察:

  1. 当我有3个顺序流时,它从未进入"false"顺序流
  2. 当我删除最后一个序列流时,即用 null 检查时,我得到了错误 org.activiti.engine.ActivitiException: 无法选择独占网关'exclusivegateway1'的出序流继续处理

所以我觉得activiti是没有问题的。您只需正确验证您的工作流程。

:)

当然会去第二条路径,如果没有提供值。 默认情况下 boolean 的值始终是 false。这是一个常见的 java 逻辑。对于 String,如果没有提供默认路径那么表达式的 null 值,Activiti 将抛出异常说 - 在 Gateway.[=13= 之后找不到 path/default ]