导图社区 工作流业务思维导图
这是一篇关于业务与架构的思维导图,主要内容包括:系统管理(管理员),流程管理(管理员),业务中心(用户),任务中心(用户),工作台(用户),白系统5.1.x框架。
编辑于2025-04-16 12:55:37中心主题
主题
主题
主题
需求总结
业务要求
BPMN在线设计器
bpm.js为基础框架实现易用的流程设计
流程动态部署
流程部署后动态修改
流程关联表单
flowable引擎自定义
自定义组织机构
自定义的认证授权
任务回撤
流程回退
会签
动态跳转
配适外部表单设计器
集成外部表单设计器
自定义表单字段(name,key,value)
自定义表单样式(栅格)
显示自定义表单
可拓展表单字段
业务借鉴
参考开源项目业务流程
以满足需求为目的展开调研
流程设计器要满足BPM2.0标准
技术借鉴
开源协议要求:Apache和MIT协议为主
要以Flowable引擎为基础库经行拓展开发
基础能力
与白系统5.1.x兼容
加载本地引擎配置启动
加载本地流程并执行
高阶能力
搭建sas架构工作流引擎
拓展Flowable引擎, 满足自定义需求
参考链接
业务参考
业务与架构
系统管理(管理员)
用户管理
组织机构
菜单管理
数据字典
5.1.x白系统已存在
流程管理(管理员)
表单配置
属性
页面名称
页面代码
页面类型
业务界面(提供给业务回显的界面)
流程界面(我的代办填表时用)
发布状态
功能
表单分类(左侧树)
表单列表
表单查询
名称
类型
业务界面
流程界面
新增/修改
界面布局
布局字段
基础字段
高级字段
字段属性
字段名字
字段标识
流程配置
流程分类(左侧树)
流程列表
发布
版本
流程预览
表单预览
挂起(暂停整个流程定义,阻止基于该定义的新流程实例启动)
激活(挂起的反作用)
复制(实现母版功能)
编辑
删除
每行记录的"操作"列
新增/修改
设计/选择表单
设计/选择流程
基础配置
基本信息
名称/编号
所属分类(自动填写)
图标
排序
权限配置
适用单位(组织机构)
适用范围(流程分类)
流程实例
流程实例列表
启动
挂起(暂停特定的运行中的流程实例)
终止
干预
流程预览
查询
任务管理
查询
列表
详情
评论CRUD
附件CRUD
业务中心(用户)
展示流程(常用业务)
选择流程并发起请求
流程预览
表单填写
提交按钮
修改流程
保存为新流程类型为(自定义流程)
任务中心(用户)
我的代办
查询
详情
办理
驳回
委托
加签/会签
在Flowable工作流中,加签(Add Signer/会签)是一种任务协作机制,指的是在当前任务处理过程中,临时增加其他审批人或处理人参与决策。加签后,原任务会衍生出新的子任务或并行任务,需要所有指定人员(包括原处理人和加签人员)都完成处理,当前任务节点才能继续流转
附加
评论CRUD
附件CRUD
我的已发
详情
我的已办
详情
回显
流程回显
表单回显
审批记录回显
评论回显
附件回显
工作台(用户)
只显示
白系统5.1.x框架
前端
系统管理
用户管理
组织机构
菜单管理
数据字典
后端
身份引擎idm改造
创建 workflow-idm-springboot-starter
表单引擎form改造
创建 workflow-form-springboot-starter
流程
决策
系统管理
用户管理
组织机构
菜单管理
数据字典
流程
客户端
开始
表单
流程参数
人工审批/机器自动化
表单
流程参数
规则引擎/AI
表单
流程参数
人工审批/机器自动化
表单
流程参数
流程流转
表单
流程参数
结束
Flowable数据库设计
表名缩写含义
APP,表示与应用程序相关的表
CMMN,表示与CMMN协议相关的表
CO, content缩写,表示与内容引擎相关的表
DMN,表示与DMN协议相关的表
EVT,EVENT的缩写,表示与事件相关的表
FO,FORM的缩写,表示与表单相关的表
GE,GENERAL的缩写,表示通用表,用于存放流程或业务使用的通用资源数据
ID,IDENTITY的缩写,表示与用户身份认证相关的表
PROCDEF,表示与记录流程定义相关的表
RE,REPOSITORY的缩写,表示流程存储表,用于存放流程的定义、流程的资源等静态信息
RU,RUNTIME的缩写,表示运行时数据的表,用于存放流程执行实例、任务、变量等流程运行过程中产生的数据
HI,HISTORY的缩写,表示历史数据的表,用于存放历史流程实例、变量和任务等历史记录
CHANNEL,表示与泳道相关的表
EV,与FLW_搭配使用,用于存放Liquibase执行记录相关的数据
EVENT,与FLW_搭配使用,用于存放与事件定义相关的数据
表功能
身份数据表
ACT_ID_USER表即用户表
ACT_ID_INFO表即用户信息扩展表
ACT_ID_GROUP表即用户组表,其字段如表4.8所示。该表主要用于存储用户组数据
ACT_ID_MEMBERSHIP表即用户与用户组关系表
ACT_ID_PRIV表即权限表
ACT_ID_PRIV_MAPPING 用于存储用户或用户组与权限的关系
ACT_ID_PROPERTY表即用户或用户组的属性扩展表
ACT_ID_TOKEN表即用户访问记录表
ACT_ID_BYTEARRAY表即用户或用户组的二进制资源表
通用数据表
ACT_GE_BYTEARRAY 资源表
ACT_GE_BYTEARRAY资源表用于存储与工作流引擎相关的资源数据,Flowable使用该资源表保存流程定义文件内容、流程图片内容和序列化流程变量等二进制数据
ACT_GE_PROPERTY 属性表
流程存储表
ACT_RE_MODEL 流程设计模型表
ACT_RE_DEPLOYMENT 部署信息表
ACT_RE_PROCDEF 流程定义数据表
运行时数据表
运行时数据表指Flowable中以ACT_RU_开头的表,用于存储流程执行实例、任务、变量等流程运行过程中产生的数据
ACT_RU_EXECUTION 表即运行时流程执行实例表
ACT_RU_ACTINST 表即运行时活动实例表
ACT_RU_TASK 表即运行时任务实例表
ACT_RU_VARIABLE 用于存储流程运行中的变量,包括流程实例变量、执行实例变量和任务实例变量
ACT_RU_ENTITYLINK 用于存储实例的父子关系。例如,当流程实例启动子流程实例后,则在此表中存储实体之间的关系,这样可以轻松查询
ACT_RU_IDENTITYLINK 表即运行时流程与身份关系表
ACT_RU_JOB 表主要用于存储Flowable正在执行的异步任务数据
ACT_RU_DEADLETTER_JOB 用于存储Flowable无法执行的异步任务数据
ACT_RU_SUSPENDED_JOB 用于存储Flowable中断的异步任务数据
ACT_RU_TIMER_JOB 主要用于存储流程运行时的定时器任务数据。流程执行到中间定时器事件节点或带有边界定时器事件的节点时,会生成一个定时器任务,并将相关数据存储到该表中
ACT_RU_HISTORY_JOB Flowable可以使用历史作业执行器异步持久化历史数据,该表主要用于记录异步历史作业
ACT_RU_EXTERNAL_JOB 流程执行外部工作任务时,会在该表插入相应的记录
ACT_RU_EVENT_SUBSCR 用于存储流程运行时的事件订阅。流程执行到事件节点时,会在该表插入事件订阅,这些事件订阅决定事件的触发
历史数据表
ACT_HI_PROCINST 用于存储历史流程实例。流程启动后,保存ACT_RU_EXECUTIO 表的同时,会将流程实例写入ACT_HI_PROCINST表
ACT_HI_ACTINST 用于存储历史节点实例数据、记录所有流程活动实例。通过该表可以追踪最完整的流程信 息
ACT_HI_TASKINST 表用于存储历史任务实例数据。当流程执行到某个用户任务节点时,就会向该表中写入历史任务数据
ACT_HI_DETAIL 表该表主要用于存储流程执行过程中的明细数据。默认情况下,Flowable不保存流程明细数据,除非将工作流引擎的历史数据配置为full
ACT_HI_VARINST 该表主要用于存储历史流程的变量信息
ACT_HI_IDENTITYLINK 表即历史流程与身份关系表,该表主要用于存储历史流程实例、任务实例与参与者之间的关联关系
ACT_HI_COMMENT表即历史评论表,该表主要用于存储通过TaskService添加的评论记录
ACT_HI_ATTACHMENT表即历史附件表, 该表主要用于存储通过任务服务TaskService添加的附件记录
ACT_HI_ENTITYLINK表即历史实体关系表,该表主要用于存储历史的实例的父子关系
Flowable数据库乐观锁
Flowable基于数据库乐观锁机制解决并发问题。 在Flowable数据表中每张表都存在一个字段REV_,该字段用于实现乐观锁。 下面以多线程同时操ACT_RU_VARIABLE表中的同一个变量为例,详细说明Flowable乐观锁的实现过程。 假设两个线程A和B同时对一个ID为varId的变量进行更新操作,则有如下过程。 (1)A线程拿到变量varId相关数据,此时字段REV_的值为1。 (2)B线程也拿到变量varId相关数据,此时字段REV_的值也为1。 (3)A线程更新变量,更新ID为varId变量时,将REV_的值更新为2。 (4)这时B线程再执行更新变量varId的操作,已无法找到ID为varId且REV_值为1的记录。此时,数据库update操作返回受影响的行数为0,Flowable抛出异常 FlowableOptimisticLockingException。 (5)B线程执行的事务回滚。
Flowable引擎工作流程
引擎启动
resource目录下flowable.cfg.xml文件
依赖flowable-Springboot-starter时可不用flowable.cfg.xml文件
流程设计
表单设计
流程设计
生成: xxxxxx.bpmn20.xml 流程文件
生成: 模型属性
调用后端流程模型保存接口
流程部署
创建流程基本信息数据: ACT_RE_PROCDEF
创建流程资源数据(文件bpmn和.png文件):ACT_GE_BYTEARRAY
流程启动
在Flowable中每启动一个流程就会创建一个流程实例, 每个流程实例至少会有一个执行实例。 当流程执行过程中遇到并行分支或多实例任务时,就会生成多个 执行实例。 流程实例是业务流程的全局实例,执行实例是其内部的执行路径。 流程实例启动时生成根执行实例,分支时生成子执行实例。
创建流程实例数据:ACT_HI_PROCINST (主表)
流程实例节点:ACT_HI_ACTINST
流程实例任务:ACT_HI_TASKINST
流程实例变量:ACT_HI_VARINST
通过PROC_INST_ID_字段与 ACT_HI_PROCINST表的ID_字段关联
创建执行实例数据:ACT_RU_EXECUTION
增加主实例记录
增加子实例记录
流程每执行一步操作, 都会更新子执行实例来表明当前流程的执行进度
创建-执行实例的任务:ACT_RU_TASK
任务处理
引擎服务
RepositoryService: 提供流程部署和流程定义的操作方法,如流程定义的挂起、激活等
流程模型相关操作:包括对模型的新建、保存、删除等,主要操作流程模型表ACT_RE_MODEL
流程定义相关操作:包括对流程定义的查询、挂起、激活等,主要操作流程定义表ACT_RE_PROCDEF
流程部署相关操作:包括对部署记录的创建、删除、查询等,主要操作部署记录表ACT_RE_ DEPLOYMENT
流程与发起人关系管理操作:包括对候选人和候选组的新增、删除、查询等,主要操作流程人员关系表ACT_HI_IDENTITYLINK
概要
装换过程
流程模型
部署
流程定义
启动
流程实例
挂起
挂起的作用 1. 流程维护与管理 系统维护:在系统升级或维护时暂时停止业务流程 流程缺陷修复:当发现流程设计存在问题时阻止新实例启动 版本控制:旧版本流程下线时挂起,同时部署新版本 2. 业务场景控制 季节性业务:季节性业务流程在非季节期间挂起 政策调整:当外部政策变化需要临时停止某些业务流程时 异常处理:当出现异常情况需要暂停某些流程进行调查时 3. 资源优化 减少无效流程实例占用系统资源 避免在系统高负载时产生新实例 挂起状态的特点 对流程定义挂起: 无法启动新的流程实例 已存在的流程实例继续运行(除非也被挂起) 定时启动器不会触发新实例 对流程实例挂起: 当前任务不可见/不可操作 定时器暂停 异步操作暂停 历史记录仍可查询
流程定义级别挂起:暂停整个流程定义,阻止基于该定义的新流程实例启动
流程实例级别挂起:暂停特定的运行中的流程实例
激活(挂起的反作用)
RuntimeService: 提供运行时流程实例的操作方法,如流程实例的发起、流程变量的设置等
通过创建ProcessInstanceBuilder对象后发起流程实例
通过流程定义key发起流程实例
通过流程定义ID发起流程实例
通过消息名称发起流程实例
概要
通过消息发起流程实例,要求流程的开始事件为启动消息 事件,如果启动事件为空,则只能通过流程定义ID或者流程定义key发起流程
流程等待: 当流程进入下一个节点需要被触发才能执行时, 流程就会进入等待状态
流程唤醒: 调用API强制越过等待的节点进入下一个节点
@Slf4j public class RunDemo6 extends FlowableEngineUtil { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); @Test public void runDemo6() { //初始化工作流引擎 loadFlowableConfigAndInitEngine("flowable.cfg.xml"); //部署流程 ProcessDefinition procDef = deployByClasspathResource("processes/SimpleProcess2.bpmn20.xml"); //根据流程定义ID发起流程 ProcessInstance procInst = runtimeService .startProcessInstanceById(procDef.getId()); log.info("流程实例的ID为:{}", procInst.getId()); //查询第一个任务 Task firstTask = taskService.createTaskQuery() .processInstanceId(procInst.getId()).singleResult(); log.info("第一个任务ID为:{},任务名称为:{}", firstTask.getId(), firstTask.getName()); taskService.setAssignee(firstTask.getId(), "huhaiqin"); //完成第一个任务 taskService.complete(firstTask.getId()); log.info("第一个任务办理完成!"); Execution execution = runtimeService.createExecutionQuery() .processInstanceId(procInst.getId()).onlyChildExecutions() .singleResult(); log.info("当前执行实例ID为:{}", execution.getId()); runtimeService.trigger(execution.getId()); log.info("触发机器节点,继续流转!"); //查询流程执行历史 HistoricProcessInstance hisProcInst = historyService .createHistoricProcessInstanceQuery() .processInstanceId(procInst.getId()) .singleResult(); log.info("流程实例开始时间为:{},结束时间为:{}", dateFormat.format(hisProcInst.getStartTime()), dateFormat.format(hisProcInst.getEndTime())); } }
发起流程实例
@Slf4j public class RunDemo5 extends FlowableEngineUtil { @Test public void runDemo5() { //初始化工作流引擎 loadFlowableConfigAndInitEngine("flowable.cfg.xml"); //部署流程 ProcessDefinition procDef = deployByClasspathResource("processes/SimpleProcess.bpmn20.xml"); //根据流程定义ID发起流程 ProcessInstance procInst1 = runtimeService .startProcessInstanceById(procDef.getId()); queryProcessInstance(procInst1.getId()); //根据流程定义key发起流程 ProcessInstance procInst2 = runtimeService.createProcessInstanceBuilder() .processDefinitionKey(procDef.getKey()) .name("SimpleProcessInstance") .start(); queryProcessInstance(procInst2.getId()); } private void queryProcessInstance(String procInstId) { ProcessInstance procInst = runtimeService.createProcessInstanceQuery() .processInstanceId(procInstId) .singleResult(); log.info("流程实例ID为:{},流程定义ID为:{},流程实例名称为:{}", procInst.getId(), procInst.getProcessDefinitionId(), procInst.getName() ); } }
DeploymentBuilder
子主题
子主题
TaskService: 提供运行时流程任务的操作方法,如任务的创建、办理、指派、认领和删除等
任务实例的创建、保存、查询、删除等,主要操作运行时任务表ACT_RU_TASK
任务权限相关操作,主要指任务和人员之间的关系管理,可以设置办理人、候选人、候选组,以及其他类型的关系,主要操作运行时身份关系表 ACT_RU_IDENTITYLINK
任务办理相关操作,包括认领、委托、办理等
变量管理相关操作,包括变量的新增、删除、查询等,主要操作运行时变量表ACT_RU_ VARIABLE
任务评论管理相关操作,包括任务评论的新增、删除、查询等,主要操作评论表ACT_HI_COMMENT
权限控制
一般在实际应用中,都需要对任务办理人权限进行控制。 某些任务可以指定由某人专门进行办理; 某些任务可以指定仅有某几人可以办理; 某些任务,任务办理人还可以委托他人进行办理.
@Test void processTest2() { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); @Test public void runDemo8() { //初始化工作流引擎 loadFlowableConfigAndInitEngine("flowable.cfg.xml"); //部署流程定义 ProcessDefinition procDef = deployByClasspathResource("processes/SimpleProcess.bpmn20.xml"); //根据流程定义ID发起流程 ProcessInstance procInst = runtimeService .startProcessInstanceById(procDef.getId()); log.info("发起了一个流程实例,流程实例ID为:{}", procInst.getId()); //查询第一个任务 Task firstTask = taskService.createTaskQuery() .processInstanceId(procInst.getId()).singleResult(); log.info("第一个任务ID为:{},任务名称为:{}", firstTask.getId(), firstTask.getName()); //完成第一个任务 taskService.complete(firstTask.getId()); log.info("第一个任务办理完成!没有进行权限控制"); //查询第二个任务 Task secondTask = taskService.createTaskQuery() .processInstanceId(procInst.getId()).singleResult(); log.info("第二个任务ID为:{},任务名称为:{}", secondTask.getId(), secondTask.getName()); //设置任务与人员的关系 taskService.addCandidateUser(secondTask.getId(), "hebo"); taskService.addCandidateUser(secondTask.getId(), "liuxiaopeng"); taskService.addUserIdentityLink(secondTask.getId(), "wangjunlin", "participant"); //办理任务 MyTaskService myTaskService = new MyTaskService(taskService); myTaskService.complete(secondTask.getId(), "huhaiqin"); myTaskService.complete(secondTask.getId(), "wangjunlin"); myTaskService.complete(secondTask.getId(), "liuxiaopeng"); myTaskService.complete(secondTask.getId(), "hebo"); //因为流程已结束,所以只能通过历史服务来获取任务实例 log.info("查询ID为{}的流程实例中任务办理情况", procInst.getId()); List<HistoricTaskInstance> hisTaskInsts = historyService .createHistoricTaskInstanceQuery() .processInstanceId(procInst.getId()) .orderByHistoricTaskInstanceStartTime().asc() .list(); for (HistoricTaskInstance hisTaskInst : hisTaskInsts) { log.info("ID为{}的任务的办理人为{},开始时间{},结束时间{}", hisTaskInst.getId(), hisTaskInst.getAssignee(), dateFormat.format(hisTaskInst.getCreateTime()), dateFormat.format(hisTaskInst.getEndTime()) ); } } }
当一个任务指派给一组人都可以执行时. 要先认领任务, 在完成任务.
评论和附件
Flowable可以针对流程实例或任务实例添加评论和附件。 评论数据存储在ACT_HI_COMMENT表中, 附件数据存储在ACT_HI_ATTACHMENT和ACT_GE_BYTEARRAY表中。 评论和附件相关的接口都由TaskService提供
HistoryService: 提供历史流程数据的操作方法,如历史流程实例、历史变量、历史任务的查询等
创建历史流程实例、历史活动实例、历史任务实例、历史详情、历史变量等对象的查询
创建历史流程实例、历史活动实例、历史任务实例、历史详情、历史变量等对象的原生查询,支持传入SQL
删除历史流程实例、历史任务实例
查询与历史流程实例、任务实例关联的用户
示例
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); @Test public void runDemo9() { //初始化工作流引擎 loadFlowableConfigAndInitEngine("flowable.cfg.xml"); //部署流程 ProcessDefinition procDef = deployByClasspathResource("processes/SimpleProcess.bpmn20.xml"); //启动3个流程实例 String businessKeyPrefix = "code_"; ProcessInstance procInst1 = runtimeService .startProcessInstanceById(procDef.getId(), businessKeyPrefix + 1); ProcessInstance procInst2 = runtimeService .startProcessInstanceById(procDef.getId(), businessKeyPrefix + 2); ProcessInstance procInst3 = runtimeService .startProcessInstanceById(procDef.getId(), businessKeyPrefix + 3); //查询历史流程实例 List<HistoricProcessInstance> hisProcInsts = historyService .createNativeHistoricProcessInstanceQuery() .sql("select * from ACT_HI_PROCINST where BUSINESS_KEY_ like concat(#{prefix}, '%')") .parameter("prefix", businessKeyPrefix) .list(); for (HistoricProcessInstance hisProcInst : hisProcInsts) { log.info("流程实例ID为:{},业务主键:{},创建时间:{}", hisProcInst.getId(), hisProcInst.getBusinessKey(), dateFormat.format(hisProcInst.getStartTime()) ); } }
ManagementService: 提供对工作流引擎进行管理和维护的方法,如数据库表数据、表元数据的查询和执行命令
管理服务接口ManagementService主要提供数据表和表元数据的管理和查询服务。 另外,它还提供了查询和管理异步任务的功能。 Flowable异步任务应用很广,如定时器、异步操作、延迟暂停、激活等
元数据查询示例代码
@Test public void runDemo10() { //初始化工作流引擎 loadFlowableConfigAndInitEngine("flowable.cfg.xml"); //获取数据表的记录数量 Map<String, Long> tableCount = managementService.getTableCount(); for (Map.Entry<String, Long> entry : tableCount.entrySet()) { log.info("表{}的记录数为{}", entry.getKey(), entry.getValue()); } //获取数据表的名称及元数据 String tableName = managementService .getTableName(HistoricProcessInstanceEntity.class); log.info("HistoricProcessInstanceEntity对应的表名为:{}", tableName); TableMetaData tableMetaData = managementService.getTableMetaData(tableName); List<String> columnNames = tableMetaData.getColumnNames(); log.info("字段分别为:" + String.join(",", columnNames)); //获取表的分页查询对象 TablePage tablePage = managementService.createTablePageQuery() .tableName(tableName).orderAsc("START_TIME_").listPage(1, 10); log.info("{}的记录数为{}", tableName, tablePage.getTotal()); }
Flowable中的定时器中间事件、定时器边界事件等都会产生异步任务。 Flowable提供了6个用于存储异步任务的表。
运行时异步任务存储在 ACT_RU_JOB表
定时器任务存储在 ACT_RU_TIMER_JOB表
定时中断任务存储在ACT_RU_SUSPENDED_JOB表
不可执行任务存储在 ACT_RU_DEADLETTER_JOB表
异步历史任务存储在ACT_RU_HISTORY_JOB表
外部任务存储在ACT_RU_EXTERNAL_JOB表
ManagementService 异常栈查询
getJobExceptionStacktrace() : 运行任务异常
getTimerJobExceptionStacktrace() : 定时器任务异常
getSuspendedJob ExceptionStacktrace() : 挂起任务异常
getDeadLetterJobExceptionStacktrace() : 不可执行任务异常
创建流程实例例子
@Data class FlowableEngineUtil { //工作流引擎配置 protected ProcessEngineConfigurationImpl processEngineConfiguration; //工作流引擎 protected ProcessEngine engine; //流程存储服务 protected RepositoryService repositoryService; //运行时服务 protected RuntimeService runtimeService; //任务服务 protected TaskService taskService; //历史服务 protected HistoryService historyService; //管理服务 protected ManagementService managementService; //身份服务 protected IdentityService identityService; /** * 初始化工作流引擎及各种服务 * * @param resource FLowable配置文件 */ public void loadFlowableConfigAndInitEngine(String resource) { //创建工作流引擎配置 this.processEngineConfiguration = (ProcessEngineConfigurationImpl) ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource); //创建工作流引擎 this.engine = processEngineConfiguration.buildProcessEngine(); //获取流程存储服务 this.repositoryService = engine.getRepositoryService(); //获取运行时服务 this.runtimeService = engine.getRuntimeService(); //获取任务服务 this.taskService = engine.getTaskService(); //获取历史服务 this.historyService = engine.getHistoryService(); //获取管理服务 this.managementService = engine.getManagementService(); //获取身份服务 this.identityService = engine.getIdentityService(); } /** * 部署单个流程 * * @param resource 单个流程XML文件地址 * @return */ public ProcessDefinition deployByClasspathResource(String resource) { //部署流程 Deployment deployment = repositoryService.createDeployment() .addClasspathResource(resource).deploy(); //查询流程定义 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .deploymentId(deployment.getId()).singleResult(); return processDefinition; } /** * 部署多个流程 * * @param resources 多个流程XML文件地址 * @return */ public ProcessDefinition deployByClasspathResource(String... resources) { DeploymentBuilder deploymentBuilder = repositoryService.createDeployment(); //部署流程 for (String resource : resources) { deploymentBuilder.addClasspathResource(resource); } Deployment deployment = deploymentBuilder.deploy(); //查询流程定义 ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .deploymentId(deployment.getId()).singleResult(); return processDefinition; } /** * 关闭工作流引擎 */ @After public void closeEngine() { engine.close(); } }
IdentityService: 提供用户或者组的操作方法,如用户的增、删、改、查等
IdentityService 接口提供了用户相关方法
FormService: 提供流程表单的操作方法,如表单获取、表单保存等。
DynamicBpmnService: 提供流程定义的动态修改方法,从而避免重新部署它。
ProcessMigrationService: 用于支持流程实例的迁移和升级。
//加载工作流引擎配置 ProcessEngineConfiguration configuration = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource("flowable.cfg.xml"); //创建ProcessEngine对象 ProcessEngine processEngine = configuration.buildProcessEngine(); //获取存储服务RepositoryService RepositoryService repositoryService = processEngine.getRepositoryService(); //获取运行时服务RuntimeService RuntimeService runtimeService = processEngine.getRuntimeService(); //获取任务服务TaskService TaskService taskService = processEngine.getTaskService(); //获取历史服务HistoryService HistoryService historyService = processEngine.getHistoryService(); //获取表单服务FormService FormService formService= processEngine.getFormService(); //获取身份服务IdentityService IdentityService identityService = processEngine.getIdentityService(); //获取管理服务ManagementService ManagementService managementService = processEngine.getManagementService(); //获取动态BPMN服务DynamicBpmnService DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService(); //获取流程迁移服务ProcessMigrationService ProcessMigrationService processMigrationService = processEngine.getProcessMigrationService();
获得ProcessEngine引擎实例就可以获得所有的服务实例