日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

activiti入门2流程引擎API和服务基础设施

發布時間:2024/8/26 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 activiti入门2流程引擎API和服务基础设施 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RepositoryService :?管理和控制公布包和流程定義(包括了一個流程每一個環節的結構和行為)的操作

除此之外,服務能夠

  • 查詢引擎中的公布包和流程定義。

  • 暫?;蚣せ罟及O鄳泻吞囟鞒潭x。 暫停意味著它們不能再運行不論什么操作了。激活是相應的反向操作。

  • 獲得多種資源,像是包括在公布包里的文件。 或引擎自己主動生成的流程圖。

  • 獲得流程定義的pojo版本號。 能夠用來通過java解析流程。而不必通過xml。

RuntimeService :負責啟動一個流程定義的新實例,獲取和保存流程變量,查詢流程實例和運行

TaskService :全部與任務有關的功能

  • 查詢分配給用戶或組的任務

  • 創建獨立執行任務。這些任務與流程實例無關。

  • 手工設置任務的運行者,或者這些用戶通過何種方式與任務關聯。

  • 認領并完畢一個任務。認領意味著一個人期望成為任務的運行者。 即這個用戶會完畢這個任務。

    完畢意味著“做這個任務要求的事情”。 通常來說會有非常多種處理形式。

IdentityService:?管理(創建,更新,刪除,查詢...)群組和用戶

?FormService:?一個可選服務,這個服務提供了啟動表單任務表單兩個概念

?HistoryService:?提供了Activiti引擎的全部歷史數據

ManagementService :在使用Activiti的定制環境中基本上不會用到。 它能夠查詢數據庫的表和表的元數據。另外,它提供了查詢和管理異步操作的功能。?


RepositoryService

獲取方式:

//通過activiti.cfg.xml獲取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService();
不論什么與“靜態”資源有關的數據(比方流程定義)都能夠通過?RepositoryService訪問。

從概念上講,所以靜態數據都是Activiti的資源內容。


部署流程文件:

