参考:Camunda 快速入门Camunda SpringBoot与进阶内容camunda中文站camunda官方英文文档

使用流程
1、下载和安装

计算机上安装Camunda BPM平台和Camunda Modeler(用于编辑流程图及其他模型)。

Camunda Modeler下载地址 https://camunda.com/download/modeler/ 。

2、编辑流程

新建BPMN流程 ——> 编辑 ——> 配置流程参数 ——> 保存生成 .bpmn 文件 ——> 用java或node实现任务

Service Task(服务任务) , 服务类型有很多执行的方法,比如“external(外部)”任务模式 。

User Task(人工任务)

配置外部任务:

image-20210526063609416

配置流程参数:

image-20210526063821870

编写主类实现业务逻辑,代码大致如下:

import java.util.logging.Logger;
import java.awt.Desktop;
import java.net.URI;

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) // 长轮询超时时间
        .build();

    // 订阅指定的外部任务,charge-card对应刷卡付款的外部任务id
    client.subscribe("charge-card")
        .lockDuration(1000) // 默认锁定时间为20秒,这里修改为1秒
        .handler((externalTask, externalTaskService) -> {
          // 将您的业务逻辑写在这

          // 获取流程变量
          String item = (String) externalTask.getVariable("item");
          Long amount = (Long) 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();
          }

          // 完成任务
          externalTaskService.complete(externalTask);
        })
        .open();
  }
}
  • 代码中的"http://localhost:8080/engine-rest"对应下面部署流程中的REST Endpoint。(注意点)
3、部署流程

将部署流程到流程引擎,然后发起流程,检查流程是否发起成功 。

使用 Camunda Modeler 部署流程

点击工具栏中的部署按钮可以将当前流程部署到流程引擎,点击部署按钮,输入Deployment Name 为 “Payment” ,输入下方REST Endpointhttp://localhost:8080/engine-rest ,然后点击右下角Deploy部署:

image-20210527063619110

使用Cockpit查看部署结果
创建流程实例(发起流程)

使用Rest API发起流程,所以需要一个接口测试工具(例如:Postman),或者也可以使用电脑自带的curl

a) curl

在命令行中执行

curl -H "Content-Type: application/json" -X POST -d '{"variables": {"amount": {"value":555,"type":"long"}, "item": {"value":"item-xyz"} } }' http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start
  • "http://localhost:8080/engine-rest"对应代码中的baseUrl;
  • process-definition
  • payment-retrieval对应“付款流程”id

如果能看到成功的返回结果,则流程发起成功。

b)Postman

在url中输入 http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start

模式选择POST

点击Body,选择raw,并在右面选择application/json

然后输入Body内容:

{
	"variables": {
		"amount": {
			"value":555,
			"type":"long"
		},
		"item": {
			"value": "item-xyz"
		}
	}
}

编辑完成后,结果这样:

image-20210526075056144

点击 Send 发送请求

如果能看到成功的返回结果,则流程发起成功

4、人工任务

了解将人工任务集成到流程中的基础知识,以及如何使用Camunda构建表单。

添加人工任务节点“批准付款”:

image-20210527061148133

配置人工任务表单:

点击“批准付款节点”,在右侧的属性面板中点击Forms(表单)选项卡,点击下面的加号,添加3个属性:

image-20210527061619655

属性1:

  • ID: amount
  • Type: long
  • Label: 金额

image-20210527062004660

属性2:

  • ID: item
  • Type: string
  • Label: 项目

image-20210527062029129

属性3:

  • ID: approved
  • Type: boolean
  • Label: 是否同意?

image-20210527062104122

发起流程:

部署流程后,打开任务列表(http://localhost:8080/camunda/app/tasklist/),使用 demo / demo 登录

点击右上角的 Start process ,在弹出的对话框中选择“付款流程”

image-20210527062701901

这时会弹出编辑流程变量的对话框,可以通过点击 Add a variable 按钮添加变量,这次我们先不添加,直接点击右下角 Start 启动流程(注意点)

image-20210527063004938

这时,在任务列表应该就能看到刚创建的人工任务了,如果没有可以手动刷新一下

部分用户这里看不到,可能是 All Tasks 过滤器没有自动添加,左侧显示为:

image-20210527070001945

这时点击 Add a simple filter 即可

选择这个任务项,在右侧可以看到表单

image-20210527065738905

点击 Diagram 选项卡,可以看到高亮的节点就是当前进行中的节点

image-20210527065754734

5、动态性(网关)

了解如何通过向流程添加网关来使流程更具动态性。

排他网关(Exclusive Gateways)

添加网关(菱形)并进行配置:

image-20210528065311137

比如,

选择“<1000”的连线,打开属性面板,选择“Condition Type”为“Expression”,这里我们使用JAVA统一表达式语言编写条件,这里要做的是在金额小于1000时直接刷卡付款,则输入表达式 ${amount<1000}

image-20210528070903818

打开任务列表(http://localhost:8080/camunda/app/tasklist/),使用 demo / demo 登录

点击右上角的 Start process ,在弹出的对话框中选择“付款流程”

在上一章中,我们直接点击 Start,但这次我们要增加几个变量来测试动态的流程(关键点)

image-20210528072028596

试着更改 amount 的值,查看对流程执行顺序的影响。

6、决策自动化

了解如何在流程中集成DMN决策表。

camunda+springboot
在流程中调用 JAVA Class

通过form选项卡添加表单 ——> 添加service task到流程中 ——> 编写java类 ——> 配置service task ——> 启动新流程

image-20210530100557989

web应用程序 (Tasklist, Cockpit, Admin, Rest Api 接口 )
  • REST API REST API允许你使用远程应用或JavaScript应用的流程引擎。 (注意:REST API的文档已成为自己的文档。)
  • Camunda Tasklist 用于人工流管理和用户任务的Web应用,允许流程参与者检查其工作流任务并导航到任务表单,以便在任务上工作并提供数据输入。
  • Camunda Cockpit 用于过程监视和操作的Web应用,允许你搜索流程实例,检查其状态并修复损坏的实例。
  • Camunda Admin 允许你管理用户,组和授权的Web应用。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