bpmn-task

This commit is contained in:
dashan 2024-03-24 23:02:36 +08:00
parent d75d0af1c2
commit f246ba889e
12 changed files with 328 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,120 @@
# BPMN2.0-Task任务
## BPMN2.0简介
BPMNBusiness Proess Model & Notation,业务流程模型与符号2.0规范是OMGObject Management Group,对象管理组织)制定的,其主要目的是既给用户提供一套简单的、容易理解的机制,以便用户创建流程模型;又使用户能很好地处理不同流程模型内在的复杂性。为此,该规范定义了模型表示的基本符号元素(以下简称为元素)并把这些元素分成5种不同的类别。由于提供的元素类别只有5种用户可以很容易地识别这些类别并据此来理解BPMN模型图。同时在每个符号类别中在保持基本图形相似的前提下BPMN 2.0规范通过适当地改变每个图形元素的外观增加额外的信息,来生成基本图形元素的变种,以更好地支持实际模型的复杂性。
## 任务简介
当学习BPMN时可以将其比喻为一种“画流程图”的工具用来清晰地描述一个业务流程中的各种活动、决策和流程走向。它就像是一种通用的语言帮助不同人理解和沟通同一个业务过程。
在BPMN中任务就是业务流程中的各种工作。想象一下你要做一杯咖啡的过程你需要准备咖啡豆、磨豆、冲泡等等。在BPMN中每个做咖啡的步骤都是一个任务比如“磨咖啡豆”、“煮水”、“冲泡咖啡”。这些任务可以是人做的比如你自己动手磨豆也可以是机器做的比如咖啡机煮水
简单来说BPMN任务就是描述一个业务流程中需要做的各种事情无论是由人还是机器来完成。通过画出这些任务我们可以清楚地了解整个业务流程是如何进行的从而更好地管理和优化流程。
为了区分不同的任务操作BPMN2.0提供了多种任务类型,下面我们一起来看一下常用的几种任务。
## 服务任务
![服务任务](assets/image-20240324222526865.png)
服务任务Service Task在BPMN中服务任务Service Task是一种特殊类型的任务用于描述业务流程中由软件自动执行的工作。这些工作通常是通过调用外部服务、执行自动化应用程序或执行特定的计算机程序来完成的。
在Camunda中服务任务可以通过不同的方式来实现其中一种常见的方式是通过调用Java代码。具体地说Camunda提供了一个服务任务类型允许开发者将Java代码嵌入到业务流程中并在流程执行时自动调用该代码来执行特定的任务。这样可以利用Java的强大功能来实现各种自定义的业务逻辑从而实现流程的自动化和优化。
除了调用Java代码外服务任务也可以用于调用外部的Web服务或执行一些外部系统的操作。这意味着服务任务可以与其他系统进行集成以实现更复杂的业务流程。总的来说服务任务在BPMN中扮演着重要的角色帮助实现业务流程的自动化和集成。
## 发送任务
![image-20240324222754486](assets/image-20240324222754486.png)
发送任务Send Task是BPMN中的一种简单任务用于将消息发送给外部参与者。这种任务通常用于将信息传递给外部系统、应用程序或者其他业务参与者而不需要等待任何反馈或响应。一旦消息发送完成发送任务也就结束了。
比如,假设你正在设计一个购物网站的订单流程。当顾客下单后,系统可能会使用发送任务将订单信息发送给仓库系统,以便处理订单并安排发货。在这个过程中,发送任务只负责将订单信息发送出去,而不需要等待仓库系统的响应或确认。
因此发送任务在BPMN中用于描述一种单向的通信行为用来实现业务流程中的消息传递。它的特点是简单明了不需要与外部系统进行复杂的交互只需要将特定的消息发送给目标参与者即可。
## 用户任务
![image-20240324222854579](assets/image-20240324222854579.png)
用户任务User Task是BPMN中一种用于描述需要人工参与者完成的工作的任务类型。当流程执行到用户任务时会创建一个任务并分配给指定的用户或用户组。该用户或用户组可以通过任务列表或其他方式收到任务的通知并开始执行任务。
用户任务通常用于需要人工决策或处理的活动,例如审批申请、处理客户请求、填写表单等。一旦用户完成了任务,流程引擎会期望收到一个确认,这可以是简单地点击一个“完成”按钮,也可以是提供一些数据或信息作为输入。这样,流程引擎就可以继续执行后续的流程步骤。
典型的用户任务包括:
- 批准申请:比如请假申请、费用报销申请等,需要主管或审批者批准。
- 处理客户请求:比如客户投诉、信息查询等,需要客服人员或相关部门处理。
- 填写表单:需要用户提供信息或数据,如注册表单、调查问卷等。
总之用户任务是BPMN中用于描述需要人工参与者完成的工作的重要组成部分它能够清晰地定义和管理业务流程中的人工活动并促使流程按照预期的方式执行。
## 业务规则任务
![image-20240324222939036](assets/image-20240324222939036.png)
业务规则任务Business Rule Task是BPMN 2.0中引入的新概念用于与业务规则引擎Business Rules Engine集成。它主要用于执行一个或多个业务规则这些规则通常定义了业务流程中的决策逻辑或条件。业务规则任务允许将业务规则引擎嵌入到流程中从而实现对业务规则的动态管理和执行。
在业务流程中,业务规则任务通常用于以下方面:
1. 提供输入数据:业务规则任务可以向业务规则引擎提供必要的输入数据,以便引擎执行规则计算。
2. 执行规则:业务规则任务会触发业务规则引擎执行事先定义好的规则集合,这些规则可以根据给定的输入数据进行计算和评估。
3. 获取输出结果:一旦规则引擎执行完毕,业务规则任务可以从引擎中获取计算后的输出结果,然后根据结果继续执行后续的流程步骤。
通过业务规则任务,业务流程可以更加灵活和智能地根据不同情况做出决策,从而提高了流程的自动化程度和执行效率。这种集成方式也使得业务规则的维护和更新变得更加简便,可以随时根据业务需求进行调整和优化。
## 脚本任务
![image-20240324223015103](assets/image-20240324223015103.png)
脚本任务Script Task是BPMN中的一种自动化活动用于在流程执行过程中执行特定的脚本。当流程执行到脚本任务时会立即执行与该任务相关联的脚本而无需等待外部参与者的干预。
脚本任务可以执行各种类型的脚本,包括但不限于:
1. **JavaScript**: 使用JavaScript语言编写的脚本通常用于实现一些简单的逻辑或计算。
2. **Groovy**: 使用Groovy语言编写的脚本Groovy是一种在Java虚拟机上运行的动态语言提供了丰富的特性和功能。
3. **Python**: 使用Python语言编写的脚本Python是一种流行的脚本语言具有简洁而强大的语法。
4. **Shell脚本**: 使用Shell语言编写的脚本通常用于执行系统级的操作和命令。
脚本任务的执行结果可以影响流程的后续走向,比如修改流程变量、触发事件或者导致流程走向不同的分支。脚本任务可以在流程设计中实现一些特定的逻辑,使得流程更加灵活和智能。
需要注意的是,在使用脚本任务时,要确保编写的脚本是安全的、可靠的,并且能够正确地处理各种可能的情况,以保证流程执行的稳定性和可靠性。
## 接收任务
![image-20240324223057153](assets/image-20240324223057153.png)
接收任务Receive Task是BPMN中的一种简单任务它用于等待特定消息的到来。当流程执行到接收任务时流程引擎将暂停执行并将流程状态保存到持久性存储中。这意味着流程将保持等待状态直到流程引擎接收到特定的消息。
接收任务通常用于等待外部系统或者其他流程实例发送的消息或事件。一旦流程引擎接收到了特定的消息,接收任务将会被触发,从而使得流程继续执行。
举个例子,假设你正在设计一个采购流程。在某个步骤中,你可能需要等待供应商发送确认订单的消息。这时,你可以使用一个接收任务来暂停流程,直到接收到供应商发送的订单确认消息。一旦收到消息,接收任务将被触发,流程将继续执行后续的步骤,比如进行付款或者安排发货。
总的来说接收任务在BPMN中用于实现流程的等待机制使得流程能够与外部系统或事件进行交互并根据接收到的消息来驱动流程的执行。
## 手工任务
![image-20240324223219184](assets/image-20240324223219184.png)
手工任务Manual Task是BPMN中的一种任务类型用于定义流程引擎外部的任务即流程引擎无法自动处理的任务。它主要用于对那些流程引擎不需要知道、没有已知系统或用户接口的人所做的工作进行建模。
手工任务通常涉及到人工的介入或者处理,例如需要人类决策、手动操作或其他无法自动化的工作。在流程执行到手工任务时,流程引擎会暂停执行,并且不会自动继续流程,因为流程引擎无法自动处理手工任务。
相反,手工任务作为传递活动处理,需要等待外部参与者完成任务后手动通知流程引擎继续流程的执行。这通常包括参与者完成任务后手动触发一个事件,或者通过其他方式向流程引擎发送消息,以指示手工任务已经完成,可以继续执行后续的流程步骤。
总的来说手工任务在BPMN中用于描述那些流程引擎无法自动处理的任务需要人工介入或者外部系统的支持。它是一种流程执行的等待点直到外部参与者完成任务后流程才能继续执行。
## 任务标记
任务标记是指在BPMN中对任务进行附加特性或属性的设置以增强任务的功能或描述。常见的任务标记包括循环、多实例和补偿。
1. **循环标记Loop Marker**:循环标记用于表示任务将被重复执行多次。它可以应用于各种类型的任务,包括用户任务、服务任务等。循环标记通常包括循环的条件、循环的次数或循环的范围等信息。例如,一个用户任务可以设置为循环执行,直到满足某个条件为止,或者执行固定次数的循环。
2. **多实例标记Multi-Instance Marker**:多实例标记用于表示任务将以多个实例的形式执行。它允许将单个任务实例化为多个并行执行的子任务,从而加快流程的执行速度或提高并行处理能力。多实例标记通常包括实例化的条件、实例化的数量或实例化的范围等信息。例如,一个服务任务可以设置为多实例执行,以并行处理多个数据对象或执行多次相同的操作。
3. **补偿标记Compensation Marker**:补偿标记用于表示任务具有补偿能力,即可以在流程执行出现异常或错误时对之前执行的任务进行回滚或撤销。补偿通常与事务性或复杂的流程相关,用于确保流程的数据一致性和完整性。例如,在订单流程中,如果支付过程失败,则可以触发一个补偿任务来取消之前已经执行的订单处理任务。
这些任务标记可以与各种类型的任务组合使用以实现不同的流程需求和业务场景。它们增强了BPMN中任务的灵活性和功能性使得流程能够更好地适应复杂的业务流程和变化的需求。

