Define
- Task 任务
- Execute 执行实例
- Process Instance * Multi 流程实例
- Boundary Event 边界事件 (StartEvent/EndEvent)
- Event Gateway 事件网关
- Process Define 流程定义
- deadletter_job job: 任务; 指责; deadletter: 形同虚设的协议; 空文; 死信;
Expose API
domain - dao - service
熟悉表可以直接调用, 但调用 activiti 更简便
-
ProcessEngines.getDefaultProcessEngine();
- activiti.cfg.xml -> ProcessEngineConfiguration 得到 ProcessEngine
- Impl: StandaloneProcessengineConfiguration
- DataSource:
- jdbc: jdbcDriver, ~Url, ~Username, ~Password
- dataSource
- databaseSchemaUpdate
- SpringProcessEngineConfiguration
- activiti.cfg.xml -> ProcessEngineConfiguration 得到 ProcessEngine
-
ProcessEngineConfiguration#buildProcessEngine
-
ProcessEngine 流程引擎
- [re]RepositoryService 部署
- [ru]RuntimeService 可获取流程执行相关信息
- [ru|hi]TaskService 获取任务信息
- [hi]HistoryService
- ManagementService 引擎管理, Activiti 日常维护
- IdentityService*
- FormService*
*注: 已被Activiti7删除
25 Tables
- act
- evt
- procdef 流程定义
- ge general 一般数据, 流程资源、通用定义、系统属性
- hi 历史 流程实例、任务实例、流程附件的历史, 运行中的变量信息 | 拿出来分析/查找
- re repository 部署单元信息、已部署的流程定义的内容、模型、及其所需静态资源
- ru runtime 运行时流程实例、任务、变量、运行所需数据, id: 用户关系信息, 结束后会删除
4 + 2 类
Symbol (BPMN2.0)
Business Process Management Initiative 非盈利机构
BPMN: Business Process Model and Notation, 业务流程建模和标注 (Notation 是 BPMN 的核心, 用图形表达)
- 3 类符号: Event 事件 Activity/Action 活动 Gateway 网关
- Event
- 开始事件(薄圆圈)
- 中间事件Intermediate_Event(双层圆圈)
- 结束事件(厚圆圈)
- Activity
- UserTask
- ServiceTask
- SubProcess
- Gateway
- 排他网关 x (need 条件顺序流; default顺序流, 都不满足会执行)
- 并行网关 + (fork-join两类)
- 包容网关 +
- 综合网关
- 事件网关 +
- Flow 流向
- 顺序流Sequence_Flow(实线)
- 消息流Message_Flow(虚线空心箭头)
- 关联Association(虚线)
- 数据关联Data_Association(虚线开口箭头)
Usage
- 定义流程
- 流程部署
- 启用流程: 使用java代码, 操作数据库表内容
定义流程
- 使用设计器, 利用流程符号
- 画出流程图 (bpmn、png/svg)
部署流程 (repositoryService)
- 上传到数据库中, 利用java代码来进行流程部署
- 一次部署
- act_re_deployment 会生成一条记录
- act_re_procdef 生成流程定义信息
- deployment: procdef = 1: n (每条记录对应流程定义信息, 3人审批变为4人审批, 类似多版本)
Deployment deploy = repositoryService.createDeployment()
.name("evection")
.addClasspathResource("bpm/evection.bpmn")
.addClasspathResource("bpm/evection.png").deploy();
deploy.getId();
deploy.getName();
// 改进
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("bpm/evection.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Deployment deploy = repositoryService.createDeployment().name("process-one.bar").addZipInputStream(zipInputStream).deploy();
act_re_deployment # 部署表, 每次部署都会新增
act_re_procdef # 流程定义
act_ge_bytearray # 流程资源表(bpmn文件、svg文件)
act_ge_property # update dbid 系统相关
开启流程实例 (taskService)
act_ge_property # update dbid 系统相关
act_hi_actinst # (流程实例执行)历史活动节点表 historic-activity-instances: taskId actType startTime endTime
act_hi_identitylink # 流程参与者的历史信息
act_hi_procinst # 流程实例 历史信息
act_hi_taskinst # 任务 历史信息
act_ru_execution # 执行实例的信息
act_ru_identitylink # 流程参与者信息 (当前任务是由谁来负责做)
act_ru_task # 任务信息 (运行时的任务)
查询个人待执行的任务 (taskService)
List<Task> taskList = taskService.createTaskQuery().processDefinitionKey("myEvection").taskAssignee("zhangsan").list()
for task in taskList:
print(
task.getProcessInstanceId(),
task.getId(),
task.getAssignee(),
task.getName()
)
# act_ge_property
act_ru_task inner join act_re_procdef
完成任务 (taskService)
act_ru_task -> act_hi_taskinst (先存hi, 再存ru表)
taskService.complete("2505")
// 改进
Task task = taskService.createTaskQuery().processDefinitionKey("myEvection").taskAssignee("zhangsan").singleResult();
taskService.complete(task.getId());
act_ge_property
act_ru_task where id_ = '2505'
act_re_procdef where id_ = 'myEvention:1:4' -- 复合id
act_re_deployment where id_
act_ge_bytearray where deployment_id_
act_re_procdef deployment_id_ and key_ and (tenant_id_ = '' or tenant_id_ is null)
-- update act_ge_property set rev_ =
insert into act_hi_taskinst
insert into act_hi_actinst
insert into act_hi_identitylink
insert into act_ru_task
insert into act_ru_identitylink
update act_hi_taskinst
update act_ru_execution
update act_hi_actinst
delete from act_ru_task where id_ and rev_
查询流程定义
删除流程定义
act_ge_bytearray
act_re_deployment
act_re_procdef
act_ge_property update