activiti流程開發(fā)基本步驟詳解_第1頁
activiti流程開發(fā)基本步驟詳解_第2頁
activiti流程開發(fā)基本步驟詳解_第3頁
activiti流程開發(fā)基本步驟詳解_第4頁
activiti流程開發(fā)基本步驟詳解_第5頁
免費預覽已結束,剩余7頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、activiti流程開發(fā)指南一、BPMN.二、activiti主要接口.三、如何實現(xiàn)一個業(yè)務流程.四、如何管理所有流程與實例五、開發(fā)流程api、BPMN1, 什么是BPMN首先BPMN規(guī)范是由標準組織BPMI發(fā)布的.BPMN1.0規(guī)范發(fā)布于2004年5月。此規(guī)范展示了BPMI組織兩年多的努力成果。BPMN的主要目標就是要提供被所有業(yè)務用戶理解的一套也R語言,包括業(yè)務分析者、軟件開發(fā)者以及業(yè)務管理者與監(jiān)察者。BPMN還將支持生成可執(zhí)行的BPEL4WS語言。所以,BPMN在業(yè)務流程設計與流程實現(xiàn)之間搭建了一條標準化的橋梁。BPMN定義了業(yè)務流程圖,其基于流程圖技術,同時為創(chuàng)建業(yè)務流程操作的圖形化模

2、型進行了裁減。業(yè)務流程的模型就是圖形化對象的網(wǎng)圖,包括活動(也可以說工作)和定義操作順序的流控制。2, BPMN基礎業(yè)務流程圖由一系列的圖形化元素組成。這些元素簡化了模型的開發(fā),且業(yè)務分析者看上去非常熟悉。這些元素每個都有各自的特性,且與大多數(shù)的建模器類似。比如,活動是矩形,條件是菱形。應該強調的是:開發(fā)BPMN的動力就是為了在創(chuàng)建業(yè)務流程模型時提供一個簡單的機制,同時又能夠處理來自業(yè)務流程的復雜性。要處理這兩個矛盾的需求的方法就是將標記的圖形化方面組織分類為特定的類別。這里提供標記類別中的一小部分,以便業(yè)務流程圖的讀者可以簡單地識別出元素的基本類型從而理解圖形。以下是四種基本的類型:1 )流

3、對象2 )連接對象3 )泳道4 )人工信息BPMN2.0概要:http:、activiti主要接口ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();RuntimeServiceruntimeService=processEngine.getRuntimeService();RepositoryServicerepositoryService=processEngine.getRepositoryService();TaskServicetaskService=processEngine.getTaskServ

4、ice();ManagementServicemanagementService=processEngine.getManagementService();IdentityServiceidentityService=processEngine.getIdentityService();HistoryServicehistoryService=processEngine.getHistoryService();FormServiceformService=processEngine.getFormService();ProcessEngines.getDefaultProcessEngine(

5、)會在第一次調用時初始化并創(chuàng)建一個流程引擎,以后再調用就會返回相同的流程引擎。使用對應的方法可以創(chuàng)建和關閉所有流程引擎:ProcessEngines.init()和ProcessEngines.destroy()。ProcessEngines會掃描所有activiti.cfg.xml和activiti-context.xml文件。對于activiti.cfg.xml文件,流程引擎會使用Activiti的經(jīng)典方式構建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).bu

6、ildProcessEngine().對于activiti-context.xml文件,流程弓I擎會使用Spring方法構建:先創(chuàng)建一個Spring的環(huán)境,然后通過環(huán)境獲得流程引擎。所有服務都是無狀態(tài)的。這意味著可以在多節(jié)點集群環(huán)境下運行Activiti,每個節(jié)點都指向同一個數(shù)據(jù)庫,不用擔心哪個機器實際執(zhí)行前端的調用。無論在哪里執(zhí)行服務都沒有問題Repositoryservice可能是使用Activiti引擎時最先接觸的服務。它提供了管理和控制發(fā)布包和流程定義的操作。這里不涉及太多細節(jié),流程定義是BPMN2.0流程的java實現(xiàn)。它包含了一個流程每個環(huán)節(jié)的結構和行為。發(fā)布包是Activiti引

