我正在尝试设置autoStoreVariables
的{{1}}字段。
这是包含org.activiti.engine.impl.bpmn.listener.ScriptTaskListener
的{{1}}。
userTask
收到以下错误:
org.activiti.engine.ActivitiIllegalArgumentException:不兼容 在字段声明' autoStoreVariables'上设置类型上课 org.activiti.engine.impl.bpmn.listener.ScriptTaskListener。声明 value的类型为org.activiti.engine.impl.el.JuelExpression,而 期待布尔
我尝试了以下但没有成功:
taskListener
设置<userTask id="WorkJob.task" name="WorkJob.task" activiti:assignee="${assignee}" activiti:dueDate="${dueDate}">
<extensionElements>
<activiti:taskListener event="create" class="org.activiti.engine.impl.bpmn.listener.ScriptTaskListener" >
<activiti:field name="autoStoreVariables" expression="${true}"/>
<activiti:field name="script" stringValue="${out:print('hello world')}"/>
<activiti:field name="language" stringValue="juel" />
</activiti:taskListener>
</extensionElements>
</userTask>
字段的正确方法是什么?
答案 0 :(得分:1)
Accordint Activiti用户指南Field Injection部分
可以将值注入委托的字段中 类。支持以下类型的注射:
- 固定字符串值
- 表达式
看起来无法直接注入布尔值。我认为在你的情况下,解决方案是扩展ScriptTaskListener
,例如
public class CustomScriptTaskListener extends ScriptTaskListener {
private Expression autoStoreVariablesExp;
public void setAutoStoreVariablesExp(Expression autoStoreVariablesExp) {
this.autoStoreVariablesExp = autoStoreVariablesExp;
}
@Override
public void notify(DelegateTask delegateTask) {
autoStoreVariables = Boolean.TRUE.equals(autoStoreVariablesExp.getValue(delegateTask));
super.notify(delegateTask);
}
}
并使用<activiti:field name="autoStoreVariablesExp" expression="${true}"/>
注入价值。