zoukankan      html  css  js  c++  java
  • java工作流activiti的步骤

    链接:activiti 表名称的解释

    工作流从流程定义到创建一个流程实例完成执行步骤(省略bpmn的画法)

      工作流的所有操作都是使用流程引擎来进行操作的,流程引擎只是存储流程的过程,而不存储具体的业务数据,需要自行建立相关的表,工作流的特点是流程和业务的关联具体步骤如下。
    1. 创建流程引擎,也就是生成工作流所需要的23+张表。
    2. 流程引擎的部署。通过RepositoryService 进行部署,它是对应的就是流程的静态资源,将图片和bpmn上传至数据库。
    3. 使用activi-designer创建一个流程定义(.bpmn结尾的文件)
    4. 将定义好的流程定义和生成的png图片通过RepositoryService(前面章节说过主要是用来处理流程定义的service)的api上传到数据库
    5. 通过RuntimeService(这个service主要是处理当前正在运行的流程实例的)启动一个流程实例
    6. 这个时候通过TaskService(主要处理当前运行的任务,一个流程实例下有多个任务)获取到上面的实例所对应的当前人任务
    7. 结束上面的任务task,流程实例会走向下一个task任务
    8. 重复4,5,完成一个流程实例的启动到结束

      上面就是一个最简单从上往下执行的流程的执行步骤,本章节都是以代码做示例,代码不多,但是都执行一遍,你会对整个activiti的流程有个大概的了解

       

      创建流程引擎

        一般java中使用工作流,都是和spring框架结合进行使用的,具体情况后续添加。

      

    //普通方法的创建

    /*
    * * Description:创建流程引擎 * * @author cy * @date 2018年08月03日 16:34 * version 1.0 */ public class CreateEngine { public static void main(String[] args) { //流程引擎的创建,使用流程引擎配置文件,也就是创建23+张表 ProcessEngineConfiguration processEngineConfigurationFromResource = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); //设置数据库信息 processEngineConfigurationFromResource.setJdbcUrl("jdbc:mysql://localhost:3306/cheng?useUnicode=true&characterEncoding=utf-8"); processEngineConfigurationFromResource.setJdbcDriver("com.mysql.jdbc.Driver"); processEngineConfigurationFromResource.setJdbcUsername("root"); processEngineConfigurationFromResource.setJdbcPassword("admin"); processEngineConfigurationFromResource.setDatabaseSchemaUpdate(processEngineConfigurationFromResource.DB_SCHEMA_UPDATE_TRUE);//对数据库进行更新 processEngineConfigurationFromResource.buildProcessEngine();//创建引擎 System.out.println("创建引擎成功"); } }

      流程部署

    /*
         * 获取流程引擎对象,下面的方法会默认查找classpath目录下的名称为activi.cfg.xml
         * 里面bean的id为processEngineConfiguration的ProcessEngineConfiguration引擎配置对象来获取ProcessEngine对象
        */    
        private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        
        //部署一个流程
        @Test
        public void deployProcessDefinition(){
            //根据引擎获取资源service
            RepositoryService repositoryService =   engine.getRepositoryService();
            //部署bpmn文件
            String bpmnName="purchasingflow.bpmn";
            InputStream bpmnIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.bpmn");
            //部署bpmn生成的图片
            String pngName="purchasingflow.png";
            InputStream pngIn = this.getClass().getClassLoader().getResourceAsStream("diagram/purchasingflow.png");
            //添加这两个文件进行部署
            Deployment deployment = repositoryService.createDeployment()
                .addInputStream(bpmnName, bpmnIn)
                .addInputStream(pngName, pngIn)
                .deploy();
            
            System.out.println("部署id:"+deployment.getId());
            System.out.println("部署的name:"+deployment.getDeploymentTime());
            
        }

      查询流程的定义

    //查询流程定义
        @Test
        public void queryProcessDefinition(){
            
            RepositoryService repositoryService =   engine.getRepositoryService();
            //创建流程定义查询对象
            ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();
            
            String processDefinitionKey = "purchasingflow";
            //设置流程定义的key的查询条件
            definitionQuery.processDefinitionKey(processDefinitionKey);
            //查询所有的流程定义
            List<ProcessDefinition> processDefinitionList = definitionQuery.list();
            for(ProcessDefinition definition:processDefinitionList){
                System.out.println("-------------------------");
                System.out.println("流程定义id:"+definition.getId());
                System.out.println("流程资源名:"+definition.getResourceName());
                System.out.println("流程部署id:"+definition.getDeploymentId());
            }
            
        
        }

      启动一个流程实例

    //启动一个流程实例
        @Test
        public void startProcessInstance(){
            
            RuntimeService runtimeService = engine.getRuntimeService();
            
            String processDefinitionKey = "purchasingflow";
            //根据流程定义的key启动一个流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
            System.out.println("流程实例id:"+processInstance.getId());
            System.out.println("流程定义id:"+processInstance.getProcessDefinitionId());
            
            
        }

      查询当前处理人的任务

    //查询当前用户的代办任务
        @Test
        public void queryProcessInstance(){
            
            //查询任务使用的service
            TaskService taskService = engine.getTaskService();
            //获取任务查询对象
            TaskQuery taskQuery = taskService.createTaskQuery();
            taskQuery.taskAssignee("zhangsan");
            //查询该条件下的所有的任务
            List<Task> tasks =taskQuery.list();
            for(Task task:tasks){
                System.out.println("当前任务id:"+task.getId());
                System.out.println("当前任务所属流程定义id:"+task.getProcessDefinitionId());
                System.out.println("当前任务的key:"+task.getTaskDefinitionKey());
            }
            
        }

      完成一个流程

    //完成一个流程
        @Test
        public void completeProcessInstance(){
            
            //任务的id,后期整合后会通过当前登录人身份查询到该用户的任务,然后获取到该id
            String taskId="402";
            TaskService taskService = engine.getTaskService();
            //根据任务id完成该任务
            taskService.complete(taskId);
            
        }
  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/chengyangyang/p/9407448.html
Copyright © 2011-2022 走看看