如何在activiti中设置一个布尔字段

时间:2016-06-16 12:39:15

标签: java activiti

我正在尝试设置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> 字段的正确方法是什么?

1 个答案:

答案 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}"/>注入价值。