关于Activiti工作流的几个常用API的介绍以及表的分析

Activiti有几个常用的API

1ProcessEngineConfiguration用来生成ProcessEngine核心对象,给我的感觉类似于Hibernate中的Configuration一样

//通过ProcessEngineConfiguration来生成ProcessEngine流程引擎对象    
public void generateTables(){
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        configuration.setJdbcDriver("oracle.jdbc.driver.OracleDriver");
        configuration.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:xe");
        configuration.setJdbcUsername("qsw");
        configuration.setJdbcPassword("admin");
        //设置自动建表,一共生成25张表
     configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        configuration.buildProcessEngine();
    }

2RepositoryService对象

a.RepositoryService通过ProcessEngine来获取

b.RepositoryService主要是用来操作操作流程部署和定义、查询流程部署和定义的信息,主要涉及到4张表act_re_deployment(流程部署信息)、act_re_procdef(流程定义信息)、act_ge_bytearray(里面保存了流程图)、act_ge_property(里面涉及到流程的版本号)

c.RepositoryService的几个常用功能:

  1. 流程的部署和定义
    @Test
    public void deployProcess(){
        //只部署bmpn文件(数据库保存的时候自动生成图片)
//        repositoryService.createDeployment()
//                .addClasspathResource("diagrams/leave.bpmn")
//                .name("请假流程")
//                .deploy();
        //部署bpmn文件和图片,数据库不会自动生成图片,会使用你上传的图片
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("diagrams/leave.bpmn")
                .addClasspathResource("diagrams/leave.png")
                .name("请假流程")
                .deploy();
        System.out.println(deploy.getId()+","+deploy.getName()+","+deploy.getDeploymentTime());

    }

2.RepositoryService用来查询流程部署的信息和流程定义的信息

//查询流程部署的信息
 public void queryDeployment(){
        List<Deployment> deployments = repositoryService.createDeploymentQuery()
                .deploymentId("1")
                .deploymentName("请假流程").list();
        for (Deployment dep :
                deployments) {
            System.out.println(dep.getId()+","+dep.getName());
        }
    }
 //流程定义信息的查询
    @Test
    public void queryProcessDefined(){
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
        for (ProcessDefinition definition :
             list) {
            System.out.println(definition.getId()+","+definition.getDeploymentId());
        }
    }

3.查询流程图

  @Test
    public void queryProcessPicture() throws IOException {
        InputStream is = repositoryService.getProcessDiagram("leaveProcess:2:2504");
        OutputStream os = new FileOutputStream("e:/demo.png");
        FileUtil.copyStream(is,os);
    }

4.流程定义的删除(这里就不演示代码了。。。)

5.流程定义的修改,注意,流程定义部署之后无法修改,可以重新部署一个

3.RuntimeService对象

a.主要用来执行管理(包括了流程实例的启动,推进和删除等操作),主要涉及到的表act_ru_execution(流程实例的执行),ACT_RU_TASK(流程实例额任务),ACT_RU_IDENTITYLINK(流程实例对应的任务的代理人),ACT_HI_ACTINST(流程实例的活动历史,这里的活动指的是从startPoint到endPoint这一整个流程的每个活动点的统称),ACT_HI_TASKINST(任务历史,任务指的就是bpmn中那个带人的方块)

扫描二维码关注公众号,回复: 16604186 查看本文章

b.要注意的是流程定义和流程实例不是一个概念,就类似于汽车的设计图和汽车不是一个概念一样,一个流程定义可以启动多个‘新’流程实例。

c.RuntimeService的几个常见操作

1流程实例的启动(可以根据流程定义的id,流程定义的key,消息的名字来启动),

    //流程的启动(流程实例的启动)
    @Test
    public void processInstanceStart(){
        //1通过流程定义的id
//        ProcessInstance processInstance = runtimeService.startProcessInstanceById("leaveProcess:2:2504");
//        System.out.println("流程实例的id"+processInstance.getId()+",流程实例的名字"+processInstance.getName());
//        System.out.println("流程实例对应的流程定义"+processInstance.getProcessDefinitionId());
        //通过流程定义的key来启动
        ProcessInstance leaveProcess = runtimeService.startProcessInstanceByKey("leaveProcess");
        System.out.println("流程实例的id"+leaveProcess.getId()+",流程实例的name"+leaveProcess.getName());
        System.out.println("流程定义的name"+leaveProcess.getProcessDefinitionKey());

    }

2流程实例的查询(也不编码了,毕竟会了RepositoryService,下面都基本的套路。。。)

3流程当前节点的坐标(查看当前流程运行的位置)

  //获取当前流程的节点坐标,为了让用户能够看到当前流程执行到哪个活动点,可以获取图像信息,在页面中通过div来给当前所在节点进行标红
    //单个节点
    @Test
    public void getActiveNodeZuoBiao(){
        String act_id = "doApplicate";
        GraphicInfo info = repositoryService.getBpmnModel("leaveProcess:2:2504").getGraphicInfo(act_id);
        System.out.println("宽度"+info.getWidth());
        System.out.println("高度"+info.getHeight());
        System.out.println("x轴"+info.getX());
        System.out.println("y轴"+info.getY());
    }

4流程实例的强行删除(应用场景,例如小王申请离职,但是后悔了,立马撤销离职申请...)

 //流程实例的硬性删除
    @Test
    public void deleteProcessInstance(){
        runtimeService.deleteProcessInstance("5001","操作失误,不想离职");
    }

4.TaskServcie对象(主要用于个人任务的办理,涉及的表有act_ru_task,act_hi_taskinst)

查看个人代办任务

 //查询个人待办任务
    @Test
    public void querySelfUncompleteTask(){
        List<Task> tasks = taskService.createTaskQuery()
                .taskAssignee("张三")
                .list();
        for (Task task :
                tasks) {
            System.out.println(task.getId()+","+task.getAssignee());
        }
    }

个人待办任务完成

  //完成个人代办任务
    @Test
    public void completeTask(){
        taskService.complete("7504"); //任务id去act_hi_taskinst表中获取
    }
}

此外还有HistoryService(历史管理)、IdentityService(组织机构管理)、FormService(任务表单管理)以及ManagerService就不一一列举了,以上几个API是最常用的,我个人觉得会一个其他也就跟着就会了,但是要对那25张表够熟悉才行。

猜你喜欢

转载自blog.csdn.net/qsw2lw/article/details/90224919
今日推荐