目录
- 1 背景
- 2 各个api
- 2.1 引擎对象里面的方法
- 2.2 创建工作流引擎-------getDefaultProcessEngine()
- 2.3 操作历史表的实体类------HistoryService
- 2.3.1 获取HistoryService的方法getHistoryService()
- 2.3.2 创建历史任务实例对象createHistoricTaskInstanceQuery()
- 2.3.1.1 processDefinitionKey()
- 2.3.1.2 taskAssignee()
- 2.3.1.3 taskNameLike()
- 2.3.1.4 listPage(page, rows)
- 2.3.1.5 finished()
- 2.3.1.6 orderByHistoricTaskInstanceEndTime()
- 2.3.3 创建流程实例对象createHistoricProcessInstanceQuery()
- 2.3.3.1 processDefinitionKey()
- 2.3.3.2 processInstanceBusinessKey()
- 2.3.3.3 list()
- 2.3.3.4 getEndActivityId()
- 2.3.4 创建流程活动对象createHistoricActivityInstanceQuery()
- 2.3.4.1 activityId()
- 2.3.4.2 list()
- 2.3.4.3 getActivityName()
- 2.4 操作流程部署与定义------ RepositoryService
- 2.4.1 getRepositoryService()
- 2.4.2 createDeploymentQuery()
- 2.4.3 list( )
- 2.4.4 createProcessDefinitionQuery()
- 2.4.5 list()
- 2.5 操作流程运行------ RuntimeService
- 2.5.1 getRuntimeService()
- 2.5.2 startProcessInstanceByKey()
- 2.5.3 createProcessInstanceQuery()
- 2.5.4 list()
- 2.5.5 suspendProcessInstanceById()
- 2.5.6 activateProcessInstanceById()
- 2.5.7 deleteProcessInstance()
- 2.6 操作任务------ TaskService
- 2.6.1 getTaskService()
- 2.6.1.1 createTaskQuery( )
- 2.6.1.2 taskId()
- 2.6.1.3 singleResult()
- 2.6.1.4 getAssignee()
- 2.6.1.5 addComment()
- 2.6.1.6 complete()
- 2.6.1.7 拾取任务方法 claim()
- 2.6.1.8 归还与交办任务 setAssignee()
1 背景
学习activiti,就是学习使用java代码操作25张表; java代码中我们调用Activiti的工具类;
service名称 | service作用 |
---|---|
RepositoryService | activiti的资源管理类 |
RuntimeService | activiti的流程运行管理类 |
TaskService | activiti的任务管理类 |
HistoryService | activiti的历史管理类 |
ManagerService | activiti的引擎管理类 |
2 各个api
2.1 引擎对象里面的方法
我们创建了一个工作流引擎对象,里面最主要的就是以上的9个方法
2.2 创建工作流引擎-------getDefaultProcessEngine()
代码操作25张表,我们需要拿到25张表整体的一个对象,使用对象里面的各种各样的方法进行操作25张表;这个最原始的,最开始的一个大的对象,创建方法是
代码语言:javascript复制1 默认创建方式
将activiti.cfg.xml文件名及路径固定,
且activiti.cfg.xml文件中有 processEngineConfiguration的配置,
可以使用如下代码创建processEngine:
//直接使用工具类 ProcessEngines,使用classpath下的activiti.cfg.xml中的配置创建processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
代码语言:javascript复制2 一般创建方式
//先构建ProcessEngineConfiguration
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine = configuration.buildProcessEngine();
以上获取的processEngine对象,这个对象里面有好多的方法,利用这些方法就可以操作25张表了
2.3 操作历史表的实体类------HistoryService
这个对象里面,一共有15个方法进行操作25张表
2.3.1 获取HistoryService的方法getHistoryService()
代码语言:javascript复制// 获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
HistoryService historyService = processEngine.getHistoryService();
2.3.2 创建历史任务实例对象createHistoricTaskInstanceQuery()
操作act_hi_taskinst这个表
代码语言:javascript复制// 创建历史任务实例对象
HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery();
得到这个对象,我们可以理解为,得到了act_hi_taskinst这个表的对象;这个对象里面有好多的方法,可以操作这个表
2.3.1.1 processDefinitionKey()
HistoricTaskInstanceQuery这个对象里面有这个方法,这个方法就是可以限制查询哪个流程定义,参数是流程定义的key
代码语言:javascript复制 HistoricTaskInstanceQuery qingjia1 = historicTaskInstanceQuery.processDefinitionKey("qingjia");
2.3.1.2 taskAssignee()
根据用户id,查询属于当前用户的任务,参数是前端传过来的用户的id
代码语言:javascript复制 HistoricTaskInstanceQuery qingjia1 = historicTaskInstanceQuery.taskAssignee(id "");
2.3.1.3 taskNameLike()
act_hi_taskinst这个表里面有一个name字段,当前任务的名称,我们可以根据这个字段进行模糊查询
代码语言:javascript复制 HistoricTaskInstanceQuery qingjia1 = historicTaskInstanceQuery.taskNameLike("%审批%");
2.3.1.4 listPage(page, rows)
分页查询act_hi_taskinst这个表里面的数据
代码语言:javascript复制 List<HistoricTaskInstance> historicTaskInstances = historicTaskInstanceQuery.listPage(page, rows);
之后就可以变量这个list集合,拿到的就是这个表里面一行一行的数据对象
2.3.1.5 finished()
查询已经完成的任务,就是endTime字段有值的数据,相当于查询已经审核完成的数据
代码语言:javascript复制HistoricTaskInstanceQuery finished =
historicTaskInstanceQuery.finished();
2.3.1.6 orderByHistoricTaskInstanceEndTime()
act_hi_taskinst这个表里面有个endTime字段,完成的任务,这个字段就有值,可以根据这个字段进行排序
代码语言:javascript复制 List<HistoricTaskInstance> historicTaskInstances = historicTaskInstanceQuery.orderByHistoricTaskInstanceEndTime().asc().listPage(page, rows);
2.3.3 创建流程实例对象createHistoricProcessInstanceQuery()
代码语言:javascript复制 // 查询历史流程实例对象
HistoricProcessInstanceQuery hisquery = processEngine.getHistoryService().createHistoricProcessInstanceQuery();
拿到这个对象,就可以操作act_hi_procinst这个表
2.3.3.1 processDefinitionKey()
根据流程定义的id查询创建的流程实例
代码语言:javascript复制HistoricProcessInstanceQuery qingjia3 = hisquery.processDefinitionKey("qingjia");
2.3.3.2 processInstanceBusinessKey()
根据业务id,查询当前业务下创建的流程实例
代码语言:javascript复制// 根据流程定义id,流程BusinessKey的业务值,获取当前业务单的审批流程
HistoricProcessInstanceQuery qingjia3 = hisquery.processInstanceBusinessKey(id "");
2.3.3.3 list()
查询有多少个流程实例
代码语言:javascript复制 List<HistoricProcessInstance> qingjia2 = hisquery.processDefinitionKey("qingjia").processInstanceBusinessKey(id "").list();
2.3.3.4 getEndActivityId()
判断当前流程实例是否已经走完;为null就是没有走完; 这个获取的就是当前流程结束的节点的活动id
代码语言:javascript复制 for(HistoricProcessInstance item: qingjia2){
// getEndActivityId 判断当前流程实例是否完成,如果没有完成,不能创建
if(item.getEndActivityId() == null){
System.out.println("不能重复提交申请单");
}
}
2.3.4 创建流程活动对象createHistoricActivityInstanceQuery()
拿到操作act_hi_actinst 这个表的对象,这个表里面的各个节点都有
代码语言:javascript复制 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();
2.3.4.1 activityId()
根据查询出来的流程结束的节点id,查询最后一个数据
代码语言:javascript复制 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery().activityId(endActivityId);
2.3.4.2 list()
代码语言:javascript复制// 根据最后节点的id,获取任务 ,其实只有一个,但是这里使用了list,是没有找到获取单个的方法
List<HistoricActivityInstance> list1 = historyService.createHistoricActivityInstanceQuery().activityId(endActivityId).list();
HistoricActivityInstance historicActivityInstance = list1.get(0);
2.3.4.3 getActivityName()
获取act_hi_actinst 这个表的name字段,获取最后节点的名称
代码语言:javascript复制 String activityName = historicActivityInstance.getActivityName();//获取最后节点的名称
2.4 操作流程部署与定义------ RepositoryService
这个类里面一共有46个方法,需要我们学习
2.4.1 getRepositoryService()
使用这个方法获取到RepositoryService对象,用这个对象里面的各种各样的方法操作25张表
代码语言:javascript复制// 获取processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取repositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
2.4.2 createDeploymentQuery()
创建查询部署的对象,可以理解为查询 act_re_deployment
代码语言:javascript复制DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();
2.4.3 list( )
创建查询部署的对象,可以理解为查询 act_re_deployment
代码语言:javascript复制 List<Deployment> list = repositoryService.createDeploymentQuery().list();
for(Deployment dep : list){
System.out.println("Id:" dep.getId());
System.out.println("Name:" dep.getName());
System.out.println("DeploymentTime:" dep.getDeploymentTime());
System.out.println("Key:" dep.getKey());
}
2.4.4 createProcessDefinitionQuery()
使用这个方法,创建流程定义对象; 相当于操作这个表act_re_procdef
代码语言:javascript复制ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
2.4.5 list()
代码语言:javascript复制 List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
.list();
2.5 操作流程运行------ RuntimeService
这个类里面一共有100个方法,需要我们学习
2.5.1 getRuntimeService()
使用这个方法获取到RuntimeService对象,用这个对象里面的各种各样的方法操作25张表
代码语言:javascript复制// 1、得到ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、得到RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
2.5.2 startProcessInstanceByKey()
根据runtimeService对象,创建流程实例,就是根据这个方法
代码语言:javascript复制 //初始化流程实例
@Test
public void initProcessInstance(){
//1、获取页面表单填报的内容,请假时间,请假事由,String fromData
//2、fromData 写入业务表,返回业务表主键ID==businessKey
//3、把业务数据与Activiti7流程数据关联
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_claim","bKey002");
System.out.println("流程实例ID:" processInstance.getProcessDefinitionId());
}
2.5.3 createProcessInstanceQuery()
获取流程实例查询对象
代码语言:javascript复制 ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
2.5.4 list()
代码语言:javascript复制 List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().list();
获取流程实例list集合
2.5.5 suspendProcessInstanceById()
挂起流程实例,传参是流程实例的id
代码语言:javascript复制runtimeService.suspendProcessInstanceById("73f0fb9a-ce5b-11ea-bf67-dcfb4875e032");
2.5.6 activateProcessInstanceById()
激活流程实例,传参是流程实例的id
代码语言:javascript复制 runtimeService.activateProcessInstanceById("73f0fb9a-ce5b-11ea-bf67-dcfb4875e032");
2.5.7 deleteProcessInstance()
删除流程实例
代码语言:javascript复制//删除流程实例
@Test
public void delProcessInstance(){
runtimeService.deleteProcessInstance("45b8b797-ba0c-11ec-8af3-e02be94c81b8","删着玩");
System.out.println("删除流程实例");
}
其他数据会删除,但是会在历史表保存
2.6 操作任务------ TaskService
这个类里面一共有88个方法,需要我们学习
2.6.1 getTaskService()
使用这个方法获取到TaskService对象,用这个对象里面的各种各样的方法操作act_ru_task这个表,就是操作运行的任务表
代码语言:javascript复制// 获取引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取操作任务的服务 TaskService
TaskService taskService = processEngine.getTaskService();
2.6.1.1 createTaskQuery( )
创建查询对象
代码语言:javascript复制TaskQuery taskQuery = taskService.createTaskQuery();
2.6.1.2 taskId()
act_ru_task这个表里面根据任务id查询数据
代码语言:javascript复制 //根据任务id查询任务表
TaskQuery taskQuery1 = taskQuery.taskId(taskid "");
2.6.1.3 singleResult()
获取单个数据
代码语言:javascript复制Task task = taskQuery1.singleResult();
2.6.1.4 getAssignee()
获取act_ru_task这个表单个数据的操作人
代码语言:javascript复制// 获取当前任务的 处理人
String assignee = task.getAssignee();
2.6.1.5 addComment()
// 添加审批意见
代码语言:javascript复制// 设置审批意见的审批人, 这个必须写
Authentication.setAuthenticatedUserId(userid "");
// 添加审批意见
taskService.addComment(taskid "",task.getProcessInstanceId(),comment);;
第一个参数是当前任务的id 第二个参数是当前任务的流程实例id 第三个参数是前端传过来的审批意见
评论会写到act_hi_comment这个表,谁评论的也会在这个表里面设置
2.6.1.6 complete()
第一个是任务id,第二个是当前任务里面的变量需要设置值,所以使用map给变量设置值
代码语言:javascript复制 Map<String, Object> map = new HashMap<String, Object>();
map.put("agree",agree);
taskService.complete(taskid "",map);
2.6.1.7 拾取任务方法 claim()
拾取任务,第一个参数是任务id,第二个参数是候选人名字
代码语言:javascript复制 //拾取任务
@Test
public void claimTask(){
Task task = taskService.createTaskQuery().taskId("f5c87a6e-ba27-11ec-89da-e02be94c81b8").singleResult();
taskService.claim("f5c87a6e-ba27-11ec-89da-e02be94c81b8","wukong");
}
2.6.1.8 归还与交办任务 setAssignee()
其实就是设置候选人,这个候选人不一定是在流程图里面设置的,随便一个人就可以;
代码语言:javascript复制//归还与交办任务
@Test
public void setTaskAssignee(){
Task task = taskService.createTaskQuery().taskId("f5c87a6e-ba27-11ec-89da-e02be94c81b8").singleResult();
//归还候选任务
taskService.setAssignee("f5c87a6e-ba27-11ec-89da-e02be94c81b8",null);
//交办,其实就是设置执行人
// taskService.setAssignee("f5c87a6e-ba27-11ec-89da-e02be94c81b8","wukong");
}