7、擎的打包單位。一個發(fā)布包可以包含多個BPMN2.0xml文件和其他資源。開發(fā)者可以自由選擇把任意資源包含到發(fā)布包中。既可以把一個單獨的BPMN2.0xml文件放到發(fā)布包里,也可以把整個流程和相關資源都放在一起。(比如,hr-processes,實例可以包含hr流程相關的任何資源)??梢酝ㄟ^RepositoryService來夸口署這種發(fā)布包。發(fā)布一個發(fā)布包,意味著把它上傳到引擎中,所有流程都會在保存進數(shù)據(jù)庫之前分析解析好。從這點來說,系統(tǒng)知道這個發(fā)布包的存在,發(fā)布包中包含的流程就已經(jīng)可以啟動了。除此之外,服務可以o查詢引擎中的發(fā)布包和流程定義。o暫?;蚣せ畎l(fā)布包,對應全部和特定流程定義。暫停意

8、味著它們不能再執(zhí)行任何操作了,激活是對應的反向操作。o獲得多種資源,像是包含在發(fā)布包里的文件,或引擎自動生成的流程圖。o獲得流程定義的pojo版本,可以用來通過java解析流程,而不必通過xml。正如RepositoryService負責靜態(tài)信息(比如,不會改變的數(shù)據(jù),至少是不怎么改變的),Runtimeservice正好是完全相反的。它負責啟動一個流程定義的新實例。如上所述,流程定義定義了流程各個節(jié)點的結構和行為。流程實例就是這樣一個流程定義的實例。對每個流程定義來說,同一時間會有很多實例在執(zhí)行。RuntimeService也可以用來獲取和保存流程變量。這些數(shù)據(jù)是特定于某個流程實例的,并會被

9、很多流程中的節(jié)點使用(比如,一個排他網(wǎng)關常常使用流程變量來決定選擇哪條路彳繼續(xù)流程)。Runtimeservice也能查詢流程實例和執(zhí)行。執(zhí)行對應bpmn2.0中的,token'。基本上執(zhí)行指向流程實例當前在哪里。最后,RuntimeService可以在流程實例等待外部觸發(fā)時使用,這時可以用來繼續(xù)流程實例。流程實例可以有很多暫停狀態(tài),而服務提供了多種方法來,觸發(fā),實例,接受外部觸發(fā)后,流程實例就會繼續(xù)向下執(zhí)行。任務是由系統(tǒng)中真實人員執(zhí)行的,它是Activiti這類BPMN引擎的核心功能之一。所有與任務有關的功能都包含在TaskService中:o查詢分配給用戶或組的任務o創(chuàng)建獨立運行任

10、務。這些任務與流程實例無關。o手工設置任務的執(zhí)行者,或者這些用戶通過何種方式與任務關聯(lián)。o認領并完成一個任務。認領意味著一個人期望成為任務的執(zhí)行者,即這個用戶會完成這個任務。完成意味著做這個任務要求的事情通常來說會有很多種處理形式。IdentityService非常簡單。它可以管理(創(chuàng)建,更新,刪除,查詢.)群組和用戶。請注意,Activiti執(zhí)行時并沒有對用戶進行檢查。例如,任務可以分配給任何人,但是引擎不會校驗系統(tǒng)中是否存在這個用戶。這是Activiti引擎也可以使用外部服務,比如ldap,活動目錄,等等。FormService是一個可選服務。即使不使用它,Activiti也可以完美運行,

