如何使用 JavaScript 在 Camunda 外部任务中使用瞬态变量

你怎么做 使用 JavaScript 的 Camunda 外部任务中的瞬态变量

在本文中,让我们看看如何在使用 java 脚本实现 Camunda 外部任务的同时使用瞬态变量。

先决条件:

1. 卡蒙达 7.17

2. Eclipse 与 Maven(自 嵌入式 Camunda 引擎 使用,任何IDE)

3.Java

4. Visual Studio 代码(仅用于编写和测试 Javascript 代码;任何其他方式也可以)

让我们开始

按照链接获得 嵌入式 Camunda 引擎 如果没有提前完成申请。让我们修改 process.bpmn 以具有服务任务的外部实现,如下所示。另一个脚本任务用于打印由 Javascript 外部工作者设置的瞬态变量的值。

以下代码片段可以使用/保存为 bpmn 以实现上述实现。

<bpmn:definitions xmlns:bpmn=”http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi=”http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc=”http://www.omg.org/spec/DD/20100524/DC" xmlns:di=”http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda=”http://camunda.org/schema/1.0/bpmn" id=”Definitions_0fr9mxs” targetNamespace=”http://bpmn.io/schema/bpmn" exporter=”Camunda Modeler”

<bpmn:process id=”camunda-new-features-js-externalclient” isExecutable=”true”>

<bpmn:startEvent id=”StartEvent_1" name=”Start”>

bpmn:outgoingFlow_1ql0hfr</bpmn:outgoing>

</bpmn:startEvent>

<bpmn:sequenceFlow id=”Flow_1ql0hfr” sourceRef=”StartEvent_1" targetRef=”Activity_08xjz19" />

<bpmn:endEvent id=”Event_0ptn8u4" name=”End”>

bpmn:extensionElements

<camunda:executionListener event=”end”>

<camunda:script scriptFormat=”JavaScript”>print(“进程执行。”);</camunda:script>

</camunda:executionListener>

</bpmn:extensionElements>

bpmn:incomingFlow_0beer3a</bpmn:incoming>

</bpmn:endEvent>

<bpmn:sequenceFlow id=”Flow_0adr27u” sourceRef=”Activity_08xjz19" targetRef=”Activity_0zpmh2y” />

<bpmn:serviceTask id=”Activity_08xjz19" name=”Call External Javascript Client” camunda:type=”external” camunda:topic=”javascript-client”>

bpmn:incomingFlow_1ql0hfr</bpmn:incoming>

bpmn:outgoingFlow_0adr27u</bpmn:outgoing>

</bpmn:serviceTask>

<bpmn:sequenceFlow id=”Flow_0beer3a” sourceRef=”Activity_0zpmh2y” targetRef=”Event_0ptn8u4" />

<bpmn:scriptTask id=”Activity_0zpmh2y” name=”Print Transient Variable” scriptFormat=”JavaScript”>

bpmn:incomingFlow_0adr27u</bpmn:incoming>

bpmn:outgoingFlow_0beer3a</bpmn:outgoing>

bpmn:scriptprint(“瞬态变量值:”+execution.getVariable(“age”))</bpmn:script>

</bpmn:scriptTask>

</bpmn:process>

<bpmndi:BPMNDiagram id=”BPMNDiagram_1">

<bpmndi:BPMNPlane id=”BPMNPlane_1" bpmnElement=”camunda-new-features-js-externalclient”>

<bpmndi:BPMNEdge id=”Flow_0adr27u_di” bpmnElement=”Flow_0adr27u”>

<di:waypoint x=”400" y=”117" />

<di:waypoint x=”450" y=”117" />

</bpmndi:BPMNEdge>

<bpmndi:BPMNEdge id=”Flow_1ql0hfr_di” bpmnElement=”Flow_1ql0hfr”>

<di:waypoint x=”215" y=”117" />

<di:waypoint x=”300" y=”117" />

</bpmndi:BPMNEdge>

<bpmndi:BPMNEdge id=”Flow_0beer3a_di” bpmnElement=”Flow_0beer3a”>

<di:waypoint x=”550" y=”117" />

<di:waypoint x=”622" y=”117" />

</bpmndi:BPMNEdge>

<bpmndi:BPMNShape id=”_BPMNShape_StartEvent_2" bpmnElement=”StartEvent_1">

<dc:Bounds x=”179" y=”99" width=”36" height=”36" />

bpmndi:BPMNLabel

<dc:Bounds x=”185" y=”142" width=”25" height=”14" />

</bpmndi:BPMNLabel>

</bpmndi:BPMNShape>

<bpmndi:BPMNShape id=”Activity_14doiiu_di” bpmnElement=”Activity_08xjz19">

<dc:Bounds x=”300" y=”77" width=”100" height=”80" />

<bpmndi:BPMNLabel />

</bpmndi:BPMNShape>

<bpmndi:BPMNShape id=”Event_0ptn8u4_di” bpmnElement=”Event_0ptn8u4">

<dc:Bounds x=”622" y=”99" width=”36" height=”36" />

bpmndi:BPMNLabel

<dc:Bounds x=”630" y=”142" width=”20" height=”14" />

</bpmndi:BPMNLabel>

</bpmndi:BPMNShape>

<bpmndi:BPMNShape id=”Activity_1grvs1w_di” bpmnElement=”Activity_0zpmh2y”>

<dc:Bounds x=”450" y=”77" width=”100" height=”80" />

<bpmndi:BPMNLabel />

</bpmndi:BPMNShape>

</bpmndi:BPMNPlane>

</bpmndi:BPMNDiagram>

</bpmn:definitions>

构建并运行应用程序。

接下来,让我们构建一个 Javascript 工作代码,它可以为上述流程模型设置瞬态变量。

使用下面的代码片段执行相同的操作并保存为“.js”文件,此处的瞬态变量年龄设置为 50。

const {客户端,记录器} = 要求(“camunda-external-task-client-js”);

const {变量} = require(“camunda-external-task-client-js”);

const client = new Client ({baseUrl: “http://localhost:8082/engine-rest”, 使用: logger});

client.subscribe(“javascript-client”, async function({ task, taskService }) {

常量变量=新变量();

variables.setTransient(“年龄”, “50”); //设置进程的瞬态变量

等待 taskService.complete(任务,变量);

});

执行脚本。要获得运行 Javascript 片段的帮助,请遵循 视频教程 由 Camunda 团队提供。

接下来,使用 Camunda cockpit 启动流程实例,结果将在 eclipse/IDE 控制台上打印为瞬态变量的值为 50(在 Javascript 代码中设置)。

让我们尝试验证此过程变量是否保存在 Camunda DB 中。打开 H2 DB(用于此部署)。

选择 * FROM ACT_HI_VARINST

瞬态变量“age”不保存在数据库中,而在过程中可以访问它,并且可以在过程建模中的各种用例中使用。

希望有帮助。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/38036/08552011

posted @ 2022-09-20 11:08  哈哈哈来了啊啊啊  阅读(419)  评论(0编辑  收藏  举报