“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情”
一、 简介
Flowable 适用于开发人员,系统管理员和业务用户的紧凑且高效的工作流程和业务流程管理(BPM)平台。
Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义的流程实例,进行查询,访问运行中或历史的流程实例与相关数据,等等。这个章节将用一个可以在你自己的开发环境中使用的例子,逐步介绍各种概念与API。
Flowable可以十分灵活地加入你的应用/服务/构架。可以将JAR形式发布的Flowable库加入应用或服务,来嵌入引擎。 以JAR形式发布使Flowable可以轻易加入任何Java环境:Java SE;Tomcat、Jetty或Spring之类的servlet容器;JBoss或WebSphere之类的Java EE服务器,等等。 另外,也可以使用Flowable REST API进行HTTP调用。也有许多Flowable应用(Flowable Modeler, Flowable Admin, Flowable IDM 与 Flowable Task),提供了直接可用的UI示例,可以使用流程与任务。
二、 相关操作文档地址
官网地址
Flowable BPMN 用户手册
三、 使用前置准备工作
- 下载tomcat (推荐tomcat9)
下载地址:downloads.apache.org/tomcat/
- 下载flowable项目包
下载完成解压后拷贝 /wars/flowable-ui.war 文件至tomcat安装目录 /webapps 下
四. Flowable操作流程
1、使用flowable-ui创建流程图
1.1、修改tomcat地址为本地数据库地址(以便之后导出xml文件可以直接在项目中使用)
打印日志中要有很多sql语句,并且没有异常才表示启动成功
1.2、启动tomcat,访问地址http://localhost:8080/flowable-ui
| 名称 | 含义 |
|---|---|
| 任务应用程序 | 每个用户的任务,流程启动后任务会自动添加到该栏目 |
| APP.MODELER.TITLE | 业务流程模型,新建后可导出xml至项目中使用 |
| APP.ADMIN.TITLE | api端点配置 |
| APP.IDM.TITLE | 用户信息配置,可创建用户及修改用户 |
1.3、新建业务流程
进入APP.MODELER.TITLE栏目中,创建流程,模型key需要唯一且后续会在项目中使用,页面中可以看到各个事件及活动,分别代表业务模型的各个节点
2、导出流程图(也就是生成xml文件)
流程图生成好后保存再重新进入该流程,点击页面的下载按钮进行下载
3、将xml文件放入项目resources目录下的process目录下
4、通过代码启动流程及执行流程
具体代码使用查看 六、Flowable 方法调用
五、各个表的含义
其他网站很多,为了防止网站说抄袭就不列出来了
六、Flowable 方法调用
1. 引入依赖
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.5.0</version>
</dependency>
2. 代码引入flowable各个方法
通过@Autowired引入Flowable的各个核心类,使用类调用其中的方法的方式一步步完成各个流程。代码使用示例:
@Autowired
private RuntimeService runtimeService;
@PostMapping("/start/{userId}")
public ResponseObj startFlow(@PathVariable String userId) {
HashMap<String, Object> map = new HashMap<>();
map.put("userId", userId);
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey("openBill", map);
String processId = processInstance.getId();
System.out.println(processId);
return ResponseObj.success(processId);
}
2.1、Flowable核心类
2.1.1、RepositoryService 持久化部署
1.提供了带条件的查询模型流程定义的api
repositoryService.createXXXQuery()
例如:
repositoryService.createModelQuery().list()
模型查询
repositoryService.createProcessDefinitionQuery().list()
流程定义查询
repositoryService.createXXXXQuery().XXXKey(XXX)
(查询该key是否存在)
2.提供一大波模型与流程定义的通用方法
模型相关
repositoryService.getModel()
(获取模型)
repositoryService.saveModel()
(保存模型)
repositoryService.deleteModel()
(删除模型)
repositoryService.createDeployment().deploy();
(部署模型)
repositoryService.getModelEditorSource()
(获得模型JSON数据的UTF8字符串)
repositoryService.getModelEditorSourceExtra()
(获取PNG格式图像)
3.流程定义相关
repositoryService.getProcessDefinition(ProcessDefinitionId);
获取流程定义具体信息
repositoryService.activateProcessDefinitionById()
激活流程定义
repositoryService.suspendProcessDefinitionById()
挂起流程定义
repositoryService.deleteDeployment()
删除流程定义
repositoryService.getProcessDiagram()
获取流程定义图片流
repositoryService.getResourceAsStream()
获取流程定义xml流
repositoryService.getBpmnModel(pde.getId())
获取bpmn对象(当前进行到的那个节点的流程图使用)
4.流程定义授权相关
repositoryService.getIdentityLinksForProcessDefinition()
流程定义授权列表
repositoryService.addCandidateStarterGroup()
新增组流程授权
repositoryService.addCandidateStarterUser()
新增用户流程授权
repositoryService.deleteCandidateStarterGroup()
删除组流程授权
repositoryService.deleteCandidateStarterUser()
删除用户流程授权
2.1.2、RuntimeService 流程运行
runtimeService.createProcessInstanceBuilder().start()
发起流程
runtimeService.deleteProcessInstance()
删除正在运行的流程
runtimeService.suspendProcessInstanceById()
挂起流程定义
runtimeService.activateProcessInstanceById()
激活流程实例
runtimeService.getVariables(processInstanceId);
获取表单中填写的值
runtimeService.getActiveActivityIds(processInstanceId)
获取以进行的流程图节点 (当前进行到的那个节点的流程图使用)
runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).changeState();
终止流程
2.1.3、HistoryService 流程历史服务
historyService.createHistoricProcessInstanceQuery().list()
查询流程实例列表(历史流程,包括未完成的)
historyService.createHistoricProcessInstanceQuery().list().foreach().getValue()
可以获取历史中表单的信息
historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
根绝id查询流程实例
historyService.deleteHistoricProcessInstance()
删除历史流程
historyService.deleteHistoricTaskInstance(taskid);
删除任务实例
historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).list()
流程实例节点列表 (当前进行到的那个节点的流程图使用)
2.1.4、TaskService 任务服务
流转的节点审批
taskService.createTaskQuery().list()
待办任务列表
taskService.createTaskQuery().taskId(taskId).singleResult();
待办任务详情
taskService.saveTask(task);
修改任务
taskService.setAssignee()
设置审批人
taskService.addComment()
设置审批备注
taskService.complete()
完成当前审批
taskService.getProcessInstanceComments(processInstanceId);
查看任务详情(也就是都经过哪些人的审批,意见是什么)
taskService.delegateTask(taskId, delegater);
委派任务
taskService.claim(taskId, userId);
认领任务
taskService.unclaim(taskId);
取消认领
taskService.complete(taskId, completeVariables);
完成任务
任务授权
taskService.addGroupIdentityLink()
新增组任务授权
taskService.addUserIdentityLink()
新增人员任务授权
taskService.deleteGroupIdentityLink()
删除组任务授权
taskService.deleteUserIdentityLink()
删除人员任务授权
2.1.5、ManagementService
//执行自定义命令。
managementService.executeCommand(new classA())
执行classA的内部方法
//在自定义的方法中可以使用以下方法获取repositoryService。
ProcessEngineConfiguration processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
RepositoryService repositoryService = processEngineConfiguration.getRepositoryService();
2.1.6、IdentityService 操作用户服务
// 设置流程发起者 设置前者可以在历史流程实例中查询到
identityService.setAuthenticatedUserId(sysUser.getUserId());