spring boot集成flowable操作文档

401 阅读5分钟

“我报名参加金石计划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示例,可以使用流程与任务。

二、 相关操作文档地址

官网地址

www.flowable.com/open-source…

Flowable BPMN 用户手册

tkjohn.github.io/flowable-us…

三、 使用前置准备工作

  • 下载tomcat (推荐tomcat9)

下载地址:downloads.apache.org/tomcat/

  • 下载flowable项目包

下载地址:github.com/flowable/fl…

下载完成解压后拷贝 /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.TITLEapi端点配置
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());