版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
activiti流程開發(fā)指南一、BPMN二、activiti主要接口三、如何實現(xiàn)一個業(yè)務流程四、如何管理所有流程與實例五、開發(fā)流程一、BPMN.什么是BPMN首先BPMN規(guī)范是由標準組織BPMI發(fā)布的.BPMN1.0規(guī)范發(fā)布于2004年5月。此規(guī)范展示了BPMI組織兩年多的努力成果。BPMN的主要目標就是要提供被所有業(yè)務用戶理解的一套標記語言,包括業(yè)務分析者、軟件開發(fā)者以及業(yè)務管理者與監(jiān)察者。BPMN還將支持生成可執(zhí)行的BPEL4WS語言。所以,BPMN在業(yè)務流程設計與流程實現(xiàn)之間搭建了一條標準化的橋梁。BPMN定義了業(yè)務流程圖,其基于流程圖技術(shù),同時為創(chuàng)建業(yè)務流程操作的圖形化模型進行了裁減。業(yè)務流程的模型就是圖形化對象的網(wǎng)圖,包括活動(也可以說工作)和定義操作順序的流控制。.BPMN基礎業(yè)務流程圖由一系列的圖形化元素組成。這些元素簡化了模型的開發(fā),且業(yè)務分析者看上去非常熟悉。這些元素每個都有各自的特性,且與大多數(shù)的建模器類似。比如,活動是矩形,條件是菱形。應該強調(diào)的是:開發(fā)BPMN的動力就是為了在創(chuàng)建業(yè)務流程模型時提供一個簡單的機制,同時又能夠處理來自業(yè)務流程的復雜性。要處理這兩個矛盾的需求的方法就是將標記的圖形化方面組織分類為特定的類別。這里提供標記類別中的一小部分,以便業(yè)務流程圖的讀者可以簡單地識別出元素的基本類型從而理解圖形。以下是四種基本的類型:1)流對象2)連接對象3)泳道4)人工信息BPMN2.0概要:/workclass/201206272.aspactiviti主要接口PmcessEngineConfiguration activiti.dg.xmIRepo&rtaryService*TaskService■IdentityService■FormServrceRuntimeService■ManagementService■HistaryServiceProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();RuntimeServiceruntimeService=processEngine.getRuntimeService();RepositoryServicerepositoryService=processEngine.getRepositoryService();TaskServicetaskService=processEngine.getTaskService();ManagementServicemanagementService=processEngine.getManagementService();IdentityServiceidentityService=processEngine.getIdentityService();HistoryServicehistoryService=processEngine.getHistoryService();FormServiceformService=processEngine.getFormService();ProcessEngines.getDefaultProcessEngine()會在第一次調(diào)用時初始化并創(chuàng)建一個流程引擎,以后再調(diào)用就會返回相同的流程引擎。使用對應的方法可以創(chuàng)建和關(guān)閉所有流程引擎:ProcessEngines.init()和ProcessEngines.destroy()。ProcessEngines會掃描所有activiti.cfg.xml和activiti-context.xml文件。對于activiti.cfg.xml文件,流程引擎會使用Activiti的經(jīng)典方式構(gòu)建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine().對于activiti-context.xml文件,流程引擎會使用Spring方法構(gòu)建:先創(chuàng)建一個Spring的環(huán)境,然后通過環(huán)境獲得流程引擎。所有服務都是無狀態(tài)的。這意味著可以在多節(jié)點集群環(huán)境下運行Activiti,每個節(jié)點都指向同一個數(shù)據(jù)庫,不用擔心哪個機器實際執(zhí)行前端的調(diào)用。無論在哪里執(zhí)行服務都沒有問題Repositoryservice可能是使用Activiti引擎時最先接觸的服務。它提供了管理和控制發(fā)布包和流程定義的操作。這里不涉及太多細節(jié),流程定義是BPMN2.0流程的java實現(xiàn)。它包含了一個流程每個環(huán)節(jié)的結(jié)構(gòu)和行為。發(fā)布包是Activiti引擎的打包單位。一個發(fā)布包可以包含多個BPMN2.0xml文件和其他資源。開發(fā)者可以自由選擇把任意資源包含到發(fā)布包中。既可以把一個單獨的BPMN2.0xml文件放到發(fā)布包里,也可以把整個流程和相關(guān)資源都放在一起。(比如,'hr-processes'實例可以包含hr流程相關(guān)的任何資源)。可以通過RepositoryService來部署這種發(fā)布包。發(fā)布一個發(fā)布包,意味著把它上傳到引擎中,所有流程都會在保存進數(shù)據(jù)庫之前分析解析好。從這點來說,系統(tǒng)知道這個發(fā)布包的存在,發(fā)布包中包含的流程就已經(jīng)可以啟動了。除此之外,服務可以■o查詢引擎中的發(fā)布包和流程定義。o暫?;蚣せ畎l(fā)布包,對應全部和特定流程定義。暫停意味著它們不能再執(zhí)行任何操作了,激活是對應的反向操作。o獲得多種資源,像是包含在發(fā)布包里的文件,或引擎自動生成的流程圖。o獲得流程定義的pojo版本,可以用來通過java解析流程,而不必通過xml。正如RepositoryService負責靜態(tài)信息(比如,不會改變的數(shù)據(jù),至少是不怎么改變的),Runtimeservice正好是完全相反的。它負責啟動一個流程定義的新實例。如上所述,流程定義定義了流程各個節(jié)點的結(jié)構(gòu)和行為。流程實例就是這樣一個流程定義的實例。對每個流程定義來說,同一時間會有很多實例在執(zhí)行。RuntimeService也可以用來獲取和保存流程變量。這些數(shù)據(jù)是特定于某個流程實例的,并會被很多流程中的節(jié)點使用(比如,一個排他網(wǎng)關(guān)常常使用流程變量來決定選擇哪條路徑繼續(xù)流程)。Runtimeservice也能查詢流程實例和執(zhí)行。執(zhí)行對應BPMN2.0中的'token'?;旧蠄?zhí)行指向流程實例當前在哪里。最后,RuntimeService可以在流程實例等待外部觸發(fā)時使用,這時可以用來繼續(xù)流程實例。流程實例可以有很多暫停狀態(tài),而服務提供了多種方法來‘觸發(fā)'實例,接受外部觸發(fā)后,流程實例就會繼續(xù)向下執(zhí)行。任務是由系統(tǒng)中真實人員執(zhí)行的,它是Activiti這類BPMN引擎的核心功能之一。所有與任務有關(guān)的功能都包含在TaskService中:■o創(chuàng)建獨立運行任務組這些任務與流程實例無關(guān)。o手工設置任務的執(zhí)行者,或者這些用戶通過何種方式與任務關(guān)聯(lián)。o認領(lǐng)并完成一個任務。認領(lǐng)意味著一個人期望成為任務的執(zhí)行者,即這個用戶會完成這個任務。完成意味著“做這個任務要求的事情”。通常來說會有很多種處理形式。Identityservice非常簡單。它可以管理(創(chuàng)建,更新,刪除,查詢...)群組和用戶。請注意,Activiti執(zhí)行時并沒有對用戶進行檢查。例如,任務可以分配給任何人,但是引擎不會校驗系統(tǒng)中是否存在這個用戶。這是Activiti引擎也可以使用外部服務,比如ldap,活動目錄,等等。FormService是一個可選服務。即使不使用它,Activiti也可以完美運行,不會損失任何功能。這個服務提供了啟動表單和任務表單兩個概念。啟動表單會在流程實例啟動之前展示給用戶,任務表單會在用戶完成任務時展示。Activiti支持在BPMN2.0流程定義中設置這些表單。這個服務以一種簡單的方式將數(shù)據(jù)暴露出來。再次重申,它時可選的,表單也不一定要嵌入到流程定義中。HistoryService提供了Activiti引擎收集的所有歷史數(shù)據(jù)。在執(zhí)行流程時,引擎會保存很多數(shù)據(jù)(根據(jù)配置),比如流程實例啟動時間,任務的參與者,完成任務的時間,每個流程實例的執(zhí)行路徑,等等。這個服務主要通過查詢功能來獲得這些數(shù)據(jù)。Managementservice在使用Activiti的定制環(huán)境中基本上不會用到。它可以查詢數(shù)據(jù)庫的表和表的元數(shù)據(jù)。另外,它提供了查詢和管理異步操作的功能。Activiti的異步操作用途很多,比如定時器,異步操作,延遲暫停、激活,等等。三、如何實現(xiàn)一個業(yè)務流程1.靜態(tài)表單(每個節(jié)點繪制對應的表單)o創(chuàng)建工作流實例(process_model)StaskListljspjjfview-formljsp一般以list頁面彈出一個form表單頁面就可以,至于表單的字段隱藏或者展示,由表單自己控制。o部署流程把process_model導出為BPMN.XML格式,再導入進行流程部署1、^/2uviu?FJiTi1TW 首頁X模型工作區(qū)過程中列表ProcessInstanceQueryquery=runtimeService.createProcessInstanceQuery().processDefinitionKey("process").active().orderByProcessInstanceId().desc();流程定義及部若管理M提示:點擊xm或者png^可以查看具《0'部罟流程ProcessDefinitionld Deploymentld名稱leave-formkey:2:2OO23 20001 清粉鹿況單 leave-formkey 2 Ieave-formkev.bpmn20.xml leave-formkeYDna :2617.31.57CST false|2016 荏 Modelleave-jpa:1:20024 20001 熊"-JPA leave-jpa 1 leave-iDabomn leave-iDapna FnFeb2617:31:57CST 胃se|掛 祥觸2016 起 Model 一-一 . .. . FriFeb2617:31:57CSTfalser刪除儂為?開始流程保存業(yè)務實體leaveManager.saveLeave(entity);開始業(yè)務流程//用來設置啟動流程的人員ID,引擎會自動把用戶ID保存到activiti:initiator中identityService.setAuthenticatedUserId(entity.getUserId());//process為流程keyprocessinstance=runtimeService.startProcessInstanceByKey("process",businessKey,variables);?辦理流程taskSplete(taskId,variables);其中variables是可以傳遞在流程間的變量,通過Map<String,Object〉variables=taskService.getVariables(taskld)可以獲取那些變量。?待辦列表TaskQuerytaskQuery=taskService.createTaskQuery().taskCandidateOrAssigned(userId);//自己辦理或在該節(jié)點對應工作組中的流程List<ProcessInstance>list=query.listPage(pageParams[0],pageParams[1]);已結(jié)束列表HistoricProcessInstanceQueryquery=historyService.createHistoricProcessInstanceQuery().processDefinitionKey("process").finished().orderByProcessInstanceEndTime().desc();List<HistoricProcessInstance>list=query.listPage(pageParams[0],pageParams[1]);如何管理所有流程與實例查看所有已部署的流程repositoryService.createProcessDefinitionQuery().active().orderByDeploymentId().desc();查看所有待辦tasks=taskService.createTaskQuery().active().orderByTaskId().desc().list();個人待辦tasks=taskService.createTaskQuery().taskCandidateOrAssigned(user.getId()).active().orderByTaskId().desc().list();查看所有辦理中ProcessInstanceQuerydynamicQuery=runtimeService.createProcessInstanceQuery().orderByProcessInstanceId().desc().active();辦理中(本人)ProcessInstanceQuerydynamicQuery=runtimeService.createProcessInstanceQuery().involvedUser(UserUtil.getUserFromSession(session).getId()).orderByProcessInstanceId().desc().active();
?查看所有已辦HistoricProcessInstanceQuerydynamicQuery=historyService.createHistoricProcessInstanceQuery().finished().orderByProcessInstanceEndTime().desc();已辦(本人)HistoricProcessInstanceQuerydynamicQuery=historyService.createHistoricProcessInstanceQuery().involvedUser(UserUtil.getUserFromSession(session).getId()).finished().orderByProcessInstanceEndTime().desc();五、開發(fā)流程.繪制流程圖單節(jié)點,多用戶流程:必須設置下圖紅框?qū)傩?,Multi-instancetype代表是單用戶還是多用戶Miriti-instancetypeCollection(Multi-instance)Completioncondition(Multi-ParallelNoreParallelSequentialCollection(Multi-instance),單節(jié)點,多用戶流程:必須設置下圖紅框?qū)傩裕琈ulti-instancetype代表是單用戶還是多用戶Miriti-instancetypeCollection(Multi-instance)Completioncondition(Multi-ParallelNoreParallelSequentialCollection(Multi-instance),代表是用戶的集合名稱,需要在代碼中設置Elementvariable(Multi-instance),集合中的屬性,不需要設置。Id:step2Name:Documentation:NovalueAsynchronous:0Exclusive:Executionlisteners:NoexecutionlistenersconfiguredMuttn-instancetype:ParallelCardinality(MuHi-instance):NovalueCollection(Multi-instance):Ehmentvariable(Multi-instance):1gH|Completioncondition(Multi-instance):NovalueIsforcompensation:Assignments: L-? 包容網(wǎng)關(guān)?并行網(wǎng)關(guān),不管是否設置條件,都會并行執(zhí)行? 包容網(wǎng)關(guān)?并行網(wǎng)關(guān),不管是否設置條件,都會并行執(zhí)行,根據(jù)條件可以執(zhí)行單個或多個分支。注意點:1.繪制流程的時候,箭頭保證一定要已連接到usertask.保證網(wǎng)關(guān)使用的時候,條件要寫明Flowcondition:.保證流程繪制的簡單化,重復節(jié)點最好保證使用同一個usertask,減少jsp代碼的編寫量。2.表單編寫勇展天事5月勇展天事5月主臂比出筮時何塞叵才同AgEntityAgTable(name=”千打巾_與颯購片)publicclass5已nd匚3rextendsModel!privateStringphone;privateStringy^cNote;回匚口11|[1門(匚0111小門[>已于:1門:11:10門=Irdate")privateDateycBeginTime;@匚口111(1口(匚oluminDBfinition=''date")privateDateycEndTime;回匚口11|[1口(匚。[11小門[>已于:1門:11:10門=''numberIr)privateprivateprivateprivateprivateprivateprivateintycNum;String
String
String
StringprivateprivateprivateprivateprivateprivateprivateintycNum;String
String
String
StringString
Stringmdd;ksSuggestion;IdSuggestion;carNo;driver;driverPhone;四匚cilunin(匚辦lunnDEfinition=IrdateirJprivateDatebeginTime;?匚口11|[11門(匚。[11日門[>曰于:1門:11::10門=Irdateir)privateDateendTime;回匚oluninlcolumnDefinition='"number")privateFloatbeginLcs;回匚口11|[11門(匚。[11日門(>已于:1門:11::10門=''numberIr)privateFloatendLcs;entity繼承model類,model類中存在一個公共的業(yè)務實體commmodel,用來存儲表單共用的的屬性。4.編寫后臺controllerPIgtontrollerAgRequEEtMapping(value="/標標祁”)publicclasssendcarcontrd1erextendsModelcontr-ol1er<s&ndcar>{privateLoggerIloggB產(chǎn)=LDgg&r-FactDry-getLogger[getclass[))jgPostconstructFlpri^'aievoidinitMod&l(){S';if(thie.model==nu1L){model=ne..15&nd€ar[)jmDdelClasE=(ClaEE<SendCar->)model?getClass()j)^_^}caich(Exceptions)(logger.error["initModelfail^Jj)41L■自動流程*/gRequestMapping(value="start"jmethod=RequestMethod.PO5T)^ResponseBodypublicStringstartWorkflow(StringformDataStringjHttpSessionisessionjStringkeyjVariable-f-y<model=FastDsonUtils.parseQbj&ct(fortnDataStringjmodsl€lass)jMap<StringjObjEct>variables=var.getVariablE?ap()jif[SstringUtils.isEmpty(users)){String[]|split=StringUtils.split[users57/variables.put(userKeyjArrays.asList(split))j)■■■Useruser=JserLfti1.getUserFromSession[seesion)jmode1?gEt€Dfflm^.odel()■setUserid(user.getId[));Stringse-q=mDdeiManager.queryMd("S_cbr_SEQr,).tostring[);/Stringno="PC"-se-qjmodel?getCDHiH^todel[)■SEtMofno)jstartWorkflowfkev.variables\:?controller繼承modelcontroller,modelcontroller存在待辦,已辦,辦理的查詢列表,完成以及開始功能也存在,只是由于開始和完成可能存在不同的業(yè)務需求,所以還是寫在自己的controller中。startWorkflow開始流程complete完成任務taskList待辦列表runningList辦理列表finishedList已辦列表<script>'--2r頡海4="$;叩「切?標國或,jarprocEEELnEianceZd="Stparam.prsceEEZnEianceZd}"j加發(fā)="5{param.XU^)"jmini.laycutQjmini.parse(1:,--ardEtailUrL=飛己iA"'-procEEELni-zsnceEd5'--2rsaveurl="${c-z:<}/5^i4^:/cDTiplete/"-,-■arquEryPEPEcnUrl="打匚:口/最燦湫:/取蜘如勘扇軀飛,jarjurnpUrl="${ci:<}/p2ges/tasks/taskList.jsp"if(!leEmpty(prcceeeLnetanceId)){LaadCketaiL(}eLse(S["#procesE").hidE(■ini.get(~depid").netVa1ue("$<'emp.depart?ent^|iji}");■ini.get("depNaae").setValue("${e?p.depa1nt?en七.depa1nt?entNm?e}")}■ini.get["usBrNaoie").setVa1ue("${eap.eaployeeHaae)-;■ini.getfuserid").setVaLue("${?p. setStep()設置每一步的可編輯與不可編輯? complete。完成任務,調(diào)用comm.js setStep()設置每一步的可編輯與不可編輯? complete。完成任務,調(diào)用comm.js中的completeForm(users,userKey,key,tkey,ta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年網(wǎng)絡空間道德與法治教育試題含答案
- 所有分類新概念武器
- 2026年劇本殺運營公司音效燈光操控員崗位職責管理制度
- 2026年劇本殺運營公司實習生管理與培養(yǎng)制度
- 產(chǎn)褥期飲食營養(yǎng)指導要點
- 高中生個性化學習成果認證中區(qū)塊鏈與人工智能技術(shù)的融合創(chuàng)新研究教學研究課題報告
- 2025年新型瓜子口味創(chuàng)新市場分析
- 初中英語寫作中情感邏輯銜接詞使用頻率統(tǒng)計課題報告教學研究課題報告
- 區(qū)域特殊教育均衡發(fā)展中的人工智能康復技術(shù)應用案例研究教學研究課題報告
- 智能精準教研對教師教育科研能力提升的實踐探索與效果評價教學研究課題報告
- 2024年四川省考公務員考試結(jié)構(gòu)化面試鄉(xiāng)鎮(zhèn)崗真題試題試卷答案解析
- 航天智能通信原理與應用 課件 第7章 電磁頻譜感知
- 護理節(jié)前安全教育
- 2025年上半年遼寧大連市總工會面向社會招聘社會化工會工作者42人重點基礎提升(共500題)附帶答案詳解
- 個人委托書范本模板電子版
- 租學位合同協(xié)議書
- NB-T32036-2017光伏發(fā)電工程達標投產(chǎn)驗收規(guī)程
- 國有企業(yè)采購管理規(guī)范 T/CFLP 0027-2020
- 模板-健康風險評估報告
- (正式版)HGT 20593-2024 鋼制化工設備焊接與檢驗工程技術(shù)規(guī)范
- 肘關(guān)節(jié)恐怖三聯(lián)征
評論
0/150
提交評論