代码之家  ›  专栏  ›  技术社区  ›  Peter

如何在camunda javascript服务任务中实例化“execution”对象?

  •  2
  • Peter  · 技术社区  · 6 年前

    我在论坛/文档中看到了很多javascript引用和代码片段( like this one )其中 execution 对象用于一系列有用的事情,例如:

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

    但是,我还没有看到如何实例化 执行 对象,当我尝试使用它时,会出现如下错误:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Jan Galinski    6 年前

    从camunda获得的delegate execution/delegatetask对象是非常复杂的上下文挂钩,camunda基于当前执行状态创建并将其交给挂钩(侦听器和委托)。 你不能自己创造。 如果需要访问它,请将代码放在任务/执行侦听器或委托中,这样您就可以自动访问它了。

        2
  •  0
  •   Peter    6 年前

    所以在一段时间之后 help on the Camunda forum .

    根据 this documentation , 当前作用域中可用的所有流程变量都可以按名称提供给脚本,以及一些特殊变量: execution , task connector .

    文档中不清楚的是 连接器的输出变量 在子(连接器)作用域中运行,因此 连接器 对象可用,则 执行 不是。执行实例上的某些功能可以这样访问:

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

    但是,我看到从返回的对象实际上是 AbstractVariableScope 所以我不知道能用多久。

    类似地,在 任务侦听器 ,任务实例可用,该实例对应于delegatetask接口。这里是 执行 实例的访问方法如下:

    task.execution.getCurrentActivityId();
    

    执行侦听器 , the 执行 实例可以直接访问。

    execution.setVariable("testVar", true);