




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、activiti流程開發(fā)指南· 一、BPMN· 二、activiti主要接口· 三、如何實現(xiàn)一個業(yè)務(wù)流程· 四、如何管理所有流程與實例· 五、開發(fā)流程· 六、api一、BPMN1. 什么是BPMN 首先BPMN規(guī)范是由標準組織BPMI發(fā)布的.BPMN 1.0規(guī)范發(fā)布于2004年5月。此規(guī)范展示了BPMI組織兩年多的努力成果。BPMN的主要目標就是要提供被所有業(yè)務(wù)用戶理解的一套 標記語言,包括業(yè)務(wù)分析者、軟件開發(fā)者以及業(yè)務(wù)管理者與監(jiān)察者。BPMN還將支持生成可執(zhí)行的BPEL4WS語言。所以,BPM
2、N在業(yè)務(wù)流程設(shè)計與流程實現(xiàn)之間搭建了一條標準化的橋梁。 BPMN定義了 業(yè)務(wù)流程圖,其基于流程圖技術(shù),同時為創(chuàng)建業(yè)務(wù)流程操作的圖形化模型進行了裁減。業(yè)務(wù)流程的模型就是圖形化對象的網(wǎng)圖,包括活動(也可以說工作)和定義操作順序的流控制。 2. BPMN基礎(chǔ) 業(yè)務(wù)流程圖由一系列的圖形化元素組成。這些元素簡化了模型的開發(fā),且業(yè)務(wù)分析者看上去非常熟悉。這些元素每個都有各自的特性,且與大多數(shù)的建模器類似。比如,活動是矩形,條件是菱形。應(yīng)該強調(diào)的是:開發(fā)BPMN的動力就是為了在創(chuàng)建業(yè)務(wù)流程模型時提供一個簡單的機制,同時又能夠處理來自業(yè)務(wù)流程的復(fù)雜性。要處理這兩個矛盾的需
3、求的方法就是將標記的圖形化方面組織分類為特定的類別。這里提供標記類別中的一小部分,以便 業(yè)務(wù)流程圖的讀者可以簡單地識別出元素的基本類型從而理解圖形。以下是四種基本的類型: 1)流對象 2)連接對象 3)泳道 4)人工信息 BPMN2.0概要: 二、activiti主要接口ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();Ru
4、ntimeService runtimeService = processEngine.getRuntimeService();RepositoryService repositoryService = processEngine.getRepositoryService();TaskService taskService = processEngine.getTaskService();ManagementService managementService = processEngine.getManagementService();IdentityService identityServi
5、ce = processEngine.getIdentityService();HistoryService historyService = processEngine.getHistoryService();FormService formService = processEngine.getFormService(); ProcessEngines.getDefaultProcessEngine()會在第一次調(diào)用時 初始化并創(chuàng)建一個流程引擎,以后再調(diào)用就會返回相同的流程引擎。 使用對應(yīng)的方法可以創(chuàng)建和關(guān)閉所有流程引擎:ProcessEngines.in
6、it() 和 ProcessEngines.destroy()。 ProcessEngines會掃描所有activiti.cfg.xml 和 activiti-context.xml 文件。 對于activiti.cfg.xml文件,流程引擎會使用Activiti的經(jīng)典方式構(gòu)建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine().
7、 對于activiti-context.xml文件,流程引擎會使用Spring方法構(gòu)建:先創(chuàng)建一個Spring的環(huán)境, 然后通過環(huán)境獲得流程引擎。所有服務(wù)都是無狀態(tài)的。這意味著可以在多節(jié)點集群環(huán)境下運行Activiti,每個節(jié)點都指向同一個數(shù)據(jù)庫, 不用擔心哪個機器實際執(zhí)行前端的調(diào)用。 無論在哪里執(zhí)行服務(wù)都沒有問題 RepositoryService可能是使用Activiti引擎時最先接觸的服務(wù)。 它提供了管理和控制發(fā)布包和流程定義的操作。 這里不涉及太多細節(jié),流程定義是BPMN 2.0流程的java實現(xiàn)。 它包含了一個流程每個環(huán)節(jié)的結(jié)構(gòu)和行
8、為。 發(fā)布包是Activiti引擎的打包單位。一個發(fā)布包可以包含多個BPMN 2.0 xml文件和其他資源。 開發(fā)者可以自由選擇把任意資源包含到發(fā)布包中。 既可以把一個單獨的BPMN 2.0 xml文件放到發(fā)布包里,也可以把整個流程和相關(guān)資源都放在一起。 (比如,'hr-processes'實例可以包含hr流程相關(guān)的任何資源)。 可以通過RepositoryService來部署這種發(fā)布包。 發(fā)布一個發(fā)布包,意味著把它上傳到引擎中,所有流程都會在保存進數(shù)據(jù)庫之前分析解析好。 從這點來說,系統(tǒng)知道這個發(fā)布包的存在,發(fā)布包中包含的流程就已經(jīng)可以啟動了。除此之外,服務(wù)可以
9、183;o 查詢引擎中的發(fā)布包和流程定義。o 暫?;蚣せ畎l(fā)布包,對應(yīng)全部和特定流程定義。 暫停意味著它們不能再執(zhí)行任何操作了,激活是對應(yīng)的反向操作。o 獲得多種資源,像是包含在發(fā)布包里的文件, 或引擎自動生成的流程圖。o 獲得流程定義的pojo版本, 可以用來通過java解析流程,而不必通過xml。正如RepositoryService負責靜態(tài)信息(比如,不會改變的數(shù)據(jù),至少是不怎么改變的), RuntimeService正好是完全相反的。它負責啟動一個流程定義的新實例。 如上所述,流程定義定義了流程各個節(jié)點的結(jié)構(gòu)和行為。 流程實例就是這樣一個流程定義的實例。對每個流程定義來說,同一
10、時間會有很多實例在執(zhí)行。 RuntimeService也可以用來獲取和保存流程變量。 這些數(shù)據(jù)是特定于某個流程實例的,并會被很多流程中的節(jié)點使用 (比如,一個排他網(wǎng)關(guān)常常使用流程變量來決定選擇哪條路徑繼續(xù)流程)。 Runtimeservice也能查詢流程實例和執(zhí)行。 執(zhí)行對應(yīng)BPMN 2.0中的'token'?;旧蠄?zhí)行指向流程實例當前在哪里。 最后,RuntimeService可以在流程實例等待外部觸發(fā)時使用,這時可以用來繼續(xù)流程實例。 流程實例可以有很多暫停狀態(tài),而服務(wù)提供了多種方法來'觸發(fā)'實例, 接受外部觸發(fā)后,流程實例就會繼續(xù)向下執(zhí)
11、行。任務(wù)是由系統(tǒng)中真實人員執(zhí)行的,它是Activiti這類BPMN引擎的核心功能之一。 所有與任務(wù)有關(guān)的功能都包含在TaskService中:·o 查詢分配給用戶或組的任務(wù)o 創(chuàng)建獨立運行任務(wù)。這些任務(wù)與流程實例無關(guān)。o 手工設(shè)置任務(wù)的執(zhí)行者,或者這些用戶通過何種方式與任務(wù)關(guān)聯(lián)。o 認領(lǐng)并完成一個任務(wù)。認領(lǐng)意味著一個人期望成為任務(wù)的執(zhí)行者, 即這個用戶會完成這個任務(wù)。完成意味著“做這個任務(wù)要求的事情”。 通常來說會有很多種處理形式。 IdentityService非常簡單。它可以管理(創(chuàng)建,更新,刪除,查詢.)群組和用戶。 請注意,
12、 Activiti執(zhí)行時并沒有對用戶進行檢查。 例如,任務(wù)可以分配給任何人,但是引擎不會校驗系統(tǒng)中是否存在這個用戶。 這是Activiti引擎也可以使用外部服務(wù),比如ldap,活動目錄,等等。 FormService是一個可選服務(wù)。即使不使用它,Activiti也可以完美運行, 不會損失任何功能。這個服務(wù)提供了啟動表單和任務(wù)表單兩個概念。 啟動表單會在流程實例啟動之前展示給用戶, 任務(wù)表單會在用戶完成任務(wù)時展示。Activiti支持在BPMN 2.0流程定義中設(shè)置這些表單。 這個服務(wù)以一種簡單的方式將數(shù)據(jù)暴露出來。再次重申,它時可選的,
13、 表單也不一定要嵌入到流程定義中。 HistoryService提供了Activiti引擎收集的所有歷史數(shù)據(jù)。 在執(zhí)行流程時,引擎會保存很多數(shù)據(jù)(根據(jù)配置),比如流程實例啟動時間,任務(wù)的參與者, 完成任務(wù)的時間,每個流程實例的執(zhí)行路徑,等等。 這個服務(wù)主要通過查詢功能來獲得這些數(shù)據(jù)。 ManagementService在使用Activiti的定制環(huán)境中基本上不會用到。 它可以查詢數(shù)據(jù)庫的表和表的元數(shù)據(jù)。另外,它提供了查詢和管理異步操作的功能。 Activiti的異步操作用途很多,比如定時器,異步操作, 延遲暫停、激活,等等。 三、如何
14、實現(xiàn)一個業(yè)務(wù)流程1. 靜態(tài)表單(每個節(jié)點繪制對應(yīng)的表單) o 創(chuàng)建工作流實例(process_model)o 創(chuàng)建每個節(jié)點的jsp表單一般以list頁面彈出一個form表單頁面就可以,至于表單的字段隱藏或者展示,由表單自己控制。·o 部署流程把process_model導(dǎo)出為BPMN.XML格式,再導(dǎo)入進行流程部署· 開始流程保存業(yè)務(wù)實體leaveManager.saveLeave(entity);開始業(yè)務(wù)流程/ 用來設(shè)置啟動流程的人員ID,引擎會自動把用戶ID保存到activiti:initiator中identityService.setAuthenticatedUse
15、rId(entity.getUserId();/process為流程keyprocessInstance = runtimeService.startProcessInstanceByKey("process", businessKey, variables); · 辦理流程taskSplete(taskId, variables);其中variables是可以傳遞在流程間的變量,通過Map<String, Object> variables = taskService.getVariables(taskId)可以獲取那些變量。 &
16、#183; 待辦列表TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId);/自己辦理或在該節(jié)點對應(yīng)工作組中的流程 · 過程中列表ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery().processDefinitionKey("process").active().orderByProcessInstanceId().desc();List<Pro
17、cessInstance> list = query.listPage(pageParams0, pageParams1); · 已結(jié)束列表HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().processDefinitionKey("process").finished().orderByProcessInstanceEndTime().desc();List<HistoricProcessInstance>
18、list = query.listPage(pageParams0, pageParams1); 四、如何管理所有流程與實例· 查看所有已部署的流程repositoryService.createProcessDefinitionQuery().active().orderByDeploymentId().desc();· 查看所有待辦tasks = taskService.createTaskQuery().active().orderByTaskId().desc().list();個人待辦tasks = taskService.createTaskQuery
19、().taskCandidateOrAssigned(user.getId().active().orderByTaskId().desc().list();· 查看所有辦理中ProcessInstanceQuery dynamicQuery = runtimeService.createProcessInstanceQuery().orderByProcessInstanceId().desc().active();辦理中(本人)ProcessInstanceQuery dynamicQuery = runtimeService.createProcessInstanceQuery
20、().involvedUser(UserUtil.getUserFromSession(session).getId().orderByProcessInstanceId().desc().active();· 查看所有已辦HistoricProcessInstanceQuery dynamicQuery = historyService.createHistoricProcessInstanceQuery().finished().orderByProcessInstanceEndTime().desc();已辦(本人)HistoricProcessInstanceQuery dy
21、namicQuery = historyService.createHistoricProcessInstanceQuery().involvedUser(UserUtil.getUserFromSession(session).getId().finished().orderByProcessInstanceEndTime().desc(); 五、開發(fā)流程1. 繪制流程圖 · 單節(jié)點,多用戶流程:必須設(shè)置下圖紅框?qū)傩?,Multi-instance type 代表是單用戶還是多用戶,,
22、 Collection (Multi-instance),代表是用戶的集合名稱,需要在代碼中設(shè)置 Element variable (Multi-instance),集合中的屬性,不需要設(shè)置。 · 并行網(wǎng)關(guān),不管是否設(shè)置條件,都會并行執(zhí)行· 包容網(wǎng)關(guān),根據(jù)條件可以執(zhí)行單個或多個分支。注意點:1.繪制流程的時候,箭頭保證一定要已連接到usertask 2.保證網(wǎng)關(guān)使用的時候,條件要寫明
23、160; 3.保證流程繪制的簡單化,重復(fù)節(jié)點最好保證使用同一個usertask,減少jsp代碼的編寫量。 2.表單編寫 3.編寫后臺entity · entity 繼承model類,model類中存在一個公共的業(yè)務(wù)實體commmodel,用來存儲表單共用的的屬性。 4.編寫后臺controller· controller 繼承modelcontroller,modelcontroller存在待辦,已
24、辦,辦理的查詢列表,完成以及開始功能也存在,只是由于開始和完成可能存在不同的業(yè)務(wù)需求,所以還是寫在自己的controller中。· startWorkflow 開始流程· complete完成任務(wù)· taskList待辦列表· runningList辦理列表· finishedList已辦列表5.編寫前臺表單JS控制· setStep() 設(shè)置每一步的可編輯與不可編輯· complete()完成任務(wù),調(diào)用comm.js中的completeForm(users, userKey, key, tkey, taskid, url);參數(shù):users,代表多用戶任務(wù)中的人員ID,使用逗號分隔開,無則為空 userKey,是流程圖中定義的Collection (Multi-instance
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房承包協(xié)議合同范本
- 公司食堂合同范本
- 公司精簡勞動合同范本
- 單位報價合同范本
- 原裝鋼琴租售合同范本
- 出租毛坯水電合同范本
- 債權(quán)置換房合同范本
- 三人合伙協(xié)議合同范例
- 關(guān)于售后合同范本
- 鄉(xiāng)鎮(zhèn)吊車出租合同范本
- GB 29444-2012煤炭井工開采單位產(chǎn)品能源消耗限額
- 影視廣告賞析課件
- 車間維修電工安全技術(shù)操作規(guī)程
- 燒傷整形外科分層次培訓(xùn)考試題及答案
- 教學(xué)課件 211和985工程大學(xué)簡介
- 實木家具生產(chǎn)標準工藝標準流程
- 熱導(dǎo)檢測器(TCD)原理與操作注意事項
- 專升本高等數(shù)學(xué)的講義80頁PPT課件
- 特種設(shè)備停用報廢注銷申請表
- 糖尿病酮癥酸中毒ppt課件
- 五年級下冊英語課件--Lesson--7《Arriving-in-Beijing-》|冀教版-(三起)-(共21張PPT)
評論
0/150
提交評論