开始使用 BPM

本章节介绍如何建模以及运行简单的业务流。

假设我们想要创建一个报销流程。

有三方需要参与这个流程:

  • 需要报销的职员;

  • 能审批报销的经理;

  • 给职员转账的会计。

我们将创建的模型:

model

流程建模

启动应用程序并打开 BPM → Modeler(建模器) 界面。

当建模器第一次打开时,右侧的属性面板展示流程本身的属性。修改下列字段:

  • Process id: reimbursement

  • Name: Reimbursement

properties

在属性面板找到 Documentation(文档) 文本域,然后编写一段流程描述。

description

创建开始表单

在画布上点击 StartEvent 元素。属性面板则会展示其属性。

Form(表单) 部分填写的内容是会在用户启动流程之后展示给用户的。我们指定 Input dialog(输入对话框) 作为流程启动的表单。

start event

然后我们需要指定在输入对话框内给用户展示的参数。

点击 + 按钮,然后在 Input dialog parameter edit(输入对话框参数编辑器) 窗口中创建一个 requestNumber 参数,有下列属性:

  • Caption(名称) - 请求编号

  • Type(类型) - String

  • Editable(可编辑) - true

  • Required(必选) - true

request number

再创建三个输入对话框参数:

  • expenseAmount(类型是 Decimal (double),可编辑且必需)

  • expenseDate(类型是 Date,可编辑且必需)

  • document(类型是 File,可编辑且必需)

之后,再创建一个输入对话框参数 manager,类型为 Entity,可编辑且必需。选择 User 实体名称。指定 UI 组件为 ComboBox,方便用户选择。我们将 JPQL 查询字段留空,这样会使用默认的 select e from smpl_User e 查询语句。

在输入对话框参数列表的下方 Business key(业务键值) 字段,选中 requestNumber。业务键值是一个流程实例的特定领域标识符。

添加完所有参数之后,Form 部分将展示如下:

form

流程启动之后,输入对话框参数会保存在对应的流程变量中。

创建审批用户任务

我们开始创建 Approval(审批) 用户任务。在画布中选中开始事件节点,展示弹出菜单。点击 Append task 按钮。

append task

然后点击 Change type,扳手图标按钮,并选择 User Task

user task

在属性面板中,指定任务名 Approval 以及任务 id approval

我们用 Process variable(流程变量) 作为执行人来源。下拉列表展示这些字段和 Entity 类型的流程变量,实体类型需要实现 UserDetails 接口。从列表中选择 manager 流程变量。

manager
默认情况下,可以用内置的 initiator 流程变量分配任务。更多详细信息,请参阅 流程变量相应章节

对于 Approval 任务,我们还需要指定一个流程表单。这也是一个输入对话框。这个对话框将展示开始表单中的流程变量,但需要新增一个参数。

创建一个新的输入对话框参数,并在 Process variable 下拉列表中选择 requestNumber 变量。将这个字段设置为不可编辑,即,取消勾选 Editable 复选框。

user task variables

用同样的方式创建输入对话框参数 expenseAmountexpenseDatedocument 变量。这些参数都是不可编辑的。

新增一个对话框参数,流程变量名为 comment,类型为 Multiline string。字段是可编辑,非必需。这个字段是给经理用的,当批准或驳回报销申请时,可以用来写一些说明。

创建输出

Approval 这一步,经理有两个选择:批准或驳回请求。做到这点有个简单的办法 - 使用输出。对于每个输出,表单上都会显示一个按钮,结果会存在一个特殊的流程变量中。

首先创建 Approval 用户任务的第一个输出,点击属性面板中 Outcomes(输出) 部分的相应按钮。在输出编辑器界面,指定输出 id approve,名称为 Approve 并在图标列表选择一个图标 CHECK

outcome approve

然后创建第二个输出:id 是 reject,名称是 Reject,图标是 BAN

Approval 任务完成之后,流程需要根据输出选择相应的路径。我们创建一个互斥网关(exclusive gateway)。

选中 Approval 任务元素,在菜单中点击 Append Gateway 操作。

append gateway

