Activiti的学习(三)——Activiti详细API

建立测试类,先加载流程引擎核心对象:

    ProcessEngine processEngine = null;

    @Before
    public void init() {
        processEngine = ProcessEngines.getDefaultProcessEngine();
    }

一、部署流程定义

①读取单个的流程定义文件

     /*
    读取单个的流程定义文件
     */
    @Test
    public void test1() {
        DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
        deploymentBuilder.addClasspathResource("test.bpmn");
        deploymentBuilder.addClasspathResource("test.png");
        Deployment deployment = deploymentBuilder.deploy();
    }

读取完成后,可以在act_re_deployment和act_re_procdef中看见新增的数据:

②读取zip压缩文件

    /*
   读取zip压缩文件
    */
    @Test
    public void test2() {
        DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment();
        ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("test02.zip"));
        deploymentBuilder.addZipInputStream(zipInputStream);
        deploymentBuilder.name("zip压缩文件流程文件");
        Deployment deployment = deploymentBuilder.deploy();

    }

二、查询部署列表

/**
     * 查询部署列表
     */
    @Test
    public void test3() {
        // 部署查询对象,查询表act_re_deployment
        DeploymentQuery query = processEngine.getRepositoryService().createDeploymentQuery();
        List<Deployment> list = query.list();
        for (Deployment deployment : list) {
            String id = deployment.getId();
            String name = deployment.getName();
            System.out.println(id+"---"+name);
        }
    }

三、查询定义列表

    /**
     * 查询流程定义列表
     */
    @Test
    public void test4() {
        // 流程定义查询对象,查询表act_re_procdef
        ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
        List<ProcessDefinition> list = query.list();
        for (ProcessDefinition pd : list) {
            String deploymentId = pd.getDeploymentId();
            System.out.println(pd.getName() + "" + pd.getId()+"部署ID:"+deploymentId);
        }
    }

四、删除部署信息

    /**
     * 删除部署信息
     */
    @Test
    public void test5() {
        String deploymentId = "1";
        // processEngine.getRepositoryService().deleteDeployment(deploymentId);
        processEngine.getRepositoryService().deleteDeployment(deploymentId, true); //级联删除
    }

五、删除流程定义

    /**
     * 删除流程定义(通过删除部署信息达到删除流程定义的目的)
     */
    @Test
    public void test6() {
        String deploymentId = "12501";
        // processEngine.getRepositoryService().deleteDeployment(deploymentId);
        processEngine.getRepositoryService().deleteDeployment(deploymentId,true);
    }

六、查询部署对应的文件流

    /**
     * 查询一次部署对应的流程定义文件名称和对应的输入流(bpmn png)
     */
    @Test
    public void test7() throws Exception {
        String deploymentId = "15001";
        List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
        for (String name : names) {
            System.out.println(name);
            InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
            // 将文件保存到本地磁盘
            File file = new File("h:\\" + name);
            File f1=new File( file.getParent());
            if(f1.exists()==false){
                f1.mkdirs();
            }
            OutputStream out = new FileOutputStream(file);
            byte[] b = new byte[1024];
            int len = 0;
            while ((len = in.read(b)) != -1) {
                out.write(b, 0, len);
            }
            out.close();
            in.close();
        }
    }

    @Test
    public void test8() throws Exception {
        String deploymentId = "15001";
        List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
        for (String name : names) {
            System.out.println(name);
            InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name);
            // 将文件保存到本地磁盘
            File file = new File("d:\\" + name);
            File f1=new File( file.getParent());
            if(f1.exists()==false){
                f1.mkdirs();
            }
            FileUtils.copyInputStreamToFile(in, new File("d:\\" + name));
            in.close();
        }
    }

七、获取png文件输入流

    /**
     * 获得png文件的输入流
     */
    @Test
    public void test9() throws Exception {
        String processDefinitionId = "zip01:1:15004";
        InputStream pngInputStream = processEngine.getRepositoryService().getProcessDiagram(processDefinitionId);
        FileUtils.copyInputStreamToFile(pngInputStream, new File("d:\\my.png"));
    }

八、启动流程定义的两种方式

①根据流程定义的id启动

    @Test
    public void test10(){
         String processDefinitionId = "zip01:1:15004";
         ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId );
         System.out.println(processInstance.getId());
    }

②根据流程定义的key启动,自动选择最新版本的流程定义启动流程实例

    @Test
    public void test11(){
        String processDefinitionKey = "zip01";
        ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId());

    }

九、查询流程实例列表

    /**
     * 查询流程实例列表,查询act_ru_execution表
     */
    @Test
    public void test12(){
        //流程实例查询对象,查询act_ru_execution表
        ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery();
        query.processDefinitionKey("zip01");
        query.orderByProcessInstanceId().desc();
//        query.listPage(0, 2);
        List<ProcessInstance> list = query.list();
        for (ProcessInstance pi : list) {
            System.out.println(pi.getId() + " " + pi.getActivityId());
        }
    }

十、结束流程实例

    /**
     * 结束流程实例,操作的表act_ru_execution act_ru_task
     */
    @Test
    public void test13(){
        String processInstanceId = "17501";
        processEngine.getRuntimeService().deleteProcessInstance(processInstanceId , "我同意");
    }

十一、查询任务列表

    /**
     * 查询任务列表
     */
    @Test
    public void test14() {
        // 任务查询对象,查询act_ru_task表
        TaskQuery query = processEngine.getTaskService().createTaskQuery();
        String assignee = "A";
        query.taskAssignee(assignee);
        query.orderByTaskCreateTime().desc();
        List<Task> list = query.list();
        for (Task task : list) {
            System.out.println(task.getId());
        }
    }

十二、办理任务

    /**
     * 办理任务
     */
    @Test
    public void test15(){
        String taskId = "20004";
        processEngine.getTaskService().complete(taskId);
    }

十三、查询最新版本的流程定义列表

    /**
     * 查询最新版本的流程定义列表
     */
    @Test
    public void test16() {
        ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
        query.orderByProcessDefinitionVersion().asc();
        List<ProcessDefinition> list = query.list();
        Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
        for (ProcessDefinition pd : list) {
            map.put(pd.getKey(), pd);
        }
        ArrayList<ProcessDefinition> lastList = new ArrayList<>(map.values());
        for (ProcessDefinition processDefinition : lastList) {
            System.out.println(processDefinition.getName() + "  " + processDefinition.getVersion());
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/84207317