1、创建ProcessEngine
ProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:mysql://192.168.209.102:3306/flowable-demo?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
.setJdbcDriver("com.mysql.cj.jdbc.Driver")
.setJdbcUsername("root")
.setJdbcPassword("2O18@qrv")
// 如果数据库中的表结构不存在就新建
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 通过ProcessEngineConfiguration构建我们的ProcessEngine
processEngine = configuration.buildProcessEngine();
2、发布流程
2.1、java代码
// 获取repositoryService对象
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
// 关联要部署的流程文件
.addClasspathResource("holiday-request.bpmn20.xml")
.name("请假流程")
.deploy();
log.info("deploymentId:{}", deployment.getId());
log.info("deploymentName:{}", deployment.getName());
2.2、数据库表流向
# 1、查ACT_RE_PROCDEF表
select *
from ACT_RE_PROCDEF
where KEY_ = 'holidayRequest'
and (
TENANT_ID_ = ''
or TENANT_ID_ is null
)
and DERIVED_FROM_ is null
and VERSION_ = (select max(VERSION_)
from ACT_RE_PROCDEF
where KEY_ = 'holidayRequest'
and (
TENANT_ID_ = ''
or TENANT_ID_ is null
));
# 2、查ACT_RU_TIMER_JOB表
select J.*
from ACT_RU_TIMER_JOB J
inner join
ACT_RE_PROCDEF P
on J.PROC_DEF_ID_ = P.ID_
where J.HANDLER_TYPE_ = 'timer-start-event'
and P.KEY_ = 'holidayRequest'
and (
P.TENANT_ID_ = ''
or P.TENANT_ID_ is null
);
# 3、查ACT_PROCDEF_INFO表
select *
from ACT_PROCDEF_INFO
where PROC_DEF_ID_ = 'holidayRequest:1:3';
# 4、插入数据ACT_RE_PROCDEF
insert
into ACT_RE_PROCDEF
(ID_, REV_, CATEGORY_, NAME_, KEY_, VERSION_, DEPLOYMENT_ID_, RESOURCE_NAME_, DGRM_RESOURCE_NAME_, DESCRIPTION_,
HAS_START_FORM_KEY_, HAS_GRAPHICAL_NOTATION_, SUSPENSION_STATE_, DERIVED_FROM_, DERIVED_FROM_ROOT_, DERIVED_VERSION_,
TENANT_ID_, ENGINE_VERSION_)
values ('holidayRequest:1:3', 1, 'http://www.flowable.org/processdef', '请假流程', 'holidayRequest', 1, '1',
'holiday-request.bpmn20.xml', null, null, false, false, 1, null, null, 0, '', null);
# 5、插入数据ACT_GE_BYTEARRAY
insert
into ACT_GE_BYTEARRAY
(ID_, REV_, NAME_, BYTES_, DEPLOYMENT_ID_, GENERATED_)
values ('2', 1, 'holiday-request.bpmn20.xml', 'java.io.ByteArrayInputStream@3fabf088', '1', false);
3、获取流程定义信息
3.1、java代码
// 获取查询器
ProcessDefinitionQuery processDefinitionQuery = processEngine.getRepositoryService().createProcessDefinitionQuery();
ProcessDefinition processDefinition = processDefinitionQuery
// 设置需要查询流程id
.deploymentId("1")
// 响应一条结果
.singleResult();
log.info("id:{}", processDefinition.getId());
log.info("deploymentId:{}", processDefinition.getDeploymentId());
log.info("name:{}", processDefinition.getName());
log.info("description:{}", processDefinition.getDescription());
3.2、数据库表流向
# 查询ACT_RE_PROCDEF
select distinct RES.*
from ACT_RE_PROCDEF RES
WHERE RES.DEPLOYMENT_ID_ = '1'
order by RES.ID_ asc;
3、删除部署的流程
3.1、java代码
RepositoryService repositoryService = processEngine.getRepositoryService();
// 删除部署的流程,如果部署的流程启动了 就不能删除了
repositoryService.deleteDeployment("1");
// // 删除部署的流程,如果部署的流程启动了 也可以删除了,相关的流程任务也会被删除
// repositoryService.deleteDeployment("1", true);
3.2、数据库表流向
# 1、查询ACT_RE_DEPLOYMENT
select *
from ACT_RE_DEPLOYMENT
where ID_ = '1';
# 2、查询 ACT_RE_PROCDEF
select distinct RES.*
from ACT_RE_PROCDEF RES
WHERE RES.DEPLOYMENT_ID_ = '1'
order by RES.ID_ asc;
# 3、查询 ACT_RE_MODEL
select distinct RES.*
from ACT_RE_MODEL RES
WHERE RES.DEPLOYMENT_ID_ = '1'
order by RES.ID_ asc;
# 4、查询 ACT_PROCDEF_INFO
select *
from ACT_PROCDEF_INFO
where PROC_DEF_ID_ = 'holidayRequest:1:3';
# 5、查询 ACT_RU_TIMER_JOB
select J.*
from ACT_RU_TIMER_JOB J
where J.HANDLER_TYPE_ = 'timer-start-event'
and J.PROC_DEF_ID_ = 'holidayRequest:1:3';
# 6、查询 ACT_RE_PROCDEF
select *
from ACT_RE_PROCDEF
where KEY_ = 'holidayRequest'
and (
TENANT_ID_ = ''
or TENANT_ID_ is null
)
and DERIVED_FROM_ is null
and VERSION_ = (select max(VERSION_)
from ACT_RE_PROCDEF
where KEY_ = 'holidayRequest'
and (
TENANT_ID_ = ''
or TENANT_ID_ is null
));
# 7、查询 ACT_RE_PROCDEF
select distinct RES.*
from ACT_RE_PROCDEF RES
WHERE RES.KEY_ = 'holidayRequest'
and RES.VERSION_ < 1
and (
RES.TENANT_ID_ = ''
or RES.TENANT_ID_ is null
)
order by RES.VERSION_ desc LIMIT 1
OFFSET 0;
# 8、删除ACT_GE_BYTEARRAY记录
delete
from ACT_GE_BYTEARRAY
where DEPLOYMENT_ID_ = '1';
# 9、删除ACT_RE_DEPLOYMENT记录
delete
from ACT_RE_DEPLOYMENT
where ID_ = '1';
# 10、删除ACT_RU_EVENT_SUBSCR记录
delete
from ACT_RU_EVENT_SUBSCR
where PROC_DEF_ID_ = 'holidayRequest:1:3'
and EXECUTION_ID_ is null
and PROC_INST_ID_ is null;
# 11、删除ACT_RU_IDENTITYLINK记录
delete
from ACT_RU_IDENTITYLINK
where PROC_DEF_ID_ = 'holidayRequest:1:3';
# 12、删除ACT_RE_PROCDEF记录
delete
from ACT_RE_PROCDEF
where DEPLOYMENT_ID_ = '1';
4、启动流程实例
4.1、java代码
// 通过RuntimeService来启动流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
// 构建流程变量(表单信息)
Map<String, Object> variables = new HashMap<>();
variables.put("employee", "张三");
variables.put("nrOfHolidays", 3);
variables.put("description", "请假去做大宝剑");
// 启动流程
ProcessInstance holidayRequest = runtimeService.startProcessInstanceByKey("holidayRequest", variables);
log.info("holidayRequest.getId:{}", holidayRequest.getId());
log.info("holidayRequest.getActivityId:{}", holidayRequest.getActivityId());
log.info("holidayRequest.getProcessDefinitionKey:{}", holidayRequest.getProcessDefinitionKey());
log.info("holidayRequest.getProcessDefinitionId:{}", holidayRequest.getProcessDefinitionId());
log.info("holidayRequest.getProcessVariables:{}", holidayRequest.getProcessVariables());
4.2、数据库表流向
# 1、ACT_RE_PROCDEF
select *
from ACT_RE_PROCDEF
where KEY_ = 'holidayRequest'
and (
TENANT_ID_ = ''
or TENANT_ID_ is null
)
and DERIVED_FROM_ is null
and VERSION_ = (select max(VERSION_)
from ACT_RE_PROCDEF
where KEY_ = 'holidayRequest'
and (
TENANT_ID_ = ''
or TENANT_ID_ is null
));
# 2、
# 2、
# 2、
# 2、
# 2、
# 2、
4、启动流程实例
4.1、java代码
RepositoryService repositoryService = processEngine.getRepositoryService();
// 删除部署的流程,如果部署的流程启动了 就不能删除了
repositoryService.deleteDeployment("1");
// // 删除部署的流程,如果部署的流程启动了 也可以删除了,相关的流程任务也会被删除
// repositoryService.deleteDeployment("1", true);
4.2、数据库表流向