11、不會損失任何功能。這個服務提供了啟動表單和任務表單兩個概念。啟動表單會在流程實例啟動之前展示給用戶,任務表單會在用戶完成任務時展示。Activiti支持在BPMN2.0流程定義中設置這些表單。這個服務以一種簡單的方式將數(shù)據(jù)暴露出來。再次重申,它時可選的,表單也不一定要嵌入到流程定義中。HistoryService提供了Activiti引擎收集的所有歷史數(shù)據(jù)。在執(zhí)行流程時,引擎會保存很多數(shù)據(jù)(根據(jù)配置),比如流程實例啟動時間,任務的參與者,完成任務的時間,每個流程實例的執(zhí)行路徑,等等。這個服務主要通過查詢功能來獲得這些數(shù)據(jù)。Managementservice在使用Activiti的定制環(huán)境中基本

12、上不會用到。它可以查詢數(shù)據(jù)庫的表和表的元數(shù)據(jù)。另外,它提供了查詢和管理異步操作的功能。Activiti的異步操作用途很多,比如定時器,異步操作,延遲暫停、激活,等等。1、如何實現(xiàn)一個業(yè)務流程o創(chuàng)建每個節(jié)點的jsp表單爆taskListljsp.view-form1jsp一般以list5面彈出一個form表單頁面就可以,至于表單的字段隱藏或者展示,由表單自己控制o部署流程把process_model導出為BPMN.XML格式,再導入進行流程部署寸的砒IDKEYKarrw元MMJ-111175D5qjDBmoqpfrrrra1CMFflF皿粕亞弋做心組"2016fnamna-,qPfii

13、rTio"JiaMdlDn''1"dasavtiDn'17B54中中1FHF0號26143?串c打3D1&FflF汕gT201S,nbmb-瞋ms°nT%iCftpUW,:1眄R177721FriFZe17:0501C9Tnni工Ftl17WQISTJMM*dilBPMr4IJ30N1卿<爰程定應“部M色理以示:曲小魔皿小切可以豆.副工PrweElMHgMiMOfpkqirTHinEWI名*KLT_AMLKjhS4VKWB.3«B1ilH覬外IW43rm皿3*%足血加1皿FrtFeb2Sl73l57CST/隹巴為f的

