如何在activiti中设置一个布尔字段
how to set a boolean field in activiti
我正在尝试设置 org.activiti.engine.impl.bpmn.listener.ScriptTaskListener
的 autoStoreVariables
字段。
这是包含 taskListener
的 userTask
。
<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>
出现以下错误:
org.activiti.engine.ActivitiIllegalArgumentException: Incompatible
type set on field declaration 'autoStoreVariables' for class
org.activiti.engine.impl.bpmn.listener.ScriptTaskListener. Declared
value has type org.activiti.engine.impl.el.JuelExpression, while
expecting boolean
我尝试了以下但没有成功:
<activiti:field name="autoStoreVariables" booleanValue="true"/>
<activiti:field name="autoStoreVariables" stringValue="true"/>
<activiti:field name="autoStoreVariables" expression="true"/>
设置 boolean
字段的正确方法是什么?
根据 Activiti 用户指南 Field Injection 部分
It’s possible to inject values into the fields of the delegated
classes. The following types of injection are supported:
- Fixed string values
- Expressions
看来不能直接注入布尔值。我认为在您的情况下,解决方案是扩展 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}"/>
注入值。
我正在尝试设置 org.activiti.engine.impl.bpmn.listener.ScriptTaskListener
的 autoStoreVariables
字段。
这是包含 taskListener
的 userTask
。
<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>
出现以下错误:
org.activiti.engine.ActivitiIllegalArgumentException: Incompatible type set on field declaration 'autoStoreVariables' for class org.activiti.engine.impl.bpmn.listener.ScriptTaskListener. Declared value has type org.activiti.engine.impl.el.JuelExpression, while expecting boolean
我尝试了以下但没有成功:
<activiti:field name="autoStoreVariables" booleanValue="true"/>
<activiti:field name="autoStoreVariables" stringValue="true"/>
<activiti:field name="autoStoreVariables" expression="true"/>
设置 boolean
字段的正确方法是什么?
根据 Activiti 用户指南 Field Injection 部分
It’s possible to inject values into the fields of the delegated classes. The following types of injection are supported:
- Fixed string values
- Expressions
看来不能直接注入布尔值。我认为在您的情况下,解决方案是扩展 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}"/>
注入值。