zoukankan      html  css  js  c++  java
  • activiti工作流学习笔记-2

    一、绘制流程

      1、指定流程定义key值;

      流程定义key值是流程定义的标识,建议:相同的业务流程,流程定义的key名字定义一样,比如,如果需要创建新的业务流程,请假流程则使用新的key。

      2、指定任务负责人

     二、部署流程定义

      

    //部署流程定义
        @Test
        public void deployProcess(){
            //获取repositoryService
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            RepositoryService repositoryService = processEngine.getRepositoryService();
            Deployment deployment = repositoryService
                    .createDeployment().addClasspathResource("bpmn/example.bpmn")
                    .addClasspathResource("bpmn/example.png") //通过bpmn文件生成的png文件
                    .name("test").deploy();
            System.out.println("测试结果:"+deployment.getId()+"=="+deployment.getName());
        }

    //压缩包部署方式
        @Test
        public void deployProcessByZip(){
            //创建processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取repositoryService
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //定义输入流
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("bpmn/example.zip");
            ZipInputStream zipInputStream = new ZipInputStream(inputStream);
            Deployment deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy();
            System.out.println("测试流程部署ID=="+deployment.getId());
            System.out.println("测试流程部署NAME=="+deployment.getName());
        }

      

      流程定义部署后操作activiti数据表如下:
      SELECT * FROM act_re_deployment #流程定义部署表,记录流程部署信息
      SELECT * FROM act_re_procdef #流程定义表,记录流程定义信息
      SELECT * FROM act_ge_bytearray #资源表
      说明:
      act_re_deployment和act_re_procdef一对多关系,一次部署在流程部署表生成一条记录,但一次部署可以部署多个流程定义,每个流程定义在流程定义表生成一条记录。

      每一个流程定义在act_ge_bytearray  会存在两个资源记录,bpmn和png。
        建议:一次部署一个流程,这样部署表和流程定义表是一对一有关系,方便读取流程部署及流程定义信息。

    三、查看部署的流程定义

    //查看部署的流程定义
        @Test
        public void queryProcessDefinition(){
            //创建processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取repositoryService
            RepositoryService repositoryService = processEngine.getRepositoryService();
    
            ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
            //流程定义KEY
            String key = "example";
            List<ProcessDefinition> processDefinitionList =
                    processDefinitionQuery.processDefinitionKey(key).orderByProcessDefinitionVersion().desc().list();
            for(ProcessDefinition processDefinition : processDefinitionList){
                System.out.println("流程定义ID=="+processDefinition.getId());
                System.out.println("流程定义NAME=="+processDefinition.getName());
                System.out.println("流程定义部署ID=="+processDefinition.getDeploymentId());
            }
        }

    四、删除部署成功的流程定义

    //删除部署成功的流程定义
        @Test
        public void deleteProcessDefinition(){
            //创建processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取repositoryService
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //流程定义部署ID
            String deploymentId = "7501";
            //删除流程定义,如果该流程定义已有流程实例启动则删除时出错
            repositoryService.deleteDeployment(deploymentId);
    
            //设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式
            //repositoryService.deleteDeployment(deploymentId , true);
        }

      说明:

      1) 使用repositoryService删除流程定义
      2) 如果该流程定义下没有正在运行的流程,则可以用普通删除。
      3) 如果该流程定义下存在已经运行的流程,使用普通删除报错,可用级联删除方法将流程及相关记录全部删除。项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用。

    五、启动一个流程实例

      

    //启动一个流程实例
        @Test
        public void startProcessInstance(){
            //创建processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取runtimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //根据流程定义KEY启动流程
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("example");
            System.out.println("流程定义ID=="+processInstance.getProcessDefinitionId());
            System.out.println("流程实例ID=="+processInstance.getId());
            System.out.println("流程定义NAME=="+processInstance.getName());
        }

    六、查询当前人待执行的任务

      

    //查询当前人待执行的任务
        @Test
        public void findPersonalTaskList(){
            //创建processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取taskService
            TaskService taskService = processEngine.getTaskService();
            //获取当前人待执行任务列表
            List<Task> taskList = taskService.createTaskQuery().taskAssignee("park").list();
            for(Task task : taskList){
                System.out.println("测试任务ID=="+task.getId());
                System.out.println("测试任务NAME=="+task.getName());
                System.out.println("测试流程实例IDE=="+task.getProcessInstanceId());
            }
            //当前人只有单个任务时使用
            Task task = taskService.createTaskQuery().taskAssignee("park").singleResult();
            System.out.println("测试任务ID=="+task.getId());
            System.out.println("测试任务NAME=="+task.getName());
            System.out.println("测试流程实例IDE=="+task.getProcessInstanceId());
        }

    七、完成任务

    //完成任务
        @Test
        public void completTask(){
            //创建processEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取taskService
            TaskService taskService = processEngine.getTaskService();
            //完成任务
            String taskId = "12";
            taskService.complete(taskId);
        }

      

  • 相关阅读:
    ora12514
    telnet到虚拟机上的red hat linux失败——解决办法
    linux下监听的配置
    本机win7系统与虚拟机中的linux系统实现通讯
    ORA01078: failure in processing system parameters LRM00109: could not open parameter file '/oradata/oracle/112/dbs/in
    Xmanager无法登录Red Hat Linux——解决方法
    几种常见算法的介绍及复杂度分析(转)
    Linux学习笔记18cal显示日历
    Linux学习笔记14架设Apache http服务器
    Installing Oracle Database 10g on Linux
  • 原文地址:https://www.cnblogs.com/dzx-fiona/p/12542590.html
Copyright © 2011-2022 走看看