我有一个从userTask1到userTask2的条件转换(它们是我在bpmn中定义的任务的id)。
我在bpmn文件中使用了以下表达式:
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${userTask1.varA == "uTask2"}]]></conditionExpression>
当我将userTask1标记为“已完成”时,我在JavaAPI中使用以下方法:
Map variableMap = new HashMap();
variableMap.put("varA", "1");
activitiRule.getTaskService().complete(tasks.get(0).getId(), variableMap, true);
注意最后的“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'
这个怎么解决?
谢谢拉卡
Activiti中的每个执行都有变量,嵌套执行可以看到父变量,不代表相反的方向。问题是你在当前执行的局部范围内声明变量,这样只有执行才能看到它。你可以避免,如果你将变量绑定到流程实例范围,流程实例只不过是另一个执行,但它是所有其他执行的根/父执行(调用活动除外)。
执行就像一系列计划执行的元素,我敢将其与java的线程进行比较,但更抽象,并且在持久化状态下,执行可以有嵌套执行。有许多元素会创建新的执行;并行/包容网关、边界/即时事件、调用活动、子流程…我认为完成用户任务也会开始新的执行。
您可以在数据库表act_ru_execution
和表中的变量中轻松检查您的执行情况act_ru_variable
,变量在执行时具有FK。
希望有帮助。