马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
配景
项目上需要使用到工作流相关内容,比对了好久采用flowable实现,该插件和activiti等很相似,根本上可以直接移植
代码如下
- <!-- 父引用用-->
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.6.13</version>
- <relativePath/>
- </parent>
复制代码- <!-- 依赖包 -->
- <properties>
- <flowable.version>6.8.1</flowable.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.flowable</groupId>
- <artifactId>flowable-spring-boot-starter</artifactId>
- <version>${flowable.version}</version>
- </dependency>
- <dependency>
- <groupId>org.flowable</groupId>
- <artifactId>flowable-spring-boot-starter-ui-modeler</artifactId>
- <version>${flowable.version}</version>
- </dependency>
- <!-- Flowable 核心模块 -->
- <dependency>
- <groupId>org.flowable</groupId>
- <artifactId>flowable-engine</artifactId>
- <version>${flowable.version}</version>
- </dependency>
- <dependency>
- <groupId>org.flowable</groupId>
- <artifactId>flowable-spring-boot-starter-ui-admin</artifactId>
- <version>${flowable.version}</version>
- </dependency>
- <dependency>
- <groupId>org.flowable</groupId>
- <artifactId>flowable-spring-boot-starter-ui-idm</artifactId>
- <version>${flowable.version}</version>
- </dependency>
- <!-- thymeleaf架包 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-thymeleaf</artifactId>
- </dependency>
- <dependency>
- <groupId>org.flowable</groupId>
- <artifactId>flowable-spring-boot-starter-ui-task</artifactId>
- <version>${flowable.version}</version>
- </dependency>
- </dependencies>
复制代码 配置文件 application-dev.yml
- spring:
- application:
- name: flowable-service
- main:
- allow-circular-references: true
- auto-config:
- swagger2: enable
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://192.167.116.28:3306/z_flow?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
- username: root
- password: root
- hikari:
- pool-name: coreHikariPool
- maximum-pool-size: 100
- connection-timeout: 30000
- minimum-idle: 62
- idle-timeout: 500000
- max-lifetime: 3600000
- connection-test-query: SELECT 1
- auto-commit: true
- flowable:
- #异步执行
- async-executor-activate: true
- #自动更新数据库
- database-schema-update: true
- #校验流程文件,默认校验resources下的processes文件夹里的流程文件
- process-definition-location-prefix: classpath*:/processes/
- process-definition-location-suffixes: "**.bpmn20.xml, **.bpmn"
- #该配置只是防止页面报错,没有实际意义
- common:
- app:
- idm-admin:
- password: test
- user: test
- #没有实际意义
- idm-url: http://localhost:8080/flowable-demo
复制代码 在resources中新建processes文件夹,内部的xml文件会被flowable识别,并主动发布流程实例
新建request.bpmn20.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:flowable="http://flowable.org/bpmn"
- typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
- targetNamespace="http://www.flowable.org/processdef">
- <!-- -请假条流程图 -->
- <process id="vacationRequest" name="请假条流程" isExecutable="true">
- <!-- -流程的开始 -->
- <startEvent id="startEvent"/>
- <sequenceFlow sourceRef="startEvent" targetRef="approveTask"/>
- <!-- -流程的节点 -->
- <userTask id="approveTask" name="开始请假" flowable:candidateGroups="managers"/>
- <!-- -流程节点间的线条,上一个节点和下一个节点-->
- <sequenceFlow sourceRef="approveTask" targetRef="decision"/>
- <!-- -排他性网关 -->
- <exclusiveGateway id="decision"/>
- <!-- -同意时 -->
- <sequenceFlow sourceRef="decision" targetRef="holidayApprovedTask">
- <conditionExpression xsi:type="tFormalExpression">
- <![CDATA[${approved}]]>
- </conditionExpression>
- </sequenceFlow>
- <!-- -拒绝时 -->
- <sequenceFlow sourceRef="decision" targetRef="rejectEnd">
- <conditionExpression xsi:type="tFormalExpression">
- <![CDATA[${!approved}]]>
- </conditionExpression>
- </sequenceFlow>
- <!-- -外部服务 -->
- <!-- <serviceTask id="externalSystemCall" name="Enter holidays in external system"
- flowable:class="org.javaboy.flowable02.flowable.Approve"/>
- <sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/> -->
- <userTask id="holidayApprovedTask" flowable:assignee="${employee}" name="同意请假"/>
- <sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/>
- <!-- <serviceTask id="rejectLeave" name="Send out rejection email"
- flowable:class="org.javaboy.flowable02.flowable.Reject"/>
- <sequenceFlow sourceRef="rejectLeave" targetRef="rejectEnd"/> -->
- <endEvent id="approveEnd"/>
- <endEvent id="rejectEnd"/>
- <!-- -流程的结束 -->
- </process>
- </definitions>
复制代码 使用Springboot的启动类启动即可
常见问题:
原因:a)大概没有配置主动更新数据库
b) 设置为只查当前连接的schema库即可
(由于当前连接大概已经创建过工作流表)
nullCatalogMeansCurrent=true
正常启动会创建下列表格