/*** 公布流程* 公布流程后。流程文件會保存到數據庫中*/@Testpublic void deployFlow(){RepositoryService repositoryService = processEngine.getRepositoryService();//獲取在classpath下的流程文件InputStream in = this.getClass().getClassLoader().getResourceAsStream("myleave.zip");ZipInputStream zipInputStream = new ZipInputStream(in);//使用deploy方法公布流程repositoryService.createDeployment()//通過ZIP方式來部署流程文件.addZipInputStream(zipInputStream)//通過輸入流來部署流程文件//.addInputStream("xx.bpmn",inputStream)//.addInputStream("xx.png", inputStream).name("Myleave")//設置流程定義的別名.deploy();//部署}當文件部署成功后,會操作數據庫中的這三張表

act_re_deployment ?(部署信息表)?

存放流程定義的別名和部署時間

act_re_procdef(流程定義數據表)

存放流程定義的信息。每部署一個新的流程定義都會在這張表中添加一條記錄。

假設當KEY同樣 也就是 bpmn流程文件的 ID 同樣是 ?添加的記錄里面的版本號會升級一個版本號

act_ge_bytearray(資源文件表)

存放部署后的流程文件


查看流程定義信息:

/*** 查看流程定義* 查詢act_re_procdef表 流程定義表*/@Testpublic void queryProcdef(){RepositoryService repositoryService = processEngine.getRepositoryService();//創建查詢對象ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();//加入查詢條件query.processDefinitionKey("myProcess");//通過key獲取// .processDefinitionName("My process")//通過name獲取// .orderByProcessDefinitionId()//依據ID排序//.processDefinitionKeyLike(processDefinitionKeyLike)//支持模糊查詢//.listPage(firstResult, maxResults)//分頁//運行查詢獲取流程定義明細List<ProcessDefinition> pds = query.list();//獲取批量的明細//.singleResult()//獲取單個的明細for (ProcessDefinition pd : pds) {System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+",RESOURCE_NAME:"+pd.getResourceName()+",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName());System.out.println("------------------------------------------------");}}

執行結果:

ID:myProcess:1:604,NAME:My process,KEY:myProcess,DEPLOYMENT_ID:601,VERSION:1,RESOURCE_NAME:MyLeave.bpmn,DGRM_RESOURCE_NAME:MyLeave.png ------------------------------------------------ ID:myProcess:2:809,NAME:My process,KEY:myProcess,DEPLOYMENT_ID:806,VERSION:2,RESOURCE_NAME:MyLeave.bpmn,DGRM_RESOURCE_NAME:MyLeave.png ------------------------------------------------

顯示圖片:

通過repositoryService查看流程定義信息,而且獲取DEPLOYMENT_ID到?act_ge_bytearray?查詢到 資源文件名稱

通過資源文件名稱和deploymentId獲取流并輸出到文件里

/*** 顯示圖片信息* @throws IOException*/@Testpublic void showImg() throws IOException{String deploymentId = "601";//通過deploymentId獲取資源名稱List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);String imgName = null;for (String name : names) {System.out.println("name:"+name);if (name.endsWith(".png")) {imgName = name;}}System.out.println("imgName:"+imgName);if (imgName != null) {File file = new File("e:/"+imgName);//獲取資源文件的流InputStream in = processEngine.getRepositoryService().getResourceAsStream(deploymentId, imgName);//通過FileUtils將資源文件以流的信息輸出到指定文件FileUtils.copyInputStreamToFile(in, file);}}在E盤下查看 生成的照片


刪除流程定義:

/*** 刪除流程定義*/@Testpublic void delDeployment(){String deploymentId = "1";processEngine.getRepositoryService()//普通刪除,刪除沒有在運行的流程,假設流程正在運行,則拋出異常//.deleteDeployment(deploymentId);//級聯刪除,無論你在不在運行,會刪除當前關聯的全部信息,包含在歷史表里的數據.deleteDeployment(deploymentId, true);}


RuntimeService

獲取方式:

//通過activiti.cfg.xml獲取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RuntimeService runtimeService = processEngine.getRuntimeService();
啟動一個流程實例:

/*** 啟動流程實例*/@Testpublic void startFlow(){RuntimeService runtimeService = processEngine.getRuntimeService();//通過Id來啟動一個流程并返回一個流程實例ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");System.out.println("id:"+processInstance.getId()+",activitiId:"+processInstance.getActivityId());}當一個流程實例啟動后,會在?act_ru_execution?表中插入一條記錄,假設是用戶任務節點,同一時候也會在act_ru_task表中插入一條記錄

查詢流程狀態:

/*** 查看流程狀態*/@Testpublic void queryState(){String processInstanceId = "701";ProcessInstance pi = processEngine.getRuntimeService()//創建運行對象查詢,查詢正在運行的運行對象//.createExecutionQuery().createProcessInstanceQuery()//創建流程實例查詢,查詢正在運行的流程實例.processInstanceId(processInstanceId)//通過流程實例ID查詢//返回批量結果//.list().singleResult();//返回唯一的結果if (pi != null) {System.out.println("當前流程:"+pi.getActivityId());}else {System.out.println("流程已經結束");}}在整個流程運行的過程中,流程ID 都是 唯一不變的,當流程結束后 流程記錄就會在?act_ru_execution?表中被刪除,存入到歷史表

設置和獲取流程變量:

/*** 通過runtimeService設置流程變量* 設置流程變量*/public void setAndGetVariables(){RuntimeService runtimeService = processEngine.getRuntimeService();//通過運行對象ID和key value設置變量//value是一個object對象,當一個pojo類實現Serializable接口的時候就能夠存入流程變量中//runtimeService.setVariable(executionId, key, value);//設置專屬于一個運行對象ID的流程變量//runtimeService.setVariableLocal(executionId, key, value);//通過運行對象ID和Map設置多個變量Map<String, Object> paramMap = new HashMap<String, Object>();//runtimeService.setVariables(executionId, paramMap);//設置專屬于一個運行對象ID的多個流程變量//runtimeService.setVariablesLocal(executionId, paramMap);//通過運行對象ID獲取變量,返回object,須要強轉//runtimeService.getVariable(executionId, key);//通過運行對象ID獲取一個Map<String, Object>對象//runtimeService.getVariables(executionId);}
流程變量所支持的類型


設置的流程變量會存入到act_ru_variable

act_ru_variable表? 的BYTEARRAY_ID_相應的是?act_ge_bytearray 假設是復雜類型的數據 ?會存入二進制字段中


TaskService

獲取方式:

//通過activiti.cfg.xml獲取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//獲取任務服務對象TaskService taskService = processEngine.getTaskService();查看個人任務:

/*** 查看任務*/@Testpublic void queryTask(){//獲取任務服務對象TaskService taskService = processEngine.getTaskService();//依據接受人查詢該用戶的任務List<Task> tasks = taskService.createTaskQuery()//模糊查詢//.taskAssigneeLike(assigneeLike)//通過運行對象ID查詢任務//.executionId(executionId).taskAssignee("張三")//通過接受人來查詢個人任務.list();for (Task task : tasks) {System.out.println("ID:"+task.getId()+",姓名:"+task.getName()+",接收人:"+task.getAssignee()+",開始時間:"+task.getCreateTime());}}

執行結果

ID:704,姓名:員工請假,接收人:張三,開始時間:Wed Oct 22 17:03:04 CST 2014 ID:804,姓名:員工請假,接收人:張三,開始時間:Thu Oct 23 11:27:47 CST 2014

除了個人任務 還有 組任務


辦理任務:

/*** 辦理任務*/@Testpublic void startTask(){TaskService taskService = processEngine.getTaskService();//taskId 就是查詢任務中的 IDString taskId = "704";//完畢請假申請任務taskService.complete(taskId );}
taskService 和 runtimeService 一樣都是能夠設置流程變量的


HistoryService

獲取方式:

//通過activiti.cfg.xml獲取流程引擎ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); HistoryService historyService = processEngine.getHistoryService();
查詢歷史任務:

/*** 查詢歷史任務*/@Testpublic void queryHistoryTask(){String assignee = "張三";HistoryService historyService = processEngine.getHistoryService();List<HistoricTaskInstance> htis = historyService.createHistoricTaskInstanceQuery()//創建歷史任務查詢<span style="font-family: Arial, Helvetica, sans-serif;">對象</span>//創建一個歷史具體信息查詢<span style="font-family: Arial, Helvetica, sans-serif;">對象</span>//.createHistoricDetailQuery()//創建歷史流程實例查詢對象//.createHistoricProcessInstanceQuery().taskAssignee(assignee)//依據接受人查詢歷史任務.list();//返回批量結果for (HistoricTaskInstance hti : htis) {System.out.println("ID:"+hti.getId()+",流程實例ID:"+hti.getProcessInstanceId()+",接收人:"+hti.getAssignee()+",運行對象ID:"+hti.getExecutionId());System.out.println("------------------------------------------------");}}結果:

ID:704,流程實例ID:701,接收人:張三,運行對象ID:701 ------------------------------------------------ ID:804,流程實例ID:801,接收人:張三,運行對象ID:801 ------------------------------------------------


主要是查詢act_hi_taskinst表中的數據


查詢歷史流程實例:

/*** 查詢歷史流程實例*/@Testpublic void queryHistoryPi(){HistoryService historyService = processEngine.getHistoryService();String pi = "701";List<HistoricProcessInstance> hpis = historyService.createHistoricProcessInstanceQuery()//創建歷史流程實例查詢對象.processInstanceId(pi).list();for (HistoricProcessInstance hpi : hpis) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("實例ID:"+hpi.getId()+",開始時間:"+sdf.format(hpi.getStartTime())+",結束時間:"+sdf.format(hpi.getEndTime()));System.out.println("-------------------------------------");}}結果:

實例ID:701,開始時間:2014-10-22 17:03:04,結束時間:2014-10-23 15:25:03 -------------------------------------


主要是查詢act_hi_procinst表中的數據


獲取歷史流程變量:

/*** 獲取歷史流程變量*/@Testpublic void getHistoryVariable(){HistoryService historyService = processEngine.getHistoryService();List<HistoricVariableInstance> hvis = historyService.createHistoricVariableInstanceQuery()//創建一個歷史流程變量實例查詢對象.variableName("key")//通過key查詢.list();if (hvis != null) {for (HistoricVariableInstance hvi : hvis) {System.out.println("key:"+hvi.getVariableName()+",value:"+hvi.getValue());}}}
主要是查詢act_hi_varinst表中的數據

查詢歷史活動信息:

/*** 查詢歷史活動信息* 主要查詢的是act_hi_actinst表中的數據*/@Testpublic void queryHistoryAi(){String pi = "701";HistoryService historyService = processEngine.getHistoryService();List<HistoricActivityInstance> hais = historyService.createHistoricActivityInstanceQuery()//創建歷史活動實例查詢對象.processInstanceId(pi).list();for (HistoricActivityInstance hai : hais) {System.out.println("活動ID:"+hai.getActivityId()+",活動名稱:"+hai.getActivityName()+",活動類型:"+hai.getActivityType()+",流程實例ID:"+hai.getProcessInstanceId()+",接收人:"+hai.getAssignee());System.out.println("--------------------------------");}}結果:

活動ID:endevent1,活動名稱:End,活動類型:endEvent,流程實例ID:701,接收人:null -------------------------------- 活動ID:startevent1,活動名稱:Start,活動類型:startEvent,流程實例ID:701,接收人:null -------------------------------- 活動ID:員工請假,活動名稱:員工請假,活動類型:userTask,流程實例ID:701,接收人:張三 -------------------------------- 活動ID:老板審批,活動名稱:老板審批,活動類型:userTask,流程實例ID:701,接收人:老板 --------------------------------

這幾個是最經常使用的幾個服務.


流程實例和運行對象的差別 ? 流程實例和運行對象 2個是不同的一個概念




版權聲明:本文博主原創文章。博客地址:http://blog.csdn.net/a67474506?

viewmode=contents

轉載于:https://www.cnblogs.com/zfyouxi/p/4797460.html

總結

以上是生活随笔為你收集整理的activiti入门2流程引擎API和服务基础设施的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。