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的流程有個大概的瞭解html

   

  建立流程引擎java

    通常java中使用工做流,都是和spring框架結合進行使用的,具體狀況後續添加。mysql

  

//普通方法的建立

/*
* * 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("建立引擎成功"); } }

 

  流程部署spring

/*
     * 獲取流程引擎對象,下面的方法會默認查找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());
        
    }

 

  查詢流程的定義sql

//查詢流程定義
    @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());
        
        
    }

 

  查詢當前處理人的任務api

//查詢當前用戶的代辦任務
    @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);
        
    }
相關文章
相關標籤/搜索