点击这个网关,使用菜单中的相应按钮创建 EndEventUser task。一个顺序流从互斥网关流向 EndEvent 元素,另一个顺序流流向用户任务。给这两个顺序流分别命名为:approvedrejected

flows

approved 流指定条件,点击这个流元素,然后在序列流属性面板的 Condition source(条件来源) 下拉框字段选择 User task outcome。再选中 Approval 用户任务和 approve 输出。

flow approved

按同样的步骤配置 rejected 序列流,但是在输出值字段需要选择 reject

创建支付用户任务

第二个用户任务,设置任务名称为 Payment,任务 id 为 payment

我们实现下列行为:所有的会计都能看到这个任务,他们中的任何一人都能领取这个任务。因此,为了实现这个功能,我们不能指定某个特定的任务执行人,而是需要指定 Candidate groups(候选组)Candidate users(候选用户)

我们给会计创建一个 Candidate group。打开 BPM → User groups(用户组) 界面,新建一个组,名称为 Accountants,编码为 accountants。修改组类型为 Users 并添加几个用户到组内。

user group

需要给这些用户分配 bpm-process-actor-ui 角色,给予必要的访问 BPM 界面和实体的权限,以便这些用户能开始流程、处理用户任务。可以在 Application → Users 界面分配角色。

返回建模器,选择 Payment 用户任务并点击 Assignee(执行人) 区域 Candidate groups 字段旁边的编辑按钮。

candidate groups

在弹窗中,选择 Groups source(组来源) 字段的值为 User groups 然后添加 Accountants 分组。

groups

Payment 任务创建输入对话框表单。添加已有的 requestNumberexpenseAmountexpenseDatedocumentcomment 字段,全部为不可编辑。

Payment 用户任务后添加 EndEvent 元素。

指定用户发起流程

我们需要做的最后一件事就是指定谁能发起这个流程。如果这个流程可以由任何用户发起,我们可以创建并使用一个特殊的用户分组。

打开 User groups 界面并创建一个新的组,命名为 All users。设置其 TypeAll users,这表示这个组会自动包含所有的用户。建模器中,选择 All users 组作为流程发起候选人。

all users

回到建模器,点击画布的空白处,展示流程属性。与 Payment 任务相似,我们将在 Starter candidates(候选发起人) 区域定义 Candidate groups

users start

开始流程

流程模型已准备好,可以部署至流程引擎。点击工具栏的 Deploy process(部署流程) 按钮。

toolbar

如需发起流程,打开 BPM → Start Process(开始流程) 界面。此界面展示当前用户可以发起的流程定义。

测试流程

选择 reimbursement 流程,点击 Start process 按钮。

start process

开始流程表单会自动展示,填写字段,选择 manager 然后点击 Start process 按钮。

start form

经理可以在 BPM → My Tasks(我的任务) 界面看到分配的任务。

approval step

双击任务。表单中的一些字段是只读的,与我们之前在建模器配置的一样,还有两个按钮用来输出结果:ApproveReject

approval form

输入备注,点击 Approve 按钮。 以 Accountants 用户组的任何成员的身份登录。打开 BPM → My Tasks 界面。可以看到虽然表格是空的,但是提示用户有一个组任务可以领取。展开 Group tasks 节点。

group task

任何会计领取这个任务之前,Accountants 分组的所有用户都能在他们的组任务中看到 Payment 任务。打开任务表单。可以看到,表单是只读的,如果没有领取任务则不能修改表单。表单底部有两个按钮:Claim and resume(领取并继续) and Claim and close(领取并关闭)

payment task
  • Claim and resume 将任务从其他用户的分组任务列表删除,并将任务表单保留在界面上。表单将变为可编辑状态,并显示完成任务的按钮。

  • Claim and close 将任务从其他用户的分组任务列表删除,并关闭流程表单。任务会显示在当前用户已分配的任务列表中。

点击 Claim and close 按钮。从 Assigned tasks(已分配任务) 分组中选择 Payment 任务。打开任务表单,使用默认的 Complete task(完成任务) 按钮完成当前任务。当我们没有在模型中指定任务输出时,会展示该默认按钮。

complete task

流程操作结束。