連接:activiti 表名稱的解釋
工做流從流程定義到建立一個流程實例完成執行步驟(省略bpmn的畫法)
工做流的全部操做都是使用流程引擎來進行操做的,流程引擎只是存儲流程的過程,而不存儲具體的業務數據,須要自行創建相關的表,工做流的特色是流程和業務的關聯具體步驟以下。
上面就是一個最簡單從上往下執行的流程的執行步驟,本章節都是以代碼作示例,代碼很少,可是都執行一遍,你會對整個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); }