14、聲,*l.FnFeb2MJil:fiTCST印科俄卿l«m-jpa1:3tHXZ4ZW01drenq-JPA1IpjmcinnMrvMawluapnaXviQMC*OCl_一_.一.FrtFeb®1T31:5TCSTMeiK里傳百為開始流程保存業(yè)務實體leaveManager.saveLeave(entity);開始業(yè)務流程/用來設置啟動流程的人員ID,引擎會自動把用戶ID保存到activiti:initiator中identityService.setAuthenticatedUserId(entity.getUserId();/process為流程keyprocessI

15、nstance=runtimeService.startProcessInstanceByKey("process",businessKey,variables);辦理流程Map<String,Object可以獲取那些變量。taskSplete(taskId,variables);其中variables是可以傳遞在流程間的變量,通過variables=taskService.getVariables(taskId) 待辦列表TaskQuerytaskQuery=taskService.createTaskQuery().taskCandidateOrAssigned(

16、userId);/自己辦理或在該節(jié)點對應工作組中的流程 過程中列表ProcessInstanceQueryquery=runtimeService.createProcessInstanceQuery().processDefinitionKey("process").active().orderByProcessInstanceId().desc();0,List<ProcessInstance>list=query.listPage(pageParamspageParams1);已結束列表HistoricProcessInstanceQueryquery=h

17、istoryService.createHistoricProcessInstanceQuery().processDefinitionKey("process").finished().orderByProcessInstanceEndTime().desc();List<HistoricProcessInstance>list=query.listPage(pageParams0,pageParams1);四、如何管理所有流程與實例 查看所有已部署的流程repositoryService.createProcessDefinitionQuery().acti

18、ve().orderByDeploymentId().desc(); 查看所有待辦tasks=taskService.createTaskQuery().active().orderByTaskId().desc().list();個人待辦tasks=taskService.createTaskQuery().taskCandidateOrAssigned(user.getId().active().orderByTaskId().desc().list(); 查看所有辦理中ProcessInstanceQuerydynamicQuery=runtimeService.createProces

19、sInstanceQuery().orderByProcessInstanceId().desc().active();辦理中(本人)ProcessInstanceQuerydynamicQuery=runtimeService.createProcessInstanceQuery().involvedUser(UserUtil.getUserFromSession(session).getId().orderByProcessInstanceId().desc().active(); 查看所有已辦HistoricProcessInstanceQuerydynamicQuery=history

20、Service.createHistoricProcessInstanceQuery().finished().orderByProcessInstanceEndTime().desc();已辦(本人)HistoricProcessInstanceQuerydynamicQuery=historyService.createHistoricProcessInstanceQuery().involvedUser(UserUtil.getUserFromSession(session).getId().finished().orderByProcessInstanceEndTime().desc(

21、);開發(fā)流程1.繪制流程圖Multi-instancetype代表是單用戶還是多用戶,單節(jié)點,多用戶流程:必須設置下圖紅框屬性,Collection(Multi-instance):Completioncondition(Multi-Collection(Multi-instance),代表是用戶的集合名稱,需要在代碼中設置Elementvariable(Multi-instance),集合中的屬性,不需要設置。DcKunwitatiQini;rtep2NdvalueName:ExclusiivE二Multi-instancelype二Collection(Multi-iinstanceji:

22、CompletioHc.onditicn(Mufti-iinstanE即二No喝BlueAEynctinonausrExecLrtionlictencoNd沖kutigGstmcrscoofiguncdCardinality(Mutti-insiairKej:NovalueElementviiablle(Muhi-irutance):IItforcompelcation:A>ecsiHm*ntcuI蛻白I由*<Sh>并行網(wǎng)關v,不管是否設置條件,都會并行執(zhí)行©包容網(wǎng)關,根據(jù)條件可以執(zhí)行單個或多個分支。注意點:1.繪制流程的時候,箭頭保證一定要已連接到usertask

23、2 .保證網(wǎng)關使用的時候,條件要寫明Flowcondition:$i也(3 .保證流程繪制的簡單化,重復節(jié)點最好保證使用同一個usertask,減少jsp代碼的編寫量。2 .表單編寫MSB't3 .編寫后臺entityAgEntityAgTable(name=懺)publicclassSendCarextendsModelprivateStringphone;privateStringycNote;(3Column(coluinnDefinition=date")privateDateycBeginTime;(?Column(coluinnDefinition="d

24、ate11)privateDateycEndTime;Column(columnDefinition="number")privateprivateprivateprivateprivateprivateprivateintycNum;StringmddjStringksSuggesticnjStringIdSuggestion;StringcarNo;Stringdriver;StringdriverPhone;gColumn(columnDefinition="date11)privateDatebeginTime;(SCalumnfcolumnDefinit

25、ion='ctate'1)privateDateendTime;(?Column(columnDefinition=number*')privateFloatbeginLcsColumn(columDefinition=*'number'r)privateFloatendLcs;用來存儲表單共用的的屬entity繼承model類,model類中存在一個公共的業(yè)務實體commmodel,性。4.編寫后臺controllercyrmmodelcontroller,modelcontrollercontroller繼承開始功能也存在controller中。只是

26、由于開始和完成可能存在不同的業(yè)務需求,所以還是寫在自己的存在待辦,已辦,辦理的查詢列表,完成以及5.編寫前臺表單JS控制startWorkflow開始流程complete完成任務taskList待辦列表runningList辦理列表finishedList已辦列表Lcn(sessiongetld()"二三二二匚三三二m4.三;$eflfip1»jep3r-"-±r-二Q.一ULN3'rtS.1liUi,二ii-1L11nb13En、L-呂LirnL»*|E國n/tLcilz,.j-3_i_i_干_I.,_U5E廣、.己r呼Iy3W一三1UW1二型F口.EF0.二'白6二己尸且卜!:JF'一,'"Frf",Lk'R&R%jfT|riJWq|rd.*IjW.,Eh(HljjhL,UJ-x>.FJ|'"1,JTTJ11J1fc-1"1%*1一、*>yJ-<-IjTJT8.TT-T-Tphone&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論