要了解Flowable从流程创建到审批过程中涉及的API和MySQL表。之前对工作流引擎有一些基础了解,但具体到Flowable的细节可能不太熟悉。需要先回忆一下Flowable的基本概念,比如流程定义、流程实例、任务、执行实例等,然后逐步思考每个步骤会用到哪些API和数据库表。
首先,流程的创建通常是从部署流程定义开始的。Flowable中部署流程定义可能会使用RepositoryService的createDeployment方法,然后添加BPMN文件,最后部署。对应的数据库表是ACT_RE_DEPLOYMENT和ACT_RE_PROCDEF,分别存储部署信息和流程定义信息。
接下来是启动流程实例,这应该使用RuntimeService的startProcessInstanceByKey或startProcessInstanceById方法。启动后会在ACT_RU_EXECUTION表中创建执行实例,可能还有ACT_RU_TASK表记录任务信息。不过这里可能要看流程的具体结构,如果是用户任务,就会生成任务记录。
然后是任务的处理,用户需要查询任务,可能用TaskService的createTaskQuery来获取任务列表,然后执行taskService.complete(taskId)来完成任务。这时候任务会从ACT_RU_TASK表中删除,流程继续到下一个节点。同时,历史任务信息可能会记录在ACT_HI_TASKINST表中。
审批过程中可能涉及到的用户或用户组,可能涉及IdentityService来管理用户和组的关系,相关的表可能是ACT_ID_USER、ACT_ID_GROUP和ACT_ID_MEMBERSHIP。不过实际中可能很多人不使用Flowable内置的用户表,而是集成自己的系统。
还有历史记录,比如流程实例的历史信息存储在ACT_HI_PROCINST,任务历史在ACT_HI_TASKINST,变量历史在ACT_HI_VARINST等。这些表在流程进行中会记录各种历史数据。
变量管理方面,流程变量可能在运行时存储在ACT_RU_VARIABLE,历史变量在ACT_HI_VARINST。设置变量可能通过RuntimeService或TaskService的setVariable方法。
还有,审批过程中可能需要处理网关、分支、并行流程等,这时候执行实例可能会有父级和子级的关系,涉及ACT_RU_EXECUTION表的结构,比如PARENT_ID_字段。
另外,审批的时候可能会有审批意见,这可能需要用到评论功能,对应的API是TaskService的addComment,数据存在ACT_HI_COMMENT表中。
需要注意的是,Flowable的表都以ACT_开头,后面跟着两部分,第一部分表示表的作用,比如RE表示仓库,RU表示运行时,HI表示历史,ID表示身份。第二部分是具体的用途,比如PROCDEF是流程定义,TASK是任务等。
可能还需要考虑事务和异步任务,比如作业处理,对应的表是ACT_RU_JOB,相关的API是ManagementService。
不过,还有其他细节,比如每个步骤具体涉及哪些表,或者某些API的准确名称。比如流程实例启动后的运行时表,除了ACT_RU_EXECUTION和ACT_RU_TASK,可能还有ACT_RU_IDENTITYLINK来处理任务的候选人或组,或者ACT_RU_VARIABLE存储变量。
还有,流程定义部署后,ACT_GE_BYTEARRAY表存储流程的BPMN和图片资源,部署时上传的文件会被存储在这里。
现在需要把这些步骤和对应的API、表整理清楚,可能需要分步骤列出创建流程、启动实例、任务处理、历史查询等各个阶段用到的API和涉及的表。同时要注意有些表是运行时的,只在流程实例运行期间存在数据,而历史表则会保留记录。
比如,部署流程定义:
API:RepositoryService.createDeployment().addClasspathResource("process.bpmn20.xml").deploy();
涉及的表:ACT_RE_DEPLOYMENT(部署信息),ACT_GE_BYTEARRAY(存储BPMN文件),ACT_RE_PROCDEF(流程定义信息)。
启动流程实例:
API:RuntimeService.startProcessInstanceByKey("processKey");
涉及的表:ACT_RU_EXECUTION(执行实例),ACT_RU_TASK(如果启动后第一个节点是用户任务),ACT_RU_IDENTITYLINK(任务关联的用户或组),ACT_HI_PROCINST(历史流程实例),ACT_HI_ACTINST(历史活动实例)。
查询任务:
API:TaskService.createTaskQuery().taskAssignee("user1").list();
涉及的表:ACT_RU_TASK。
完成任务:
API:taskService.complete(taskId);
涉及的表:ACT_RU_TASK(当前任务被删除),ACT_RU_EXECUTION(可能更新或删除旧的,创建新的执行实例),ACT_HI_TASKINST(记录任务完成),ACT_HI_ACTINST(记录活动完成),ACT_HI_VARINST(如果有变量更新)。
变量处理:
API:runtimeService.setVariable(executionId, "varName", value);
涉及的表:ACT_RU_VARIABLE(运行时变量),ACT_HI_VARINST(历史变量)。
审批意见:
API:taskService.addComment(taskId, processInstanceId, "Approved");
涉及的表:ACT_HI_COMMENT。
身份管理:
API:IdentityService.createUserQuery().userId("user1").singleResult();
涉及的表:ACT_ID_USER,ACT_ID_GROUP,ACT_ID_MEMBERSHIP。
另外,流程结束时,相关的运行时数据会被删除,历史数据保留。
可能还有其他表,比如ACT_RU_EVENT_SUBSCR(事件订阅),ACT_RU_JOBS(定时任务),但这些可能在特定场景下使用。
总结下来,需要按流程的各个步骤,分别列出API和涉及的表,同时区分运行时表和历史表。
以下是Flowable从流程创建到审批全过程中涉及的API及MySQL表的详细说明:
1. 流程定义部署
API:
-
RepositoryService
-
createDeployment()
: 创建部署对象。 -
addClasspathResource("process.bpmn")
: 添加BPMN文件。 -
deploy()
: 执行部署。
-
涉及MySQL表:
-
ACT_RE_DEPLOYMENT:存储部署信息(如部署ID、名称、时间)。
-
ACT_GE_BYTEARRAY:存储流程定义文件(BPMN、PNG)的二进制数据。
-
ACT_RE_PROCDEF:存储流程定义元数据(如Key、版本、流程名)。
2. 启动流程实例
API:
-
RuntimeService
-
startProcessInstanceByKey("processKey")
:按流程Key启动实例。 -
startProcessInstanceById("processDefinitionId")
:按流程定义ID启动实例。
-
涉及MySQL表:
-
ACT_RU_EXECUTION:记录运行中的执行实例(如流程实例、子流程)。
-
ACT_RU_TASK:若启动后首个节点是用户任务,生成任务记录。
-
ACT_HI_PROCINST:历史流程实例信息(开始/结束时间、状态)。
-
ACT_HI_ACTINST:历史活动记录(每个节点执行详情)。
3. 任务处理
API:
-
TaskService
-
createTaskQuery().taskAssignee("user1").list()
:查询用户的任务列表。 -
complete(taskId)
:完成任务并推动流程。 -
claim(taskId, "user1")
:认领任务。 -
addComment(taskId, "Approved")
:添加审批意见。
-
涉及MySQL表:
-
ACT_RU_TASK:运行中的任务信息(名称、处理人、创建时间)。
-
ACT_RU_IDENTITYLINK:任务与用户/组的关联(候选人、候选组)。
-
ACT_HI_TASKINST:历史任务记录(完成时间、处理人)。
-
ACT_HI_COMMENT:存储审批意见(评论内容、时间)。
4. 流程变量管理
API:
-
RuntimeService 或 TaskService
-
setVariable(executionId, "varName", value)
:设置全局变量。 -
getVariable(executionId, "varName")
:获取变量。
-
涉及MySQL表:
-
ACT_RU_VARIABLE:运行时的流程变量。
-
ACT_HI_VARINST:历史变量变更记录。
5. 用户与组管理
API:
-
IdentityService
-
createUserQuery().userId("user1").singleResult()
:查询用户。 -
createGroupQuery().groupName("managers").list()
:查询用户组。
-
涉及MySQL表(可选,通常集成外部系统):
-
ACT_ID_USER:用户信息。
-
ACT_ID_GROUP:用户组信息。
-
ACT_ID_MEMBERSHIP:用户与组的关联关系。
6. 历史数据查询
API:
-
HistoryService
-
createHistoricProcessInstanceQuery()
:查询历史流程实例。 -
createHistoricTaskInstanceQuery()
:查询历史任务。
-
涉及MySQL表:
-
ACT_HI_PROCINST:历史流程实例。
-
ACT_HI_TASKINST:历史任务实例。
-
ACT_HI_ACTINST:历史节点活动记录。
-
ACT_HI_DETAIL:详细历史数据(如表单提交内容)。
7. 其他运行时操作
API:
-
ManagementService:处理异步作业(如定时器)。
-
createJobQuery().list()
:查询待处理作业。
-
-
FormService:处理表单数据(若使用内置表单)。
涉及MySQL表:
-
ACT_RU_JOB:运行中的异步作业(如定时任务)。
-
ACT_RU_EVENT_SUBSCR:事件订阅(如消息事件)。
8. 流程结束
-
流程完成后,运行时数据(
ACT_RU_*
表)被清除,历史数据(ACT_HI_*
表)保留。
关键表分类总结
表前缀 | 用途 | 示例表 |
---|---|---|
ACT_RE_ | 流程定义与部署 | ACT_RE_DEPLOYMENT, ACT_RE_PROCDEF |
ACT_RU_ | 运行时数据 | ACT_RU_TASK, ACT_RU_EXECUTION |
ACT_HI_ | 历史记录 | ACT_HI_PROCINST, ACT_HI_TASKINST |
ACT_ID_ | 身份管理(用户/组) | ACT_ID_USER, ACT_ID_GROUP |
ACT_GE_ | 通用数据(如二进制资源) | ACT_GE_BYTEARRAY |
通过上述API和表的配合,Flowable实现了完整的流程生命周期管理,从部署到审批结束,所有操作均可通过服务API控制,数据持久化到对应的MySQL表中。