Я хочу где-то определить исходный код скрипта и повторно использовать его из нескольких ScriptTaskListeners в Activiti 5.12 или более поздней версии.
Предполагая, что я определил переменную процесса taskScript
в предыдущей задаче скрипта groovy, которая содержит исходный код groovy:
execution.setVariable("taskScript",
'def log = org.slf4j.LoggerFactory.getLogger("my.Logger");log.info("works")')
Теперь я хочу, чтобы org.activiti.engine.impl.bpmn.listener.ScriptTaskListener
использовал этот код, передав его как activiti:expression
:
<activiti:taskListener event="complete" class="org.activiti.engine.impl.bpmn.listener.ScriptTaskListener" >
<activiti:field name="script">
<activiti:expression><![CDATA[${taskScript}]]></activiti:expression>
</activiti:field>
<activiti:field name="language" stringValue="groovy" />
</activiti:taskListener>
Я получаю исключение ниже:
javax.script.ScriptException: groovy.lang.MissingMethodException:
No signature of method: org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.$()
is applicable for argument types: (Script657$_run_closure1)
Похоже, что выражение ${taskScript}
не оценивается до того, как Activiti передаст его свойству script
ScriptTaskListener, а движок groovy пытается оценить ${taskScript}
как groovy script.
Однако это отлично работает:
<activiti:taskListener event="complete" class="org.activiti.engine.impl.bpmn.listener.ScriptTaskListener" >
<activiti:field name="script">
<activiti:string>
def log = org.slf4j.LoggerFactory.getLogger("my.Logger");
log.info("works")
</activiti:string>
</activiti:field>
<activiti:field name="language" stringValue="groovy" />
</activiti:taskListener>
Я очень смущен, почему я не могу этого сделать. Разве activiti:expression
не следует всегда оценивать перед применением к activiti:field
?
Есть ли другой способ повторного использования кода скрипта в ScriptTaskListeners?
<activiti:field name="script"><activiti:string><activiti:expression><![CDATA[${taskScript}]]></activiti:expression></activiti:string></activiti:field>
? А может<activiti:field name="script"><activiti:string><![CDATA[${taskScript}]]></activiti:string></activiti:field>
? ???? - person tim_yates   schedule 19.06.2020