参考:Camunda 快速入门、Camunda SpringBoot与进阶内容、camunda中文站、camunda官方英文文档
在计算机上安装Camunda BPM平台和Camunda Modeler(用于编辑流程图及其他模型)。
Camunda Modeler下载地址 https://camunda.com/download/modeler/ 。
新建BPMN流程 ——> 编辑 ——> 配置流程参数 ——> 保存生成 .bpmn 文件 ——> 用java或node实现任务
Service Task(服务任务) , 服务类型有很多执行的方法,比如“external(外部)”任务模式 。
User Task(人工任务)
配置外部任务:
配置流程参数:
编写主类实现业务逻辑,代码大致如下:
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
。(注意点)将部署流程到流程引擎,然后发起流程,检查流程是否发起成功 。
点击工具栏中的部署按钮可以将当前流程部署到流程引擎,点击部署按钮,输入Deployment Name
为 “Payment” ,输入下方REST Endpoint
为http://localhost:8080/engine-rest
,然后点击右下角Deploy部署:
使用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"
}
}
}
编辑完成后,结果这样:
点击 Send 发送请求
如果能看到成功的返回结果,则流程发起成功
了解将人工任务集成到流程中的基础知识,以及如何使用Camunda构建表单。
点击“批准付款节点”,在右侧的属性面板中点击Forms(表单)选项卡,点击下面的加号,添加3个属性:
属性1:
属性2:
属性3:
部署流程后,打开任务列表(http://localhost:8080/camunda/app/tasklist/),使用 demo / demo 登录
点击右上角的 Start process
,在弹出的对话框中选择“付款流程”
这时会弹出编辑流程变量的对话框,可以通过点击 Add a variable 按钮添加变量,这次我们先不添加,直接点击右下角 Start 启动流程(注意点)
这时,在任务列表应该就能看到刚创建的人工任务了,如果没有可以手动刷新一下
部分用户这里看不到,可能是 All Tasks 过滤器没有自动添加,左侧显示为:
这时点击 Add a simple filter 即可
选择这个任务项,在右侧可以看到表单
点击 Diagram 选项卡,可以看到高亮的节点就是当前进行中的节点
了解如何通过向流程添加网关来使流程更具动态性。
排他网关(Exclusive Gateways)
添加网关(菱形)并进行配置:
比如,
选择“<1000”的连线,打开属性面板,选择“Condition Type”为“Expression”,这里我们使用JAVA统一表达式语言编写条件,这里要做的是在金额小于1000时直接刷卡付款,则输入表达式 ${amount<1000}
:
打开任务列表(http://localhost:8080/camunda/app/tasklist/),使用 demo / demo 登录
点击右上角的 Start process
,在弹出的对话框中选择“付款流程”
在上一章中,我们直接点击 Start,但这次我们要增加几个变量来测试动态的流程(关键点)
试着更改 amount
的值,查看对流程执行顺序的影响。
了解如何在流程中集成DMN决策表。
通过form选项卡添加表单 ——> 添加service task到流程中 ——> 编写java类 ——> 配置service task ——> 启动新流程