表格形貌如下
表分类 | 表名 | 表阐明 | 一样平常数据(2) | ACT_GE_BYTEARRAY | 通用的流程定义和流程资源 | | ACT_GE_PROPERTY | 体系相关属性 | 流程汗青记录(8) | ACT_HI_ACTINST | 汗青的流程实例 | | ACT_HI_ATTACHMENT | 汗青的流程附件 | | ACT_HI_COMMENT | 汗青的阐明性信息 | | ACT_HI_DETAIL | 汗青的流程运行中的细节信息 | | ACT_HI_IDENTITYLINK | 汗青的流程运行过程中用户关系 | | ACT_HI_PROCINST | 汗青的流程实例 | | ACT_HI_TASKINST | 汗青的任务实例 | | ACT_HI_VARINST | 汗青的流程运行中的变量信息 | 用户用户组表(9) | ACT_ID_BYTEARRAY | 二进制数据表 | | ACT_ID_GROUP | 用户组信息表 | | ACT_ID_INFO | 用户信息详情表 | | ACT_ID_MEMBERSHIP | 人与组关系表 | | ACT_ID_PRIV | 权限表 | | ACT_ID_PRIV_MAPPING | 用户或组权限关系表 | | ACT_ID_PROPERTY | 属性表 | | ACT_ID_TOKEN | 体系登录日志表 | | ACT_ID_USER | 用户表 | 流程定义表(3) | ACT_RE_MODEL | 模型信息 | | ACT_RE_DEPLOYMENT | 摆设单元信息 | | ACT_RE_PROCDEF | 已摆设的流程定义 | 运行实例表(10) | ACT_RU_DEADLETTER_JOB | 正在运行的任务表 | | ACT_RU_EVENT_SUBSCR | 运行时事件 | | ACT_RU_EXECUTION | 运行时流程执行实例 | | ACT_RU_HISTORY_JOB | 汗青作业表 | | ACT_RU_IDENTITYLINK | 运行时用户关系信息 | | ACT_RU_JOB | 运行时作业表 | | ACT_RU_SUSPENDED_JOB | 暂停作业表 | | ACT_RU_TASK | 运行时任务表 | | ACT_RU_TIMER_JOB | 定时作业表 | | ACT_RU_VARIABLE | 运行时变量表 | 其他表(2) | ACT_EVT_LOG | 事件日志表 | | ACT_PROCDEF_INFO | 流程定义信息 | 相关API简要阐明
1.FormService
表单数据的管理; 是可选服务,也就是说Flowable没有它也能很好地运行,而不必捐躯任何功能。这个服务引入了开始表单(start form)与任务表单(task form)的概念。 开始表单是在流程实例启动前体现的表单,
而任务表单是用户完成任务时体现的表单。Flowable可以在BPMN 2.0流程定义中定义这些表单。表单服务通过简朴的方式袒露这些数据。再次重申,表单不肯定要嵌入流程定义,因此这个服务是可选的
- formService.getStartFormKey() // 获取表单key
- formService.getRenderedStartForm() // 查询表单json(无数据)
复制代码 2.RepositiryService
提供了在编辑和发布审批流程的api。紧张是模型管理和流程定义的业务api
这个服务提供了管理与控制摆设(deployments)与流程定义(process definitions)的操作
查询引擎现有的摆设与流程定义。 暂停或激活摆设中的某些流程,或整个摆设。暂停意味着不能再对它进行操作,激活刚好相反,重新使它可以操作。 获取各种资源,比如摆设中保存的文件,
大概引擎主动天生的流程图。 获取POJO版本的流程定义。它可以用Java而不是XML的方式查看流程。
- ## 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() 删除用户流程授权
复制代码 3.RuntimeService
处理正在运行的流程
- runtimeService.createProcessInstanceBuilder().start() 发起流程
- runtimeService.deleteProcessInstance() 删除正在运行的流程
- runtimeService.suspendProcessInstanceById() 挂起流程定义
- runtimeService.activateProcessInstanceById() 激活流程实例
- runtimeService.getVariables(processInstanceId); 获取表单中填写的值
- runtimeService.getActiveActivityIds(processInstanceId)获取以进行的流程图节点 (当前进行到的那个节点的流程图使用)
- runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).changeState(); 终止流程
复制代码 4.HistoryService
在用户发起审批后,会天生流程实例。historyService为处理流程实例的api,但是其中包罗了已完成的和未完成的流程实例; 假如是处理正在运行的流程实例,请使用runtimeService;
袒露Flowable引擎收集的全部汗青数据。当执行流程时,引擎会保存很多数据(可配置),例如流程实例启动时间、谁在执行哪个任务、完成任务淹灭的事件、每个流程实例的执行路径,等等。这个服务紧张提供查询这些数据的能力
- historyService.createHistoricProcessInstanceQuery().list() 查询流程实例列表(历史流程,包括未完成的)
- historyService.createHistoricProcessInstanceQuery().list().foreach().getValue() 可以获取历史中表单的信息
- historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); 根绝id查询流程实例
- historyService.deleteHistoricProcessInstance() 删除历史流程
- historyService.deleteHistoricTaskInstance(taskid); 删除任务实例
- historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).list() 流程实例节点列表 (当前进行到的那个节点的流程图使用)
-
- flowable 有api查看act_hi_varinst里面的数据吗
- historyService.createHistoricVariableInstanceQuery().processInstanceId(instance.getId())
复制代码 5.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() 删除人员任务授权
复制代码 6.ManagementService
紧张是执行自定义命令
- managementService.executeCommand(new classA()) 执行classA的内部方法
- 在自定义的方法中可以使用以下方法获取repositoryService
- ProcessEngineConfiguration processEngineConfiguration =
- CommandContextUtil.getProcessEngineConfiguration(commandContext);
- RepositoryService repositoryService = processEngineConfiguration.getRepositoryService();
- 也可以获得流程定义方法集合
- ProcessEngineConfigurationImpl processEngineConfiguration =
- CommandContextUtil.getProcessEngineConfiguration(commandContext);
- ProcessDefinitionEntityManager processDefinitionEntityManager =
- processEngineConfiguration.getProcessDefinitionEntityManager();
- 如 findById/findLatestProcessDefinitionByKey/findLatestProcessDefinitionByKeyAndTenantId 等。
复制代码 7.IdentityService
用于身份信息获取和保存,这里紧张是获取身份信息
用于管理(创建,更新,删除,查询……)组与用户。请注意,Flowable现实上在运行时并不做任何用户检查。
例如任务可以分派给任何用户,而引擎并不会验证体系中是否存在该用户。这是由于Flowable有时要与LDAP、Active Directory等服务结合使用
- identityService.createUserQuery().userId(userId).singleResult(); 获取审批用户的具体信息
- identityService.createGroupQuery().groupId(groupId).singleResult(); 获取审批组的具体信息
复制代码 8.DynamicBpmnService
可用于修改流程定义中的部分内容,而不需要重新摆设它。例如可以修改流程定义中一个用户任务的办理人设置,大概修改一个服务任务中的类名。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |