zoukankan      html  css  js  c++  java
  • 【Activiti学习之二】Activiti API(一)

    环境
      JDK 1.8
      MySQL 5.6
      Tomcat 7
      Eclipse-Luna
      activiti 6.0

    一、Activiti数据查询
    准备数据:

    package com.wjy.act;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class SaveGroup {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
            for(int i = 0; i < 10; i++) {
                Group group = is.newGroup(String.valueOf(i));
                group.setName("Group_" + i);
                group.setType("TYPE_" + i);
                is.saveGroup(group);//保存到表act_id_group
            }
            engine.close();
            System.exit(0);
            
        }
    
    }

    list 查询多条和count 数量统计:

    package com.wjy.act;
    
    import java.util.List;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class TestList {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
            
            //测试list查询
            List<Group> groups = is.createGroupQuery().list();
            for(Group g : groups) {
                System.out.println(g.getId() + "---" + g.getName() + "---" + g.getType());
            }
            //测试 count
            long size = is.createGroupQuery().count();
            System.out.println(size);
        }
    
    }

    listPage 分页查询:

    package com.wjy.act;
    
    import java.util.List;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class TestListPage {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
            
            //分页查询 listPage
            List<Group> groups = is.createGroupQuery().listPage(1, 5);
            for(Group g : groups) {
                System.out.println(g.getId() + "---" + g.getName() + "---" + g.getType());
            }
        }
    
    }

    singleResult 查询单条

    package com.wjy.act;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class TestSingle {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
            //测试singleResult
            Group g = is.createGroupQuery().groupName("Group_0").singleResult();
            System.out.println(g.getId());
        }
    
    }

    asc 升序和desc 降序:

    package com.wjy.act;
    
    import java.util.List;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class TestSort {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
            //测试降序 升序  需要根据字段orderby  
            //多字段排序 orderby之后都要跟上asc() 或desc()
            //is.createGroupQuery().orderByGroupId().asc().orderByGroupName().asc().list();
            List<Group> groups = is.createGroupQuery().orderByGroupId().desc().orderByGroupName().asc().list();
            for(Group g : groups) {
                System.out.println(g.getId());
            }
        }
    
    }

    按照字段条件查询:

    package com.wjy.act;
    
    import java.util.List;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class FieldQuery {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
            //按照字段条件查询
            List<Group> groups = is.createGroupQuery().groupName("Group_1").groupType("TYPE_1").list();
            for(Group g : groups) {
                System.out.println(g.getId());
            }
        }
    
    }

    支持原生sql查询:

    package com.wjy.act;
    
    import java.util.List;
    
    import org.activiti.engine.IdentityService;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.identity.Group;
    
    public class NativeQuery {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            IdentityService is = engine.getIdentityService();
    
            //支持原生sql语句查询
            List<Group> groups = is.createNativeGroupQuery()
                    .sql("SELECT * FROM ACT_ID_GROUP where NAME_ = #{name}")
                    .parameter("name", "Group_2").list();
            for (Group g : groups) {
                System.out.println(g.getId());
            }
        }
    
    }

    二、流程文件部署
    1、DeploymentBuilder对象
    方法addClasspathResource:

    package com.wjy.deploy;
    
    import java.io.InputStream;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.DeploymentBuilder;
    
    public class TextQuery {
    
        public static void main(String[] args) throws Exception {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 存储服务
            RepositoryService rs = engine.getRepositoryService();
            
            DeploymentBuilder builder = rs.createDeployment();
            builder.addClasspathResource("my_text.txt");
            Deployment dep = builder.deploy();
            // 数据查询
            InputStream is = rs.getResourceAsStream(dep.getId(), "my_text.txt");
            int count = is.available();
            byte[] contents = new byte[count];
            is.read(contents);
            String result = new String(contents);
            //输入结果
            System.out.println(result);
    
        }
    
    }

    方法addInputStream:

    package com.wjy.deploy;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    
    import javax.imageio.ImageIO;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.ProcessDefinition;
    
    public class ImageQuery {
    
        public static void main(String[] args) throws Exception {
            // 创建流程引擎
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 得到流程存储服务对象
            RepositoryService repositoryService = engine.getRepositoryService();
            // 部署一份流程文件与相应的流程图文件
            Deployment dep = repositoryService.createDeployment().addClasspathResource("gen.bpmn").deploy();
            // 查询流程定义
            ProcessDefinition def = repositoryService.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
            // 查询资源文件
            InputStream is = repositoryService.getProcessDiagram(def.getId());
            // 将输入流转换为图片对象  
            BufferedImage image = ImageIO.read(is);
            // 保存为图片文件
            File file = new File("resource/result.png");
            if (!file.exists()) file.createNewFile();
            FileOutputStream fos = new FileOutputStream(file);
            ImageIO.write(image, "png", fos);
            fos.close();
            is.close();
        }
    
    }

    方法addZipInputStream:

    package com.wjy.deploy;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.zip.ZipInputStream;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.DeploymentBuilder;
    
    public class ZipTest {
    
        public static void main(String[] args) throws Exception {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 存储服务
            RepositoryService rs = engine.getRepositoryService();
            
            DeploymentBuilder builder = rs.createDeployment();
            
            FileInputStream fis = new FileInputStream(new File("resource/datas.zip"));
            ZipInputStream zis = new ZipInputStream(fis);
            
            builder.addZipInputStream(zis);
            
            builder.deploy();
        }
    
    }

    方法addBpmnModel:

    package com.wjy.deploy;
    
    import org.activiti.bpmn.model.BpmnModel;
    import org.activiti.bpmn.model.EndEvent;
    import org.activiti.bpmn.model.SequenceFlow;
    import org.activiti.bpmn.model.StartEvent;
    import org.activiti.bpmn.model.UserTask;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.DeploymentBuilder;
    
    public class BpmnTest {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 存储服务
            RepositoryService rs = engine.getRepositoryService();
            
            DeploymentBuilder builder = rs.createDeployment();
            builder.addBpmnModel("My Process", createProcessModel());
            
            builder.deploy();
        }
        
        private static BpmnModel createProcessModel() {
            // 创建BPMN模型对象
            BpmnModel model = new BpmnModel();
            // 创建一个流程定义
            org.activiti.bpmn.model.Process process = new org.activiti.bpmn.model.Process();
            model.addProcess(process);
            process.setId("myProcess");
            process.setName("My Process");
            // 开始事件
            StartEvent startEvent = new StartEvent();
            startEvent.setId("startEvent");
            process.addFlowElement(startEvent);
            // 用户任务
            UserTask userTask = new UserTask();
            userTask.setName("User Task");
            userTask.setId("userTask");
            process.addFlowElement(userTask);
            // 结束事件
            EndEvent endEvent = new EndEvent();
            endEvent.setId("endEvent");
            process.addFlowElement(endEvent);
            // 添加流程顺序
            process.addFlowElement(new SequenceFlow("startEvent", "userTask"));
            process.addFlowElement(new SequenceFlow("userTask", "endEvent"));
            return model;
        }
    
    
    }

    方法addString和addBytes:略

    上面的方法是加载流程方法,另外方法deploy是将加载的流程实现部署,返回对象Deployment,部署记录记录到表表:act_re_deployment,流程则记录到表:act_ge_bytearray。

    2、部署验证

    默认会进行格式和流程定义验证

    格式验证:

    package com.wjy.deploy;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.DeploymentBuilder;
    
    public class SchemaError {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 存储服务
            RepositoryService rs = engine.getRepositoryService();
            
            DeploymentBuilder builder = rs.createDeployment();
            //schema_error.bpmn 格式有问题  比如说在里面加入了无效标签<abc>angus</abc>
            builder.addClasspathResource("error/schema_error.bpmn");
            //关闭格式验证 disableSchemaValidation
            //builder.disableSchemaValidation();
            builder.deploy();
        }
    
    }

    流程验证:

    package com.wjy.deploy;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.DeploymentBuilder;
    
    public class BpmnError {
    
        public static void main(String[] args) {
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 存储服务
            RepositoryService rs = engine.getRepositoryService();
            
            DeploymentBuilder builder = rs.createDeployment();
            //bpmn_error.bpmn 流程有问题 比如说有两个开始节点
            builder.addClasspathResource("error/bpmn_error.bpmn");
            //关闭流程验证 disableBpmnValidation
            //builder.disableBpmnValidation();
            builder.deploy();
        }
    
    }

    3、查询部署资源

    package com.wjy.deploy;
    
    import java.io.InputStream;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.ProcessDefinition;
    
    public class BpmnQuery {
    
        public static void main(String[] args) throws Exception {
            // 创建流程引擎
            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
            // 得到流程存储服务对象
            RepositoryService repositoryService = engine.getRepositoryService();
            // 部署一份流程文件
            Deployment dep = repositoryService.createDeployment().addClasspathResource("gen.bpmn").deploy();
            // 查询流程定义
            //查询流程定义实体
            ProcessDefinition def = repositoryService.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
            // 查询资源文件
            InputStream is = repositoryService.getProcessModel(def.getId());
            
            // 读取输入流
            int count = is.available();
            byte[] contents = new byte[count];
            is.read(contents);
            String result = new String(contents);
            //输入输出结果
            System.out.println(result);
    
        }
    
    }

    查询流程图参考上面方法addInputStream。

    4、删除部署资源
    repositoryService.deleteDeployment(String deploymentId, boolean cascade)
    (1)不管是否指定级联,都会删除部署相关的身份数据(act_id*)、流程定义数据(act_re_procdef)、流程资源(act_ge_bytearray)与部署数据(act_re_deployment)。
    (2)如果设置为级联删除,则会将运行的流程实例、流程任务以及流程实例的历史数据删除。
    (3)如果不级联删除,但是存在运行时数据,例如还有流程实例(act_ru*),就会删除失败。

  • 相关阅读:
    Application和Page详解
    Session解析
    CSS设置技巧
    CSS布局模型
    CSS盒模型
    JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别
    设计模式——单例模式
    设计模式——工厂模式
    Go语言学习
    每周一个设计模式
  • 原文地址:https://www.cnblogs.com/cac2020/p/11498547.html
Copyright © 2011-2022 走看看