赞
踩
在本节中,您将学习如何使用 Camunda Modeler 创建您的第一个 BPMN 2.0 流程,以及如何执行自动化步骤。
首先打开 Camunda Modeler。
通过单击 File > New File > BPMN Diagram (Camunda Platform) 创建新的 BPMN 图。
首先对一个简单的流程进行建模。
双击 Start Event。将打开一个文本框。将启动事件命名为“Payment Retrieval requested”。
提示
编辑标签时,可以使用添加换行符。Shift + Enter
单击启动事件。从其上下文菜单中,选择活动形状(圆角矩形)。它将自动放置在画布上,您可以将其拖动到您喜欢的位置。将其命名为 Charge Credit Card。通过单击活动形状并使用扳手按钮将活动类型更改为服务任务。
添加名为 Payment Received 的结束事件。
使用Camunda平台执行服务任务的方法有很多种。在本指南中,我们将使用外部任务模式。在 Camunda Modeler 中打开属性面板,然后单击您刚刚创建的服务任务。将 Implementation 更改为 and use as the Topic。
由于我们正在对可执行进程进行建模,在画布的右侧,您可以找到属性面板,单击建模画布上的空白区域时,属性面板将显示进程本身的属性。
首先,为进程配置 ID。在属性字段 Id 中键入 payment-retrieval。进程引擎将属性 ID 用作可执行进程的标识符,最佳做法是将其设置为人类可读的名称。
其次,配置进程的名称。在属性字段 Name 中键入 Payment Retrieval。
最后,确保选中“可执行文件”属性旁边的框。如果不选中此框,则流程引擎将忽略流程定义。
完成后,通过单击“文件”>“另存为...”来保存更改。在出现的对话框中,导航到您选择的文件夹,并将图表另存为payment.bpmn
流程图BPMN模型下载地址:https://github.com/camunda/camunda-get-started-quickstart/archive/Step-1.zip
在对流程进行建模后,我们想要执行一些业务逻辑。
Camunda 平台的构建是为了让您的业务逻辑可以用不同的语言实现。您可以选择哪种语言最适合您的项目。
在本快速入门中,我们将向您展示如何在以下位置使用 Camunda 的现成任务客户端:
Java或者JavaScript (NodeJS),根据你熟悉的开发语言情况,选择其中之一即可。
如果您以前从未使用过 Java,我们建议在本教程中使用 JavaScript (NodeJS) 任务客户端。
如果您更喜欢其他编程语言,还可以使用 Camunda 的 REST API 通过 HTTP 访问 API 操作。
在本节中,您将学习如何在 Java 中实现外部任务工作线程。
请确保已安装以下工具:
首先在 IDE 中创建一个新的 Maven 项目。如果您使用的是 Eclipse,则可以按照以下步骤操作:
在 Eclipse 中,转到“文件”/“新建”/“其他...”。这将打开“新建项目向导”。在“新建项目向导”中,选择“Maven”/“Maven 项目”。单击“下一步”。
在“新建 Maven 项目向导”的第一页上,选择“创建简单项目”(可以跳过原型选择)。单击“下一步”。
在第二页(见屏幕截图)上,配置项目的 Maven 坐标。由于我们正在设置 JAR 项目,因此请确保选择 Packaging: jar。
完成后,单击“完成”。Eclipse 将建立一个新的 Maven 项目。项目将显示在“项目资源管理器视图”中。
下一步包括为新流程应用程序设置 Maven 对外部任务客户机的依赖关系。项目的pom.xml文件应如下所示:
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.camunda.bpm.getstarted</groupId>
- <artifactId>charge-card-worker</artifactId>
- <version>0.0.1-SNAPSHOT</version>
-
- <properties>
- <camunda.external-task-client.version>7.19.0</camunda.external-task-client.version>
- <maven.compiler.source>1.8</maven.compiler.source>
- <maven.compiler.target>1.8</maven.compiler.target>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.camunda.bpm</groupId>
- <artifactId>camunda-external-task-client</artifactId>
- <version>${camunda.external-task-client.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <version>1.7.36</version>
- </dependency>
- <dependency>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- <version>2.3.1</version>
- </dependency>
- </dependencies>
-
- <profiles>
- <profile>
- <id>jdk9-plus</id>
- <activation><jdk>(1.8,)</jdk></activation>
- <dependencies>
- <dependency>
- <groupId>com.sun.xml.bind</groupId>
- <artifactId>jaxb-impl</artifactId>
- <version>2.3.1</version>
- </dependency>
- </dependencies>
- </profile>
- </profiles>
- </project>

接下来,我们将创建一个订阅该主题的新 ExternalTaskClient。charge-card
当进程引擎遇到配置为外部处理的服务任务时,它会创建一个外部任务实例,我们的处理程序将对该实例做出反应。我们在 ExternalTaskClient 中使用长轮询来提高通信效率。
接下来,您需要创建一个包,例如 org.camunda.bpm.getstarted.chargecard,并向其添加一个 Java 类,例如 ChargeCardWorker。
- package org.camunda.bpm.getstarted.chargecard;
-
- import java.awt.Desktop;
- import java.net.URI;
- import java.util.logging.Logger;
-
- import org.camunda.bpm.client.ExternalTaskClient;
-
- public class ChargeCardWorker {
- private final static Logger LOGGER = Logger.getLogger(ChargeCardWorker.class.getName());
-
- public static void main(String[] args) {
- ExternalTaskClient client = ExternalTaskClient.create()
- .baseUrl("http://localhost:8080/engine-rest")
- .asyncResponseTimeout(10000) // long polling timeout
- .build();
-
- // subscribe to an external task topic as specified in the process
- client.subscribe("charge-card")
- .lockDuration(1000) // the default lock duration is 20 seconds, but you can override this
- .handler((externalTask, externalTaskService) -> {
- // Put your business logic here
-
- // Get a process variable
- String item = externalTask.getVariable("item");
- Integer amount = externalTask.getVariable("amount");
- LOGGER.info("Charging credit card with an amount of '" + amount + "'€ for the item '" + item + "'...");
-
- try {
- Desktop.getDesktop().browse(new URI("https://docs.camunda.org/get-started/quick-start/complete"));
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- // Complete the task
- externalTaskService.complete(externalTask);
- })
- .open();
- }
- }

您可以通过右键单击该类并选择 来运行 Java 应用程序,ChargeCardWorker Run as Java。
请注意,该外部任务应在测试验证流程过程中一直保持运行状态,因为它要和流程引擎实例进行交互。
工作线程运行后,您可以继续部署进程并启动一些实例。
在本节中,您将学习如何在 NodeJS 中实现外部任务工作线程。
请确保已安装以下工具:
- mkdir charge-card-worker
-
- cd ./charge-card-worker
-
- npm init -y
- npm install camunda-external-task-client-js
-
- npm install -D open
接下来,我们将创建一个订阅该主题的新 ExternalTaskClient。
当流程引擎遇到配置为外部处理的服务任务时,它会创建一个外部任务实例,我们的处理程序将对该实例做出反应。我们在 ExternalTaskClient 中使用长轮询来提高通信效率。
接下来,您需要创建一个新的 JavaScript 文件,例如 ,如下所示:worker.js
- const { Client, logger } = require('camunda-external-task-client-js');
- const open = require('open');
-
- // configuration for the Client:
- // - 'baseUrl': url to the Process Engine
- // - 'logger': utility to automatically log important events
- // - 'asyncResponseTimeout': long polling timeout (then a new request will be issued)
- const config = { baseUrl: 'http://localhost:8080/engine-rest', use: logger, asyncResponseTimeout: 10000 };
-
- // create a Client instance with custom configuration
- const client = new Client(config);
-
- // susbscribe to the topic: 'charge-card'
- client.subscribe('charge-card', async function({ task, taskService }) {
- // Put your business logic here
-
- // Get a process variable
- const amount = task.variables.get('amount');
- const item = task.variables.get('item');
-
- console.log(`Charging credit card with an amount of ${amount}€ for the item '${item}'...`);
-
- open('https://docs.camunda.org/get-started/quick-start/success');
-
- // Complete the task
- await taskService.complete(task);
- });

您可以使用以下命令运行 NodeJS 脚本:
node ./worker.js
请注意,辅助角色应在整个快速入门指南中保持运行状态。
工作线程运行后,您可以进入下一步以部署流程并启动一些实例。
在本步骤中,您将部署流程并启动一个新实例,以便您可以看到您的简单流程是否正常工作。
注意:您无法在 Camunda Cloud 中运行为 Camunda Platform 建模的 BPMN 图,反之亦然。
要部署流程,请单击 Camunda Modeler 中左下方“飞机”图标的部署按钮,然后为其指定部署名称“Payment Retrieval”,REST端点地址写http://localhost:8080/engine-rest,然后单击“部署”按钮。从版本 3.0.0 开始,您将需要提供端点配置的 URL 以及部署详细信息。这可以是 REST API 的根端点(例如http://localhost:8080/engine-rest),也可以是部署创建方法的确切端点(例如http://localhost:8080/engine-rest/deployment/create )。
您应该在 Camunda Modeler 中看到一条成功消息。
接下来,使用 Cockpit 查看进程是否已成功部署。转到 http://localhost:8080/camunda/app/cockpit/ 并使用凭据 demo / demo 登录。您的流程 Payment Retrieval 应在仪表板上可见。
在 Camunda 中,有多种方法可以启动新的流程实例。您可以利用 Camunda REST API 通过发送 POST 请求来启动新的流程实例。
curl -H "Content-Type: application/json" -X POST -d '{"variables": {"amount": {"value":555,"type":"integer"}, "item": {"value":"item-xyz"} } }' http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start
在工作线程中,您现在应该在控制台中看到输出。这意味着您已经成功启动并执行了第一个简单的流程。
如果您不愿意将 curl 用于 REST 请求,则可以改用任何 REST 客户端。
向以下终结点发出 POST 请求:http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start
JSON 正文应如下所示:
- {
- "variables": {
- "amount": {
- "value":555,
- "type":"integer"
- },
- "item": {
- "value": "item-xyz"
- }
- }
- }
提示:确保将标头正确设置为Content-Type: application/json
以下是请求在 Postman 中的外观:
此时,立刻回到 Cockpit查看,发现启动了一个流程实例,当前状态在Charge Credit Card节点上,因为此时外部任务客户端ChargeCardWorker还没有轮询到执行该服务。
几秒钟后,外部任务客户端ChargeCardWorker被轮询到并执行完成,在您的工作线程控制台中应该看到一个输出,并获取到了流程启动时的变量amount和item的值。这也表明了外部任务和流程引擎是可以交换数据的,这种外部任务客户端执行流程任务的方式,也是camunda流程引擎特有的能力,activiti和flowable流程引擎目前不具备执行外部client任务的能力。
这意味着您已经成功启动并执行了第一个简单的流程。
如果您在 Camunda Enterprise Edition 上运行,您还可以在 Camunda Cockpit 中查看已完成的流程实例。开源版本Camunda的Cockpit的功能极其有限,需要开发者进行二次开发扩展,云程低代码平台使用Camunda开源流程引擎进行了大量的功能扩展,可在线体验:云程 | 云程低代码平台
以上演示了Camunda其中一种自动化流程的设计和执行,在某些情况下,我们希望让人参与到我们的流程中,在我们国内的流程需求中,大部分都是人工参与的流程任务。
在线体验系统:http://www.yunchengxc.com
源代码下载:https://github.com/camunda/camunda-get-started-quickstart/archive/Step-2a.zip
官方文档地址:https://docs.camunda.org/get-started/quick-start/service-task/
接下来,了解如何设计人工任务流程,如何设计表单,流程和表单如何关联配置,如何部署和发起人工任务流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。