View File

@ -0,0 +1,177 @@
# 1.任务BPMN.xml示例
## 1.1.用户任务
### 1.1.1 基础示例 v7.17
![image-20240111222326661](assets/image-20240111222326661.png)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0sa42zq" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.19.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="Process_1a7jmao" name="员工请假" isExecutable="true" camunda:historyTimeToLive="180">
<bpmn:startEvent id="StartEvent_1" name="开始" camunda:initiator="starter">
<bpmn:outgoing>Flow_1r002sr</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_1r002sr" sourceRef="StartEvent_1" targetRef="Activity_0u3op74" />
<bpmn:userTask id="Activity_10scc5t" name="HR审批" camunda:assignee="liwei">
<bpmn:extensionElements>
<camunda:formData>
<camunda:formField id="comment" label="评论" type="string" defaultValue="同意" />
</camunda:formData>
</bpmn:extensionElements>
<bpmn:incoming>Flow_0elpzm6</bpmn:incoming>
<bpmn:outgoing>Flow_0r73nc4</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="Flow_0elpzm6" sourceRef="Activity_0u3op74" targetRef="Activity_10scc5t" />
<bpmn:userTask id="Activity_0u3op74" name="员工请假" camunda:assignee="${starter}">
<bpmn:extensionElements>
<camunda:formData>
<camunda:formField id="name" label="姓名" type="string" defaultValue="${starter}" />
<camunda:formField id="reason" label="原因" type="string" />
<camunda:formField id="leaveday" label="请假天数" type="long" />
</camunda:formData>
</bpmn:extensionElements>
<bpmn:incoming>Flow_1r002sr</bpmn:incoming>
<bpmn:outgoing>Flow_0elpzm6</bpmn:outgoing>
</bpmn:userTask>
<bpmn:endEvent id="Event_1ns9u1d" name="结束">
<bpmn:incoming>Flow_0r73nc4</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0r73nc4" sourceRef="Activity_10scc5t" targetRef="Event_1ns9u1d" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1a7jmao">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="89" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="186" y="132" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_10scc5t_di" bpmnElement="Activity_10scc5t">
<dc:Bounds x="430" y="67" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1534l1c_di" bpmnElement="Activity_0u3op74">
<dc:Bounds x="270" y="67" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1ns9u1d_di" bpmnElement="Event_1ns9u1d">
<dc:Bounds x="592" y="89" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="599" y="132" width="22" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1r002sr_di" bpmnElement="Flow_1r002sr">
<di:waypoint x="215" y="107" />
<di:waypoint x="270" y="107" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0elpzm6_di" bpmnElement="Flow_0elpzm6">
<di:waypoint x="370" y="107" />
<di:waypoint x="430" y="107" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0r73nc4_di" bpmnElement="Flow_0r73nc4">
<di:waypoint x="530" y="107" />
<di:waypoint x="592" y="107" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
```
## 1.2.服务任务
### 1.2.1基础示例v7.17
![image-20240111222451312](assets/image-20240111222451312.png)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1iph4mz" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.19.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.17.0">
<bpmn:process id="Process_0wfnslr" name="业务任务示例" isExecutable="true" camunda:versionTag="2.0">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1v28prw</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_1v28prw" sourceRef="StartEvent_1" targetRef="Activity_1ktdg88" />
<bpmn:serviceTask id="Activity_1ktdg88" name="预约修理家电" camunda:class="com.ds.camunda.serviceTask.ReserveRepair">
<bpmn:extensionElements />
<bpmn:incoming>Flow_1v28prw</bpmn:incoming>
<bpmn:outgoing>Flow_1cnmfsg</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_1cnmfsg" sourceRef="Activity_1ktdg88" targetRef="Activity_18rd76k" />
<bpmn:serviceTask id="Activity_18rd76k" name="师傅上门修理" camunda:delegateExpression="${doingRepair}">
<bpmn:incoming>Flow_1cnmfsg</bpmn:incoming>
<bpmn:outgoing>Flow_0x7fg4i</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_0x7fg4i" sourceRef="Activity_18rd76k" targetRef="Activity_0524lzv" />
<bpmn:serviceTask id="Activity_0524lzv" name="公司电话回访" camunda:expression="${telCall.doCall(execution)}" camunda:resultVariable="score">
<bpmn:incoming>Flow_0x7fg4i</bpmn:incoming>
<bpmn:outgoing>Flow_01d0tm9</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="Flow_01d0tm9" sourceRef="Activity_0524lzv" targetRef="Activity_09ko96y" />
<bpmn:serviceTask id="Activity_09ko96y" name="查看评分" camunda:expression="#{telCall.getScore(execution)}">
<bpmn:incoming>Flow_01d0tm9</bpmn:incoming>
<bpmn:outgoing>Flow_0ygzqio</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:endEvent id="Event_1b1ys82">
<bpmn:incoming>Flow_0ygzqio</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0ygzqio" sourceRef="Activity_09ko96y" targetRef="Event_1b1ys82" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_0wfnslr">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0ph1kj9_di" bpmnElement="Activity_1ktdg88">
<dc:Bounds x="260" y="77" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1q8lzpd_di" bpmnElement="Activity_18rd76k">
<dc:Bounds x="430" y="77" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0ymccd1_di" bpmnElement="Activity_0524lzv">
<dc:Bounds x="590" y="77" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_038c0up_di" bpmnElement="Activity_09ko96y">
<dc:Bounds x="750" y="77" width="100" height="80" />
<bpmndi:BPMNLabel />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1b1ys82_di" bpmnElement="Event_1b1ys82">
<dc:Bounds x="912" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1v28prw_di" bpmnElement="Flow_1v28prw">
<di:waypoint x="215" y="117" />
<di:waypoint x="260" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1cnmfsg_di" bpmnElement="Flow_1cnmfsg">
<di:waypoint x="360" y="117" />
<di:waypoint x="430" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0x7fg4i_di" bpmnElement="Flow_0x7fg4i">
<di:waypoint x="530" y="117" />
<di:waypoint x="590" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_01d0tm9_di" bpmnElement="Flow_01d0tm9">
<di:waypoint x="690" y="117" />
<di:waypoint x="750" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ygzqio_di" bpmnElement="Flow_0ygzqio">
<di:waypoint x="850" y="117" />
<di:waypoint x="912" y="117" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
```
## 1.3.多实例任务
## 1.4.脚本任务
## 1.5.发送任务&接收任务

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -0,0 +1,31 @@
# 任务
在Camunda中任务是业务流程中的工作单元代表着流程中需要执行的具体操作或活动。任务可以包括需要人工介入的用户任务、自动化执行的服务任务、规则引擎决策的业务规则任务等。下面介绍一下各种任务的简单使用方法
## 用户任务
## 服务任务
服务任务是一种任务类型它表示由计算机程序或外部服务执行的任务。这可以涉及到与外部系统的集成、调用REST服务、执行脚本等。
服务任务有多种的实现方式
输出内容:
```c
进入到预约家电修理任务
当前活动名称:预约修理家电 流程定义id: Process_0wfnslr:1:57f33d73-b08d-11ee-be32-0a0027000003
开始上门修理
当前活动名:师傅上门修理
开始电话回访
王小满请对本次服务打分
查询评分
王小满的评分:10
```
## 多实例任务
## 脚本任务
## 发送任务&接受任务