我有一个从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'
如何解决这个问题?
谢谢, 拉嘎
答案 0 :(得分:1)
Activiti中的每个执行都有变量,嵌套执行可以看到父变量,并不代表相反的方向。问题是您在当前执行的本地范围内声明变量,因此只有执行才能看到它。如果将变量绑定到流程实例范围,则可以避免这种情况,流程实例只不过是另一个执行,但它是所有其他执行的根/父执行(除了调用活动)。
执行就像计划执行的一系列元素,我敢于将它与java中的线程进行比较,但是更抽象并且具有持久状态,执行可以有嵌套执行。有许多元素可以创建新的执行;并行/包含网关,边界/即时事件,呼叫活动,子流程...... 我认为完成用户任务也会开始新的执行。
您可以轻松检查数据库表act_ru_execution
中的执行情况和表act_ru_variable
中的变量,变量在执行时有FK。
希望它有所帮助。