如何使用 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”>
<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" />
<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" />
<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 版权协议,转载请附上原文出处链接和本声明