前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Activiti7的api查询(实时更新)

Activiti7的api查询(实时更新)

作者头像
一写代码就开心
发布2022-05-27 08:16:19
2.8K0
发布2022-05-27 08:16:19
举报
文章被收录于专栏:java和python

目录

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");
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1 背景
  • 2 各个api
    • 2.1 引擎对象里面的方法
      • 2.2 创建工作流引擎-------getDefaultProcessEngine()
        • 2.3 操作历史表的实体类------HistoryService
          • 2.3.1 获取HistoryService的方法getHistoryService()
          • 2.3.2 创建历史任务实例对象createHistoricTaskInstanceQuery()
          • 2.3.3 创建流程实例对象createHistoricProcessInstanceQuery()
          • 2.3.4 创建流程活动对象createHistoricActivityInstanceQuery()
        • 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()
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档