camunda在网上的资料不多,而且比较杂乱,都是断断续续的,没有一个完整的教程。我作为一个初学者,想要学习,就在官网把官网的快速入门案例翻译成汉语,以便大家学习。
根据官网做的入门demo
camunda分为:
第一 下载和安装
前提:java环境必须是1.8
官网下载:
Camunda BPM Platform
https://camunda.com/download/?__hstc=12929896.036872f0de6b9cb8525b76aeabe408ba.1588932118328.1588989962967.1588992933556.4&__hssc=12929896.1.1588992933556&__hsfp=1992636386
下载完成之后,解压文件,然后双击start-camunda.bat(windows),或者是start-camund.sh(Unix/linux)
Camunda Modeler
https://camunda.com/download/modeler/?__hstc=12929896.036872f0de6b9cb8525b76aeabe408ba.1588932118328.1588989962967.1588992933556.4&__hssc=12929896.2.1588992933556&__hsfp=1992636386
下载完成之后,在文件中找到“camunda-modeler.exe”,打开。如图
第二 开启流程的自动化执行
在这个部分,我们将设置第一个自动执行的bpmn流程
首先,创建BPMN图
在BPMN Modeler 中创建流程图:FIle->new File->BPMN Diagram
第二步,文件创建好之后,设置一个简单的流程。
需要想用的图标,双击即可引入
开始事件引入之后,我们就用“Payment Retrieval Requested”作为流程名。
点击start event ,在内容列表中,选择想要启用的图标。可以把图标拖到你需要存放的位置。这个图标我们命名为“Charge Credit Card”,需要改变业务任务的话,就点击图标,然后列表中出现的扳手按钮,点击一下,就可以重写任务。如图
第三步 添加End Event named Payment Received.
第四步 配置业务任务流程
这里的配置决定业务流程的执行逻辑。
使用外部任务的执行模板,打开属性面板,点击“task service”,charge-card 作为外部执行的主题
第五步 配置执行属性
因为我们要创建执行的流程,就需要给流程一个执行ID ,把流程的可执行性设置为true。画板的右侧,可以看到属性选项,单击画布的空白处,左侧的属性列表将会显示属性进程的属性。
首先为进程配置ID,进程ID是执行引擎识别进程的核心标识,而且最好是容易分辨的名字。
第二就是配置进程名。
第三步,就是执行属性是确认的。
最后,如果流程设计好了,就可以保存了点击File->Save File
我们在java语言中执行
条件 jdk1.8
在eclipse中创建一个maven项目
创建好之后,配置文件
测试类
package org.camunda.bpm.getstarted.chargecard;
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) // 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 = (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();
}
// Complete the task
externalTaskService.complete(externalTask);
})
.open();
}
}
跑起来之后,就可以进行部署和创建运行实例了。
第三 部署流程
为了能够部署进程,点击部署按钮,然后写个部署名字“Payment Retrieval”,在3.0.0版本之后,就要求在部署配置详情中提供节点URL。节点URL 既可以是RESTAPI (例如http://localhost:8080/engine-rest)或者一个创建方法的详细节点(例如 http://localhost:8080/engine-rest/deployment/create)。
部署成功之后就可以看到部署成功的信息
接下来访问一下 Cockpit ,确认流程部署成功
http://localhost:8080/camunda/app/cockpit。进程 Payment Retrieval 如果部署成功就可以在面板中看见。
接下来我们开启一个流程实例
在Camunda中,有几个不同的开启流程的方法,可以发送RESTAPI POST请求来开启一个新的流程实例
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
在这个项目中,我们应该能看到在控制面板中有输出信息,这就说明开启流程实例成功。
REST Client
发送post请求到
http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start
Json体应该是
{
“variables”: {
“amount”: {
“value”:555,
“type”:“long”
},
“item”: {
“value”: “item-xyz”
}
}
}
确保你设置的Content-Type是正确的
application/json,在Postman中是这样的
第四 添加群组成员
在一些情况下,我们需要多人协作,这就需要在进程中加入群组成员
首先添加用户任务
我们需要修改一下我们的流程,才能添加成员
还是在Camunda Modeler打开流程图
左侧菜单中选择要使用的图形,然后拖到startevent 和charge credit card 任务中间,命名为 Approve Payment点击扳手按钮,改一下用户任务的活动类型
配置一个用户任务
打开属性视图,如果属性视图不可见,点击面板左侧属性标签,在画板中选择“User Task”,属性视图选项就会更新,点开Assignee,如图
给用户任务插入一个表单
在属性列表中查找,过程类似,找到“Forms”,添加三个Fields键
三个Fields分别是:
Fields1:
ID:amount
Type:long
Label:Amount
Fields2:
ID: item
Type: string
Label: Item
Field 3:
ID: approved
Type: boolean
Label: Approved?
部署流程:
依然使用Deploy Button 部署
访问任务列表: (http://localhost:8080/camunda/app/tasklist)
点击 Start process 按钮,开启一个实例。现在可以在使用的通用表单中为进程实例设置一个变量
在用户任务没有添加详细的表单时,可以随时使用这个通用表单。点击Add a variable 按钮在新的一行中,和图中一样填写表格,填写完,点击start。
这时就可以看到Approve Payment 任务在你的任务列表中,选择任务点击Diagram 键。流程图就会高亮展示在等待中的用户任务。
启动任务,选择Form tab,我们定义了变量Form tab ,任务表格自动产生fields。
接下来,我们要设置流程的动态化管理,只对特定的用户任务显示某些特殊的信息。为流程添加网关。
第五 设置流程的动态性,添网关
Modeler 左侧菜单,选择网关(就是钻石图形),拖到startevent和service task中间,想在哪里添加网关,就自己添加一个,如图
给网关命名:
接下来给网关配置信息
如图:
更改一下Sequence Flows
For the>=1000€ Sequence Flow ,use theExpression$(amount>=1000)
如图
对于 Yes Sequence Flow ,用 ${approved}
对于No Sequence Flow, 用 ${!approved}:
最后,还是部署流程:
同样的方法部署
部署之后,访问(http://localhost:8080/camunda/app/tasklist) ,点击start process按钮,开启新的实例
第六 为流程增加控制任务的规则
同样在modeler中,打开流程,点击Approve Payment Task.改变一下Business Rule Task 的活动类型,如图:
接下来,通过将实现更改为DMN,并在属性面板中将Decision Ref更改为approval -payment,将业务规则任务链接到DMN表。为了检索评估结果并将其自动保存为我们流程中的流程实例变量,我们还需要将结果变量更改为approved,并在properties面板中使用singleEntry作为映射决策结果。
保存改变并部署更新后的流程。
接下来创建一个DMN表
点击顺序
File > New File > DMN Table.
描述DMN表
首先,为DMN表提供名称Approve Payment和ID approval - Payment。DMN表ID必须与BPMN流程中的决策Ref匹配。
接下来,指定DMN表的输入表达式。在本例中,我们将根据项目名称来决定是否批准支付。您的规则也可以使用FEEL表达式语言、JUEL或脚本。如果您愿意,您可以在DMN引擎中阅读更多关于表达式的内容。
对于输入列,使用item作为输入表达式,item作为输入标签:
接下来,设置输出列。使用approved作为输出名,作为输出列“approved”的输出标签:
让我们通过单击DMN表左侧的加号图标来创建一些规则。我们还应该将输出列更改为数据类型布尔:
设置后,你的DMN表应该是这样的:部署表
要部署决策表,请单击Camunda Modeler中的deploy按钮,将其部署名称设置为“支付检索决策”,然后单击deploy按钮。
Cockpit中确认部署成功:
访问:
http://localhost:8080/camunda/app/cockpit.
接下来,使用Tasklist启动两个新的流程实例,并验证根据您的输入,流程实例将以不同的方式路由。之后,访问
http://localhost:8080/camunda/app/tasklist.
登录demo/demo
点击 start process 按钮。
启动流程实例并选择支付流程。使用泛型表单添加变量如下您将看到,根据输入的不同,工作人员将对信用卡进行收费或不收费。您还可以通过使用Camunda驾驶舱来验证DMN表的评估结果,访问http://localhost:8080/camunda/app/cockpit
使用凭证demo / demo登录。导航到“决策”部分并单击“批准支付”。检查通过单击表中的ID评估的不同决策实例。
启动成功快速入门案例。
如果想继续学习,需要到官网学习。