代码之家  ›  专栏  ›  技术社区  ›  flavio.donze

如何在activiti中设置布尔字段

  •  0
  • flavio.donze  · 技术社区  · 8 年前

    我正在尝试设置 autoStoreVariables 字段 org.activiti.engine.impl.bpmn.listener.ScriptTaskListener .

    这是 userTask 包含 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>
    

    正在获取以下错误:

    组织活动.发动机。ActivitiIllegalArgumentException:不兼容 类的字段声明“autoStoreVariables”上的类型集 org.activiti.engine.impl.bpmn.listener.ScriptTaskListener。宣布 值的类型为org.activiti.engine.impl.el.JuelExpression,而 需要布尔值

    我尝试了以下操作,但没有成功:

    <activiti:field name="autoStoreVariables" booleanValue="true"/>
    
    <activiti:field name="autoStoreVariables" stringValue="true"/>
    
    <activiti:field name="autoStoreVariables" expression="true"/>
    

    设置 boolean 领域

    1 回复  |  直到 8 年前
        1
  •  1
  •   Evgeny    8 年前

    根据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}"/> .