目录
一、什么是acitiviti流程引擎
Activiti是一个面向业务人员、开发人员和系统管理员的轻量级工作流和业务流程管理(BPM)平台。它的核心是一个用于Java的超快速且坚如磐石的BPMN2过程引擎。它是开源的,并在Apache许可证下分发。Activiti在任何Java应用程序、服务器、集群或云中运行。它与Spring完美集成,非常轻量级,基于简单的概念。
二、如何使用
1.基本介绍
编辑器
目录或文件 | 说明 |
---|---|
diagram-viewer | 图表查看器 |
editor-app | 编辑器app |
modeler.html | 流程图编辑页面 |
index.html | 流程列表页面 |
swagger文档
- swagger访问地址: /swagger-ui/index.htm
- swagger配置:
// application.properties springdoc.swagger-ui.path=/swagger-ui.html
2. 创建模型
java代码:
/**
* 新建一个空模型
*
* @return
* @throws UnsupportedEncodingException
*/
@ApiOperation(value = "新建一个空模型")
@ApiParam(required = false)
@RequestMapping("/createNewEmptyModel")
public Map<String,Object> newModel(String name, String key) throws UnsupportedEncodingException {
RepositoryService repositoryService = processEngine.getRepositoryService();
//初始化一个空模型
Model model = repositoryService.newModel();
//设置一些默认信息,可以用参数接收
String description = "";
int revision = 1;
ObjectNode modelNode = objectMapper.createObjectNode();
modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
model.setName(name);
model.setKey(key);
model.setMetaInfo(modelNode.toString());
repositoryService.saveModel(model);
String id = model.getId();
//完善ModelEditorSource
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
stencilSetNode.put("namespace",
"http://b3mn.org/stencilset/bpmn2.0#");
editorNode.put("stencilset", stencilSetNode);
repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8"));
return success(model);
}
接口信息:
类型 | 值 |
---|---|
url | /models/createNewEmptyModel |
method | GET |
swagger url | /swagger-ui/index.html#/model-controller/newModel |
接口参数:
参数 | 说明 |
---|---|
name | 流程名称 |
key | 流程key(需唯一) |
流程列表页面
创建完之后可以在流程列表页面看到新创建的流程,访问地址: /static/index.html:
3. 编辑流程
在流程列表页面点击"编辑流程"按钮:
进入流程编辑页面:
设置流程图
点击右侧空白区域:
可以看到底部出现流程图设置栏,在这里进行一些流程图 必须的设置:
设置项 | 说明 |
---|---|
流程唯一标识 | 设置流程图的 process_key , 最好同模型的 key 一致,因为部署流程时会从流程图的文件里读取这个值作为 process_key 而不是从模型的数据库记录里读取 |
名称 | 设置流程图的名称 |
开始事件
关于开始事件:
- 每一个流程都会有一个唯一的开始节点 开始事件,每一个流程创建后都从这个节点开始。
操作方法:
- 在左侧的菜单里,找到 开始事件 的下拉菜单里的 开始事件 (同一名字)按钮
- 鼠标左键长按点击按钮拖拽到右侧的空白区域
需要在底侧的编辑栏对 开始事件 节点做一些 设置 :
设置项 | 说明 |
---|---|
ID | 为节点设置一个ID,如 id_start |
名称 | 为节点设置一个名称,如 开始 |
执行监听器 | 链接 |
表单的标识Key | 链接 |
表单属性 | 链接 |
任务节点
关于任务节点:
- 在Activiti流程引擎中,活动(Activity)是指流程中的一个节点,代表了一个任务或者一组类似任务。活动可以是用户任务(User Task),服务任务(Service Task),脚本任务(Script Task),自动任务(Automatic Task)等等。在流程执行过程中,活动表示了一个节点的状态,即正在进行的任务或已经完成的任务。这里主要介绍用户任务(User Task)。
- 当一个流程执行到一个活动时,它会等待相应的事件,如用户完成任务或者收到服务任务响应。当事件发生后,流程就会继续执行下一个节点。Activiti引擎确保这些节点在正确的时间和顺序被执行,从而使流程在正确的时间内达到预期的结果。
- 总之,活动在Activiti中扮演着至关重要的角色,代表了流程中的一个节点和状态,通过正确的活动设置和执行,流程能够达到预期的效果。
操作方法:
- 在左侧的菜单里,找到 活动 的下拉菜单里的 人工服务 按钮
- 鼠标左键长按点击按钮拖拽到右侧的空白区域
设置项 | 说明 |
---|---|
ID | 为节点设置一个ID,如 id_node_a |
名称 | 为节点设置一个名称,如 A |
任务派遣 | 分配该节点的审批人或者分组,具体说明 见底下 |
执行监听器 | 链接 |
表单的标识Key | 链接 |
表单属性 | 链接 |
关于任务派遣:
- 任务派遣在Activiti中是一个常见的应用场景。在Activiti中,任务派遣可以通过用户任务的完成和代理人来实现。
- 用户任务是一个需要用户完成的工作流任务,当用户完成该任务后,工作流会自动进入下一个任务或任务节点。在Activiti中,通过设置任务的candidateUsers或candidateGroups属性来指定该任务被哪些用户或用户组拥有权限进行操作。完成用户任务的用户需要具有相应的权限才能操作该任务。
- 代理人则是一个具有代理权限的用户,代理人可以代替其他用户进行任务派遣或任务处理。在Activiti中,通过设置任务的assignee属性来指定该任务的代理人。代理人可以进行任务的处理、完成和删除等操作。
设置任务派遣:
- 在编辑区域底部设置栏里,找到 任务派遣 并单击
- 在弹出的弹框里设置Assignee、Candidate users、Candidate groups
方向箭头
关于方向箭头:
- 在Activiti中,方向箭头指示流程从一个任务或节点到另一个的流程。箭头将源任务或节点连接到目标任务或节点,表示流程从源流向目标。
- Activiti中有不同类型的方向箭头,每种箭头都有特定的含义。例如,带箭头的实线表示规则序列流,而带菱形箭头的虚线表示条件序列流。这里主要介绍带箭头的实线。
- 在使用该平台设计和创建工作流时,理解Activiti中不同方向箭头的含义非常重要。
操作方式:
- 鼠标左键点击不同的节点,会在节点周围出现一些按钮
- 长按鼠标左键点击点击 实心的箭头图标
- 拖拽 到 要连接的下一个节点,然后松开鼠标左键:
一个节点连接多个节点:
实线箭头设置弯曲点:
- 首先点击左上角倒数第二个蓝色按钮
- 然后再点击要调整的箭头
- 最后拖拽箭头的弯曲处调整箭头
设置路径选择条件表达式
- 点击箭头
- 在底部设置找到 跳转条件 栏, 填写为统一表达式语言 (UEL)
关于统一表达式语言 (UEL)
在 Activiti BPMN 引擎中,可以使用一种称为统一表达式语言 (UEL) 的表达式语言来定义条件和表达式。 Activiti 中条件的语法基于 Java EL 语法。下面是一些 Activiti 条件表达式的例子:
- ${task.priority > 50} (判断task.priority变量是否大于 50)
- ${task.assignee == “John Doe”} (判断task.assignee是否等于"John Doe")
- ${approvedByManager and (approvedByLegal or approvedByFinance)} (approvedByManager、approvedByLegal、approvedByFinance 都是布尔变量, 这里的是意思是 是否由 管理员审批(approvedByManager)