Activiti7的api查询(实时更新)

2022-05-27 08:16:19 浏览数 (2)

目录

  • 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");
    }

0 人点赞