历史数据管理和流程引擎管理
1 历史数据管理
1.1 历史流程实例查询
使用HistoryService的createHistoricProcessInstanceQuery方法可以得到HistoricProcessInstanceQuery对象,该对象主要用户流程实例的历史数据查询,流程实例的历史数据保存在ACT_HI_PROCINST表中,不管流程是否完成,只要创建了流程实例,流程实例的数据均会被保存到ACT_HI_PROCINST表
//查询已完成的流程
List<HistoricProcessInstance> datas = histroyService.createHistoricProcessInstanceQuery().finished().list();
//根据流程id查询
datas = historyService.createHistoricProcessInstanceQuery().processDefintionId(define.getId()).list();
//根据流程定义key查询
datas = historyService.createHistoricProcessInstanceQuery().processDefinitionKey(define.key()).list();
//根据业务主键查询
datas = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey("businessKey1").list();
//根据流程实例id查询
datas = historyService.createHistoricProcessInstanceQuery().processInstanceId(pi1.getId()).list();
//查询没有完成的流程实例
historyService.createHistoricProcessInstanceQuery().unfinished().list();
1.2 历史任务查询
List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery().finished().list();
datas = historyService.createHistoricTaskInstanceQuery().processDefinitionId(define.getId()).list();
datas = historyService.createHistoricTaskInstanceQuery().processDefinitionKey("testProcess").list();
datas = historyService.createHistoricTaskInstanceQuery().processDefinitionName("testProcess2").list();
datas = historyService.createHistoricTaskInstanceQuery().processFinished().list();
datas = historyService.createHistoricTaskInstanceQuery().processUnFinished().list();
datas = historyService.createHistoricTaskInstanceQuery().taskAssignee("crzayit").list();
datas = historyService.createHistoricTaskInstanceQuery().taskAssigneeLike("%zy%").list();
datas = historyService.createHistoricTaskInstanceQuery().taskDefinitionKey("userTask1").list();
datas = historyService.createHistoricTaskInstanceQuery().taskDueAfter(sdf.parse("2022-10-11 06:00:00")).list();
datas = historyService.createHistoricTaskInstanceQuery().taskDueBefore(sdf.parse("2022-10-11 06:00:00")).list();
datas = historyService.createHistoricTaskInstanceQuery().taskDueDate(sdf.parse("2022-10-11 06:00:00")).list();
List<HistoricTaskInstance> datas = historyService.createHistoricTaskInstanceQuery().unFinished().list();
1.3 历史行为查询
List<HistoricActivityInstance> datas = historyService.createHistoricActivityInstanceQuery().activitiyId("endEvent1").list();
datas = historyService.createHistoricActivityInstanceQuery().activityInstanceId(datas.get(0).getId()).list();
datas = historyService.createHistoricActivityInstanceQuery().activityType("intermediateCatchEvent").list();
datas = historyService.createHistoryActivityInstanceQuery().finished().list();
datas = historyService.createHistoryActivityInstanceQuery().processInstanceId(pi2.getId()).list();
datas = historyService.createHistoryActivityInstanceQuery().taskAssignee("crazyit").list();
datas = historyService.createHistoryActivityInstanceQuery().unfinished().list();
1.4 历史流程明细查询
//查询所有明细
List<HistoricDetail> datas = historyService.createHistoricDetailQuery().processInstanceId(pi.getId()).list();
//查询参数表
List<HistoricVariableInstance> hisVars = historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).list();
1.5 删除历史流程实例和历史任务
// 根据id删除历史任务数据
historyService.deleteHistoricTaskInstance(task.getId());
//删除流程实例的历史流程数据
historyService.deleteHistoricProcessInstance(pi1.getId());
//抛出错误,删除没有完成的流程实例历史数据
historyService.deleteHistoricProcessInstance(pi2.getId());
2 工作管理
2.1 工作查询对象
对应存放工作的四个数据表,是以下四个工作查询对象
JobQuery:到一般工作表(ACT_RU_JOB)中查询数据
TimeJobQuery:到定时器工作表(ACT_RU_TIMER_JOB)中查询数据
DeadLetterJobQuery:到无法执行工作表(ACT_RU_DEADLETTER_JOB)中查询数据
2.2 获取工作异常信息
当工作执行过程中出现异常时,各个工作表的EXCEPTION_STACK_ID_和EXCEPTION_MSG_字段会保存工作执行的异常信息,使用ManagementService的几个getXXXJobExceptionStacktrace方法可以获取这些异常信息,该方法会根据EXCEPTION_STACK_ID_字段所保存的值,到ACT_GE_BYTEARRAY表中查询相应的详细异常信息
//管理服务组件
ManagementService mService = engine.getManagementService();
//启动流程
runtimeService.startProcessInstanceByKey("testMsg");
//执行工作流
mService.executeJob(mService.createJobQuery().singleResult().getId());
//查询异常信息
String msg = mService.getTimerJobExceptionStacktrace(mService.createTimerJobQuery().singleResult().getId());
2.3 转移与删除工作
//启动流程
runtimeService.startProcessInstanceByKey("moveJob1");
//管理服务组件
RuntimeService mService = engine.getManagementService();
//查询一般工作数量
mService.createJobQuery().count();
//查询deadletter数量
mService.createDeadLetterJobQuery().count();
//将deadletter移动到一般工作表
mService.moveDeadLetterJobExecutableJob(mService.createDeadLetterJobQuery().singleResult.getId(),2);
//删除工作
mService.deleteJob(mService.createJobQuery().singleResult().getId());
//将定时器工作移动到一般工作表
mService.moveTimerToExecutableJob(mService.createTimerJobQuery().singleResult().getId());
3 数据库管理
3.1 查询引擎属性
activiti会将流程引擎相关的属性配置保存到ACT_GE_PROPERTY表中,一些全局的,可能发生改变的属性均会被存放到该表中保存.使用ManagementService的getProperties方法可以返回这些属性及值
// 得到管理服务组件
ManagementService mService = engine.getManagementService();
Map<String,String> props = managementService.getProperties();
3.2 数据表信息查询
//得到管理服务组件
ManagementService managementService = engine.getManagementService();
//查询表信息
TableMetaData data = managementService.getTableMetaData("ACT_GE_PROPERTY");
Listy<String> columns = data.getColumnNames();
List<String> types = data.getColumnTypes();
//查询数据量
Map<String,Long> count = managementService.getTableCount();
3.3 数据库操作
//得到管理服务组件
ManagementService managementService = engine.getManagementService();
//创建数据库连接
String url = "jdbc:mysql://localhost:3306/act";
String username = "root";
String passwd = "123456";
Connection conn = DriverManager.getConnection(url,username,passwd);
//创建schema
conn.createStatement().execute("create database 10_TEST");
managementService.databaseSchemaUpgrade(conn,"","");
//删除schema
conn = DriverManager.getConnection(url,userName,passwd);
//创建schema
conn.createStatement().execute("create database 10_test");
managementService.databaseSchemaUpgrade(conn,"","");
//删除schema
conn = DriverManager.getConnection(url,username,passwd);
conn.createStatement().execute("drop database 10_test");
managementService.databaseSchemaUpgrade(conn,"","");
// 为10数据库创建table1表
conn = DriverManager.getConnection(url,userName,passwd);
conn.createStatement().execute("create table table_1(`ID` int(11) NOT NULL auto_increment,primary key(`ID`))");
managementService.databaseSchemaUpgrade(conn,"","");
//删除10的table_1表
conn = DriverManager.getConnection(url1,userName,passwd);
conn.createStatement().execute("drop table Table_1");
managementService.databaseSchemaUpgrade(conn,"","");
3.4 数据表查询
//查询ACT_GE_PROPERTY表的数据
TablePage page = manangementService.createTablePageQuery().tableName("ACT_GE_PROPERTY").listPage(0,2);
List<Map<String,Object> datas = page.getRows();
for(Map<String,Object> data : datas){
for(String key : data.keySet()){
System.out.println(key+"---------"+data.get(key));
}
}