在 Activiti 中,如何检查是否设置了变量?

In Activiti, how do I check if a variable is set?

例如,我有一个可以立即启动或延迟启动的工作流(startTime 变量)。

startEvent 之后,我有一个 exclusiveGateway,我在其中检查流程是否应该继续或等到 startTime

<exclusiveGateway id="startGateway" default="startSequenceFlow3"/>
<sequenceFlow id="startSequenceFlow1" sourceRef="startGateway" targetRef="startTimer">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${startTime != null}]]></conditionExpression>
</sequenceFlow>

启动工作流传递变量 startTime 工作正常,但不传递 startTime 会引发异常:

Cannot resolve identifier 'startTime'

检查 startTime 是否设置的最佳方法是什么,因为 startTime != null 不起作用?我宁愿根本不传递 startTime(不是 startTime=null)。

我使用的代码包括变量:

variables.put("startTime", startTime);
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables);

或没有:

ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables);

在这两种情况下都必须设置 startTime 变量;

variables.put("startTime", startTime);
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables);

variables.put("startTime", null);
ProcessInstance instance = runtimeService.startProcessInstanceByKey(processKey, variables);

然后检查网关中的变量

<exclusiveGateway id="startGateway" default="waitSequenceFlow"/>
<sequenceFlow id="startSequenceFlow" sourceRef="startGateway" targetRef="firstTask">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${empty startTime}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="waitSequenceFlow" sourceRef="startGateway" targetRef="startTimer"/>

您可以使用http://www.activiti.org/userguide/#bpmnTimerStartEvent

使用以下表达式:

${execution.getVariable('startTime') != null}