如何在Camunda JavaScript服务任务中实例化`execution`对象?

4

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

execution.createIncident(String incidentType, String configuration);
execution.resolveIncident(String incidentId);
execution.setVariable("name", value);

然而,我还没有看到实例化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

请你能否给我一个实例,说明如何实例化对该对象的访问?

2个回答

4

帮助来自Camunda论坛的帮助后,这里有一个更全面的答案。

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

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

var execution = connector.getParentVariableScope();
var activityId = execution.getCurrentActivityId();

然而,我发现从中返回的对象实际上是一个AbstractVariableScope,所以我不确定这可以使用到多远。
同样地,在任务监听器的脚本内部,任务实例可用,对应于DelegateTask接口。在这里,可以通过以下方式访问execution实例:
task.execution.getCurrentActivityId();

在执行监听器中,可以直接访问执行实例。
execution.setVariable("testVar", true);

0
从camunda获取的delegateExecution/delegateTask对象是非常复杂的上下文钩子,是基于当前执行状态由camunda创建并交给钩子(listener和delegate)的。 你无法自己创建它。 如果你需要访问它,请将你的代码放在Task/ExecutionListener或delegate中,那么你就可以自动访问它了。

那么这些对象只能在使用JavaScript的某些地方使用吗?也许它们不能用于类型为JavaScript的服务任务输出变量?connector是可用的,它与execution一起被提及作为“特殊变量”之一此处 - Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接