参考表达式中的任务局部变量(activiti 5.16.3)

时间:2014-10-08 19:06:09

标签: activiti

我有一个从userTask1到userTask2的条件转换(它们是我在bpmn中定义的任务的id)。

我在bpmn文件中使用了以下表达式:

<conditionExpression xsi:type="tFormalExpression"><![CDATA[${userTask1.varA == "uTask2"}]]></conditionExpression>

当我将userTask1标记为“已完成”时,我在Java API中使用以下方法:

Map variableMap = new HashMap();
variableMap.put("varA", "1");
activitiRule.getTaskService().complete(tasks.get(0).getId(), variableMap, true);

注意最后的“真实”参数,也就是说这些变量是任务的本地变量。

在一个单独的测试中,我可以验证变量确实存储在本地任务中。

但是,在这个测试中(使用条件转换),我收到了这个错误:

org.activiti.engine.ActivitiException: Unknown property used in expression: ${userTask1.varA == "uTask2"}
at org.activiti.engine.impl.el.JuelExpression.getValue(JuelExpression.java:53)
...
Caused by: org.activiti.engine.impl.javax.el.PropertyNotFoundException: Cannot resolve identifier 'userTask1'

如何解决这个问题?

谢谢, 拉嘎

1 个答案:

答案 0 :(得分:1)

Activiti中的每个执行都有变量,嵌套执行可以看到父变量,并不代表相反的方向。问题是您在当前执行的本地范围内声明变量,因此只有执行才能看到它。如果将变量绑定到流程实例范围,则可以避免这种情况,流程实例只不过是另一个执行,但它是所有其他执行的根/父执行(除了调用活动)。

执行就像计划执行的一系列元素,我敢于将它与java中的线程进行比较,但是更抽象并且具有持久状态,执行可以有嵌套执行。有许多元素可以创建新的执行;并行/包含网关,边界/即时事件,呼叫活动,子流程...... 我认为完成用户任务也会开始新的执行。

您可以轻松检查数据库表act_ru_execution中的执行情况和表act_ru_variable中的变量,变量在执行时有FK。

希望它有所帮助。

相关问题