如何在 Camunda JavaScript 服务任务中实例化“执行”对象?

Pet*_*ter 5 javascript bpmn camunda

我在论坛/文档(比如这个)上看到很多 JavaScript 参考和代码片段,其中该execution对象用于一系列有用的事情,例如:

execution.createIncident(String incidentType, String configuration);
execution.resolveIncident(String incidentId);
execution.setVariable("name", value);
Run Code Online (Sandbox Code Playgroud)

但是,我在任何地方都没有看到如何实例化该execution对象的示例,当我尝试使用它时,我收到如下错误:

The process could not be started. :
Cannot instantiate process definition Finswitch_Tx:14:42ef803b-67df-11e8-a127-0242ac11001b: Unable to 
evaluate script: ReferenceError: "execution" is not defined in <eval> at line number 7
Run Code Online (Sandbox Code Playgroud)

请给我一个如何实例化对该对象的访问的示例?

Pet*_*ter 4

因此,在 Camunda 论坛上提供一些帮助后,对此问题有了更全面的回答。

根据此文档当前范围内可用的所有流程变量都可按名称供脚本使用,以及一些特殊变量:executiontaskconnector

文档中不清楚的是连接器输出变量中的脚本在子(连接器)范围中运行,因此虽然connector对象可用,但对象execution不可用。执行实例上的一些功能可以像这样访问:

var execution = connector.getParentVariableScope();
var activityId = execution.getCurrentActivityId();
Run Code Online (Sandbox Code Playgroud)

但是,我看到返回的对象实际上是一个AbstractVariableScope,所以我不确定它可以使用到什么程度。

同样,在Task Listener的脚本中,任务实例是可用的,它对应于 DelegateTask 接口。这里execution可以按如下方式访问实例:

task.execution.getCurrentActivityId();
Run Code Online (Sandbox Code Playgroud)

Execution Listener中,execution可以直接访问实例。

execution.setVariable("testVar", true);
Run Code Online (Sandbox Code Playgroud)