Activiti工作流入門(mén)詳解完整教學(xué)教程_第1頁(yè)
Activiti工作流入門(mén)詳解完整教學(xué)教程_第2頁(yè)
Activiti工作流入門(mén)詳解完整教學(xué)教程_第3頁(yè)
Activiti工作流入門(mén)詳解完整教學(xué)教程_第4頁(yè)
Activiti工作流入門(mén)詳解完整教學(xué)教程_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Activiti入門(mén)教程詳解完整教程I.Activiti介紹Activiti是由Alfresco軟件在2010年5月17日發(fā)布的業(yè)務(wù)流程管理(BPM匡架, 它是覆蓋了業(yè)務(wù)流程管理,工作流,服務(wù)協(xié)作等領(lǐng)域的一個(gè)開(kāi)源,靈活的,易擴(kuò)展的可執(zhí)行流程語(yǔ)言框架。Activiti基于Apache許可的開(kāi)源BPM平臺(tái),創(chuàng)始人TomBaeyens是JBossJBPM勺項(xiàng)目架構(gòu)師,它的特色是提供了eclipse插件,開(kāi)發(fā)人員可以通過(guò)插件直接繪畫(huà)出業(yè)務(wù)流程圖。1.1工作流引擎ProcessEngine對(duì)象,這是Activiti工作的核心。負(fù)責(zé)生成流程運(yùn)行時(shí)的各種實(shí)例及數(shù)據(jù),監(jiān)控和管理流程的運(yùn)行。1.2BPMN業(yè)務(wù)流

2、程建模與標(biāo)注(BusinessProcessModelandNotation,BPMN),描述流程的基本符號(hào),包括這些圖元如何組合成一個(gè)業(yè)務(wù)流程圖(BusinessProcessDiagram)2.準(zhǔn)備環(huán)境1)JDK1.6或者更高版本2)支持的數(shù)據(jù)庫(kù)有:h2,mysql,oracle,mysql,db2等4支持Activiti運(yùn)行的jar包,可以通過(guò)maven依賴引入5開(kāi)發(fā)環(huán)境為Eclipse3.7或者以上版本,myeclipse為8.6版本1)打開(kāi)HelpInstallNewSoftwareAdd輸入Name:ActivitiDesignerLocation:http:/Activiti.o

3、rg/designer/update/輸入完成后,單擊OK按鈕等待下載完成后安裝。安裝完成后在菜單選項(xiàng)中會(huì)出現(xiàn)Activiti的目錄選項(xiàng)SelectawizardSelectawizardWizards:Wizards:typefiltertexttypefiltertext理理InterfaceInterface, ,色色JavaProtjectJavaProtject浜浜JavaProjectfromExistingJavaProjectfromExistingAntAntBuildfileBuildfile晦晦Plug-inProjectPlug-inProjectGeneralGene

4、ralB BArtivitiArtivitiActivitiDiagrarnActivitiDiagrarnC CActivitiProjectConnectionProfilesActivitiProjectConnectionProfiles已已DatabaseWebNervigsDatabaseWebNervigs/ /2.2安裝流程設(shè)計(jì)器(eclipse插件)2.1Activiti軟件環(huán)境2設(shè)置eclipseactivit插件的畫(huà)流程圖選項(xiàng)占百|(zhì)一反SaveActionsSaveActionsG GU U, ,SetprefererrcesvrhilesavingActivitiDia

5、gramsSetprefererrcesvrhilesavingActivitiDiagrams/ /CreateprocessdefinitiorTimagewhensavingthediagramCreateprocessdefinitiorTimagewhensavingthediagram勾選上Createprocessdefinitionimagewhensavingthediagram操作,勾選上這個(gè)操作后在畫(huà)流程圖后保存eclipse會(huì)自動(dòng)生成對(duì)應(yīng)的流程圖片。2準(zhǔn)備開(kāi)發(fā)環(huán)境2.5創(chuàng)建mavenweb項(xiàng)目,在maven中添加Activiti依賴在eclipse左邊工作欄右鍵New選

6、擇創(chuàng)建MavenProject項(xiàng)目,創(chuàng)建一個(gè)名為ActivitiTest的項(xiàng)目CreateaMavenProjectWizards:Wizards:typefiltertexttypefiltertextJAXBJAXB* *JPkJPki-i-KickstartKickstart/ /0707MavenMavenI ICheckoutMavenProjectsfromSCMCheckoutMavenProjectsfromSCM嘗嘗MgvenModuleMgvenModule打開(kāi)菜單Windows-Preferences-Activiti-Save下流程圖片的生成方式3838Preferen

7、cesPreferencestypefiltertexttypefiltertextSaveActionsSaveActionsActivitiActiviticloudeditorcloudeditortArt第第MavenProjectMavenProject & &OomphOomph& &_r_rPlug-ihDevleprrteritPlug-ihDevleprrterit QjrQjrRemoteSystemExplorerRemoteSystemExplorer點(diǎn)擊Finish完成。右鍵項(xiàng)目選擇Properties,選擇ProjectFacets勾

8、選上圖中的選項(xiàng),點(diǎn)擊Apply,再點(diǎn)擊OK然后將項(xiàng)目轉(zhuǎn)換成web項(xiàng)目,右鍵項(xiàng)目選擇Properties,在ProjectFacets中做如下勾選,然后點(diǎn)擊Appy應(yīng)用和OK確定ProjectFacetProjectFacetApplicationClientmoduleApplicationClientmodule、|r_|r_|招招Axis?WebServicesAxis?WebServices與與CXF2.xWebServicesCXF2.xWebServices/. .DynanriicWebModuleDynanriicWebModuleEAREAR 喻喻EJBModuleEJBMod

9、uleBL.=EJBDocletpCDocleUfflffl 團(tuán)團(tuán)l?lSJavaScriptJivaServerFactsJivaServerFactsn nJ JAX-AX-RS(RESTWebServicedRS(RESTWebServiced匚匚好好JAXBJAXB5 5JCAModuleJCAModulenaJPAA AStaticWebModuleStaticWebModule苣身苣身UtilityModuleUtilityModule匚匚We-bFragmnlModuleWe-bFragmnlModule臺(tái)臺(tái)WebDocWebDocletlet(XDcclet)(XDcclet)

10、然后右鍵項(xiàng)目Properties,選擇DeploymentAssembly,將test相關(guān)目錄Remove掉之保留main下面需要發(fā)布的內(nèi)容,如下圖PropertiesforActivitiTeatPropertiesforActivitiTeat&.0&.0- -國(guó)國(guó)ApplAppl1.01.02.52.5, ,Enable;Enable;pplicatipplicati&.0&.0RequireRequire3131- -|L|LJavaJava.31515ConflictsConflicts1.01.02.22.2- -m mAppAppD

11、yn.Dyn.1.11.1篇篇EAREAR2.22.2& &EJBEJB1.61.6. . JCAJCA2.12.1|z=,CtatiS.0S.0, ,L23L23后后UtiliiUtilii=VJekVJekZer5ionZer5ionDetailsDetailstypefiltertexttypefiltertext- -ResourceResourceBuildersDeploymentAssemblyAssemblyJavaBuildPathJavaBuildPathR RJavaCodeStyleJavaCodeStyle JavaCompilerJavaCompil

12、erJavaEditorJavaEditorJavadocLocationJavadocLocationJavaScriptJavaScriptJSPFragmentMavenJSPFragmentMavenProjectFacetsProjectFacetsProjectReferencesRfactoringHistoryRuin/DebugSettingsRuin/DebugSettingsServerServicePoliciesServicePoliciesTarg&tedRuntimesTarg&tedRuntimes TaskRepositoryTaskRepos

13、itoryTaecTagsTaecTagsValidationValidationWebCoritenlSettingsWebCoritenlSettingsWebPageEditorWebPageEditorWebProjectSettingsWebProjectSettingsWikiTextWikiTextXDocIelXDocIelProjectFacetsConfiguration;tcuslomConfiguration;tcuslom然后點(diǎn)擊Appply和OK然后在pom.xml文件中添加以下依賴org.ActivitiActiviti-engine5.21.0org.Activ

14、itiActiviti-spring5.21.0org.codehaus.groovygroovy-all2.4.3org.slf4jslf4j-api1.7.6org.slf4jslf4j-jdk141.7.6junitjunit3.8.1testmysqlmysql-connector-java5.1.38然后在命令行下mvncompile編譯當(dāng)前項(xiàng)目,將需要的包下載到本地倉(cāng)庫(kù)2.4.2初始化數(shù)據(jù)庫(kù)1)src/main/resource目錄下創(chuàng)建Activiti.cfg.xml文件,內(nèi)容如下jdbcUrl為你電腦數(shù)據(jù)庫(kù)的urljdbcUsername為數(shù)據(jù)庫(kù)用戶名jdbcPassword為

15、數(shù)據(jù)庫(kù)密碼2)在main/java目錄下創(chuàng)建任意目錄和類(lèi)編寫(xiě)創(chuàng)建Activiti數(shù)據(jù)表方法publicclassCreateTable/*創(chuàng)建流程表*/TestpublicvoidcreateTable()ProcessEngineprocessEngine=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(Activiti.cfg.xml).buildProcessEngine();System.out.println(processEngine:+processEngine);)然后運(yùn)行該測(cè)試方法

16、,如果運(yùn)行成功,在數(shù)據(jù)庫(kù)中應(yīng)該會(huì)產(chǎn)生25張Activiti的相關(guān)數(shù)據(jù)表a act_re_deploymct_re_deployme entnt日ct_ct_g gmedmed同t*53Ct_re_procdeft*53Ct_re_procdefJ3ct_ru_event_suhscrJ3ct_ru_event_suhscrL Lact_ru_executionact_ru_executiona act_ru_iidentitylinkct_ru_iidentitylink_iiai_iiaiCact_rujobCact_rujobCaet_ru_t35kCaet_ru_t35kj jact_r

17、u_variableact_ru_variable2.4.3Activiti表說(shuō)明下面是概括了幾個(gè)常用的數(shù)據(jù)表流程部署相關(guān)表act_re_deployement部署對(duì)象表act_rep_procdef流程定義表act_ge_bytearray資源文件表act_ge_prperty主鍵生成策略表(對(duì)于部署對(duì)象表的主鍵ID)流程實(shí)例相關(guān)表act_ru_execution正在執(zhí)行的執(zhí)行對(duì)象表 (包含執(zhí)行對(duì)象ID和流程實(shí)例ID,如果有多個(gè)線程可能流程實(shí)例ID不一樣)act_hi_procinst流程實(shí)例歷史表act_hi_actinst存放歷史所有完成的任務(wù)Task任務(wù)相關(guān)表act_ru_task代辦

18、任務(wù)表(只對(duì)應(yīng)節(jié)點(diǎn)是UserTask的)act_hi_taskinst代辦任務(wù)歷史表(只對(duì)應(yīng)節(jié)點(diǎn)是UserTask的)act_hi_actinst所有節(jié)點(diǎn)活動(dòng)歷史表(對(duì)應(yīng)流程的所有節(jié)點(diǎn)的活動(dòng)歷史,從開(kāi)始節(jié)點(diǎn)一直到結(jié)束節(jié)點(diǎn)中間的所有節(jié)點(diǎn)的活動(dòng)都會(huì)被記錄)localtiostlocaltiostirformsticn_schemaschema;mysqli iperformarce_schennperformarce_schenna aulul9 9,HtesttestG G 規(guī)圖規(guī)圖/j因數(shù)因數(shù)用翦牛用翦牛0 年年5 5a 報(bào)表報(bào)表管份管份U U3 3ct.evlogct.evlog口口jct_

19、gebyteajct_gebytearrayrrayF*F*act_ge_piropertyact_ge_piropertyf f4a4aa ac ct_hi_actinstt_hi_actinstacthidttdcacthidttdchrne-rrthrne-rrt工工OEEOEE% %rrtrrtact.hLdetailact.hLdetaileaeact_hi_ct_hi_.identib/link.identib/link_iact_hi_procinst_iact_hi_procinstact_hijskinstact_hijskinstpart_hpart_hi_varinsti

20、_varinsti ij3ctjd_groijpj3ctjd_groijp actjdinfoactjdinfoL La act_id_mct_id_membembe er r與bibip prjct_id_userHart45rorjct_id_userHart45roedefjnfoedefjnfo流程變量表act_ru_variable正在執(zhí)行的流程變量表act_hi_variable流程變量歷史表.核心APIProcessEngine說(shuō)明:1)在Activiti中最核心的類(lèi),其他的類(lèi)都是由他而來(lái)。2)產(chǎn)生方式ProcessEngineprocessEngine=ProcessEngin

21、esgetDefaultProcessEngine();3)可以產(chǎn)生RepositoryServiceRepositoryServicerepositoryService=processEngine.getRepositoryService();4)可以產(chǎn)生RuntimeServiceRuntimeServiceruntimeService=processEngine.getRuntimeService();5)可以產(chǎn)生TaskServiceTaskServicetaskService=processEngine.getTaskService();各個(gè)Service的作用RepositoryS

22、ervice管理流程定義RuntimeService執(zhí)行管理,包括啟動(dòng),推進(jìn),刪除流程實(shí)例等操作TaskService任務(wù)管理RepositoryServiceActiviti的倉(cāng)庫(kù)服務(wù)類(lèi)。所謂的倉(cāng)庫(kù)指流程定義文檔的兩個(gè)文件:bpmn文件和流程圖片該service可以用來(lái)刪除部署的流程定義。RuntimeService是Activiti的流程執(zhí)行服務(wù)類(lèi),可以從這個(gè)服務(wù)類(lèi)中獲取很多關(guān)于流程執(zhí)行的相關(guān)的信息。TaskService是Activiti的任務(wù)服務(wù)類(lèi)??梢詮倪@個(gè)類(lèi)中獲取任務(wù)的相關(guān)信息,如當(dāng)前正在執(zhí)行的個(gè)人待辦和用戶組待辦任務(wù)。HistoryService是Activiti的查詢歷史信息的

23、類(lèi),在一個(gè)流程執(zhí)行完成后,這個(gè)對(duì)象為我們提供查詢歷史信息,可以跟蹤流程實(shí)例對(duì)應(yīng)所有待辦節(jié)點(diǎn)的運(yùn)行情況。ProcessDefinition流程定義類(lèi),可以從這里獲得資源文件等。ProcessInstance代表流程定義的執(zhí)行實(shí)例,當(dāng)一個(gè)部署的流程圖啟動(dòng)后,該流程只有一條流程實(shí)例數(shù)據(jù),但是它的流程任務(wù)可以有多個(gè),每個(gè)任務(wù)對(duì)應(yīng)流程圖中相應(yīng)的流程節(jié)點(diǎn)。.入門(mén)HelloWorld程序創(chuàng)建流程圖方法點(diǎn)擊ActivitiTest項(xiàng)目,在src/main/java目錄下創(chuàng)建一個(gè)diagrams目錄用來(lái)存放流程圖在當(dāng)前項(xiàng)目右鍵選擇ActivitiDiagram流程圖輸入流程圖名稱HelloWorld,然后點(diǎn)擊O

24、K,SBNewSBNewSflcctawizardSflcctawizardCreateCreatea anewActivitiBPMN2,0Diagram.newActivitiBPMN2,0Diagram.WizaWizadmdmtypefiltertexttypefiltertextClaSGClaSGInterfaceInterfacei i棺棺JavaProjectJavaProjectJavaProjectfromExistingAntBuildfile-JavaProjectfromExistingAntBuildfile-儂儂PluginPluginProjectL LL L:

25、GeneralGeneralj j匚匚. .ActivitiActiviti。ActivitiDiagramActivitiDiagram。ActivitiProjectActivitiProject, , ConnectionProfilesConnectionProfilesQrimlQriml在控制面板的右邊欄有相關(guān)的畫(huà)圖圖標(biāo)操作i?i?PalettePalette4 4SelectSelect匚工MarqueMarque _ _StarteventStartevent0)0)StartEventStartEventEndeventEndeventm mf fndEventndEvent

26、L L-Task-Task田田UserTaskUserTaskBTBTF F一一* *e eI IContainerContainer0 0Ev&ntSubPr.Ev&ntSubPr._Gateway_GatewayParallelGat.ParallelGat.J J。匚BoundaryBoundary OTime-rBoun.OTime-rBoun.、Intermedi.RIntermedi.R其中一個(gè)流程必須包含一個(gè)開(kāi)始節(jié)點(diǎn)和一個(gè)結(jié)束節(jié)點(diǎn),結(jié)束節(jié)點(diǎn)可以有多個(gè)。然后使用StartEvent,UserTask,EndEvent畫(huà)出下面的流程圖,然后用SequenceFlow連

27、線連接起來(lái)。Connection中的創(chuàng)建流程圖,如下圖指定流程圖名稱,ID和UserTask的處理人1)選中第一個(gè)節(jié)點(diǎn),在General中的name屬性中輸入當(dāng)前節(jié)點(diǎn)的名稱,在Mainconfig中的Assignee中輸入該節(jié)點(diǎn)的處理人,然后以此類(lèi)推將3個(gè)節(jié)點(diǎn)的值設(shè)置完成。PropertiesProperties r&b-lemsftAntr&b-lemsftAnt切ErrorLegJrJUritSCanseleErrorLegJrJUritSCanseleGeneraGeneral l聞 inccnfiginccnfigDocumentationDocumentationFo

28、rmFormListenersListenersMultiinstanceMultiinstanceIdIdNameNameAsyncbroncLisAsyncbroncLisT TExclusiveExclusive二】二】s sforcompensation?forcompensation?useita?kluseita?kl嗅文國(guó)清嗅文國(guó)清CL)CL)審批審批1 1部門(mén)經(jīng)理部門(mén)經(jīng)理審批審批理理1 16口口* *Properties與與ProblemsProblems*Ant包包ErrorLogErrorLogJuJUnh日日ConsoleConsoleGeneralGeneral,Ass

29、ignee,AssigneeMaini&ttfigMaini&ttfigCandidateuse.,maseparated)Candidateuse.,maseparated)DecumentationDecumentationFormFormCardidateCardidateqrqr口川mmseparated)mmseparated)ListenersListenersFormkeyFormkeyMultiinstanceMultiinstanceDuedate(variable.!Duedate(variable.!2)然后在流程圖旁邊的空白出點(diǎn)擊一下,輸入流程的ID和N

30、ame值,然后保存ProblemsProblems驟驟AntErrorLogJuJUnitSConsoleAntErrorLogJuJUnitSConsoleIdHelloWcrldKeyIdHelloWcrldKeyNameNameHelloWoridlNameHelloWoridlNameNanripafeNanripafehttpy/httpy/www.artiviti.ergAfi5twww.artiviti.ergAfi5tCandidatesta.maseparated)Candidatesta.maseparated)CandidateCandidate日separated)se

31、parated)DocumentatiorDocumentatior.I.IProcefKProcefKDataObje-ctsDataObje-ctsListenersListenersSignalsSignalsMe-sagesMe-sages將流程圖部署到Activiti的數(shù)據(jù)表中/*才才潞部署定義潞部署定義*/*/publicvoiddeployFlow()Deploymentdeployment=processEngine.getRepositoryServicef).creatQDeployment()rname(11hullow。Id入門(mén)程入門(mén)程序序”) ).addClasspa

32、thResource(diagrams/HelloWorld.bpmn)*addCJ.asspathResource(diagrams/HeiloWorid.png11).deploy();System.owtowt. .printLn(deployment.getld()jSystem.QutQut.printLn(deployment.getName();)啟動(dòng)完成后在act_re_deployment流程部署表和act_re_procdef流程定義表中會(huì)有對(duì)應(yīng)的數(shù)據(jù)信息.啟動(dòng)流程實(shí)例其中runtimeService.startProcessInstanceByKey(HelloWorld

33、Key);中的HelloWorldKey對(duì)應(yīng)流程圖中的ID值,在數(shù)據(jù)表中對(duì)應(yīng)act_re_procdef流程定義表中的key字段* *啟動(dòng)流程啟動(dòng)流程*(3TestpublicvoidflowStart()RuntimeServiceruntimeService=procesEngine+getRuntimeServic();/S/使用原程定義使用原程定義key啟勃啟勃5!耀其例耀其例,kwysi寸象卜目寸象卜目11。皿皿011.6111門(mén)文件中的門(mén)文件中的1琲里性琲里性對(duì)應(yīng)總對(duì)應(yīng)總(:(:t_1色色_():_():口口(:(:(1/用用key啟動(dòng)時(shí)按照最新的癥程版本定啟動(dòng)時(shí)按照最新的癥程版本

34、定義啟動(dòng)義啟動(dòng)ProcessInstanceprocessinstance=runtimeService.startProce&sInstanceByKey(HelloWorldKey);System,cwt.printLn(processinstanceigetld():,/羞羞程實(shí)例程實(shí)例TOSysteiKO/jt.print1n(processInstance.getDeploymentId()j流程定流程定義工口義工口RepositoryServiceRepositoryService=processErgLne-getRepositcryServProcessDefiniti

35、onprocessDefinition=Repo&itoryServiceietProcessDefinitionfproc&sslnstance.getDeploymentId()”“”“根據(jù)根據(jù): :Sy&tem-outout. .printIn(proces&Definition_getId();/ /流流程定義程定義IDSystem.cut.printin(processDefinition.getKeO);啟動(dòng)完流程后在act_ru_execution表中會(huì)產(chǎn)生一條數(shù)據(jù),這條數(shù)據(jù)為當(dāng)前流程正在執(zhí)行的任務(wù),其中act_id_字段的值對(duì)應(yīng)流程圖節(jié)點(diǎn)的ID值

36、在act_ru_task表中會(huì)產(chǎn)生一條任務(wù)數(shù)據(jù),execution_id_對(duì)應(yīng)act_ru_execution主鍵,proc_inst_id_為流程實(shí)例ID,name_值為流程節(jié)點(diǎn)名稱,assignee/段為該待辦當(dāng)前的處理人查詢待辦任務(wù)* *查詢當(dāng)前人的任務(wù)查詢當(dāng)前人的任務(wù)I*/publicvoidfIndMyPersorTask()Stringasignee=E,5ListtaskList=+ +人人 5 。匚自與與。匚自與與 口目口目1|1 育仁育仁11351七七 3()/獲取獲取 5|/:|/:1cr3tTaskQuavO創(chuàng)建直劇對(duì)象創(chuàng)建直劇對(duì)象.faskAssignee(3與臼均與臼

37、均HE指定要查詢的人指定要查詢的人if(taskList!=null&taskList*size()0)for*(TasktaskrtaskListSystem.outout. .printIn(1F+task,getldO411r,);System.out.printIn(+task.getNamefJ+1System,outout.pinti門(mén)門(mén)(任任務(wù)創(chuàng)建時(shí)閭:務(wù)創(chuàng)建時(shí)閭:+ta&k.getCreateTime()+);System.System.out.printing-task-task. .getA55ignee()+getA55ignee()+, , System

38、,outout.printIn( (“溫溫程實(shí)例程實(shí)例TD:+task-getProcesslnstanceldf)+System,outprintIn(fefKiID;11+task.getExecutionldf)+u11),System,cut.printin(流流程定義程定義ID:+tm5k.getPiQ匚匚ESSDefinition工工d()十十 指定查詢張三的待辦,可以查詢出待辦為第一個(gè)節(jié)點(diǎn)的處理任務(wù)。完成待辦任務(wù)芫成任務(wù),將任務(wù)向下一步推法芫成任務(wù),將任務(wù)向下一步推法TestpublicvoidpublicvoidcompleteTask()Stringtaskld=*25041

39、f-thisthis. .processEngine*getTaskService()/SBjjf-Service,complete(taskId)5/,參獨(dú)為任務(wù)參獨(dú)為任務(wù)工口工口System.outout. .printingn+ta5krd)j)其中taskId對(duì)應(yīng)act_ru_task表的主鍵ID,因?yàn)楫?dāng)前待辦任務(wù)為第一個(gè)節(jié)點(diǎn)提交申請(qǐng),當(dāng)執(zhí)行完這個(gè)待辦后下一條待辦數(shù)據(jù)將會(huì)流轉(zhuǎn)到審批【部門(mén)經(jīng)理】那,然后以此類(lèi)推可以將部門(mén)經(jīng)理和總經(jīng)理的待辦任務(wù)全部查詢和執(zhí)行完成。5.查詢和刪除流程定義1)查詢流程定義學(xué)學(xué)查詢編程定義查詢編程定義publievoidfindProcessOefLntion(

40、)Listlist=cessEngineigetRepositoryServii.createProcesiDefinitionQuepy()指定查詢條件指定查詢條件* */ /.deploymentId(deploym&ntld)使用使用部署部署對(duì)象工履詢對(duì)象工履詢. .口口口口c6!工工5??偳гL??偳гL1七七1口門(mén)工口門(mén)工6出廣口匚出廣口匚& & 5口建千口建千1門(mén)門(mén)1。門(mén)工。門(mén)工1)使用流程定義使用流程定義10詢?cè)?processDefinitionKey(pracessDefinitianKce&sDefinitionKey

41、LikletprocessDefinitionKeyLike)/使用溫程定義的名群模艇使用溫程定義的名群模艇/*/*排序排序V, ,一弓一弓0rlsion。,冷與仁,冷與仁( () ). .”技照版本的升序排列技照版本的升序排列/申尊平返回結(jié)臬莫率/J北七北七()()i返回一個(gè)集合列表?封裝流程定義返回一個(gè)集合列表?封裝流程定義singleResult()返回返回一個(gè)唯一結(jié)果一個(gè)唯一結(jié)果count()/()/,返回笠果集轆返回笠果集轆listPage(firstResult3maxResults)/i5gifl1f(list!=null&11st,size()0)f(ProcessDe

42、finitionpd:List)System.out.println(*iJ3ID: 十十pd.gEtd() ; / / , 流 程 定 義 的流 程 定 義 的key+版 本版 本 瓚瓚System.out,printin(+pd g2tMsim2();/ /時(shí)應(yīng)時(shí)應(yīng)hmllcucirlSystem,cuf.printin(,槌定,槌定義的義的key:*+pd,getKey()j/對(duì)應(yīng)流程圖對(duì)應(yīng)流程圖 JS件件System.out.println(M5J;:“+pd gEtVwion();/當(dāng)藻程圭當(dāng)藻程圭5MkSystem.ouf.printin(-l荒原招稱荒原招稱bpmn文文件件: :

43、4Pd.getResourceName();Systenuout.ppintIn寞寞原名稱原名稱pn件:件:+pd.getDiagramRes-ourceNmeCSystem.outout. .pnintln(SP5ID:+fd.gotDeploymentld)j5y5丘丘m.outprintIn(#帕抻材帕抻材#件希件希# #林苛林苛# #書(shū)檸林書(shū)檸林# #材材# #樸樸#2)刪除流程定義* *刪除流程定義刪除流程定義* */*/Te弓七弓七publicvoiddeleteProcessDefinition()RepositoryServicerepositoryService=this.p

44、rocessEngine.getfiepositoi/ /宏津宏津# #* *只施刪臊沒(méi)有啟動(dòng)只施刪臊沒(méi)有啟動(dòng) 程的深程定文,如果流程啟動(dòng)劃拋出異常程的深程定文,如果流程啟動(dòng)劃拋出異常一一/ /repositoryServico-deletQDeployment(15001); ;刪除流握定義,刪除流握定義,工工D為闞為闞* *刪除流程定義刪除流程定義f f包括啟動(dòng)過(guò)的流程包括啟動(dòng)過(guò)的流程4repo&itoryService.deleteDeployment(1115061,true) 刪除流程定義,級(jí)聯(lián)刪除官刪除流程定義,級(jí)聯(lián)刪除官System,O4j*+println(fjtt):

45、6.流程變量操作設(shè)置流程變量1)設(shè)置流程變量有多種方式,可以在流程啟動(dòng),和任務(wù)執(zhí)行的時(shí)候設(shè)置a.啟動(dòng)流程的時(shí)候設(shè)置Stringkey二二”流程圖流程圖Td1Mpmsp=nwHashMap();map.put(id,1);map.put(user11,newPerson();runtimeService.startProcessInstanteByKey(keyjmap);b.通過(guò)taskService或者runtimeService設(shè)置/ /靠拿常拿靠拿常拿* *設(shè)置流程變里設(shè)置流程變里*/*/TestpublicvoidsetVariables()(TaskServicetaskServic

46、e=cessEngine.getTaskService();Stringtaskld二二H52564,*-/*L設(shè)孟流程變里,使用基本教掘類(lèi)型設(shè)孟流程變里,使用基本教掘類(lèi)型*/*/taskService,setVariable(taskld, 請(qǐng)假天數(shù)請(qǐng)假天數(shù)、7)7);t8skService.setVariable(takId?”請(qǐng)俵日財(cái),請(qǐng)俵日財(cái),r r w wDate();Date();taskService.5etVariable(taskId曄請(qǐng)假原因曄請(qǐng)假原因 不啥飯不啥飯);taskService.setVariahl&Local(taskldvtriab

47、leNamejvalue);/setVariab./*/*設(shè)置流程變量,使用設(shè)置流程變量,使用心噂口能供心噂口能供型率型率/ / /裳率球裳率球* *當(dāng)當(dāng); ;1 1忌睡煎股量到謙忌睡煎股量到謙程變量中后,要求程變量中后,要求jmnmb%且且n的屬性的屬性不能再發(fā)生變化,不能再發(fā)生變化,如如果發(fā)生果發(fā)生變化,變化,用用爨取的爨取的時(shí)假時(shí)假? ?* *就決就決方法方法: :需要在需要在jqVmbEm口口的序列化中的序列化中加上版本言加上版本言事事 J JPersonp=newPerson()Jp.set!d(2L)jp.5et4geC22);MmpMmpmap=newmap=newHashHap

48、(HashHap() ) mmp.put(p0,3V,p);taskService.setVarlabl&(taskId,person1,p);對(duì)象類(lèi)型的參頻必就序列化對(duì)象類(lèi)型的參頻必就序列化提示:如果設(shè)置的流程變量值是一個(gè)對(duì)象類(lèi)型,這個(gè)對(duì)象必須實(shí)現(xiàn)序列化Serializable操彳,并且要為該對(duì)象類(lèi)指定一個(gè)版本ID6.2獲取流程變量書(shū)獲取日程寞里書(shū)獲取日程寞里4ii iTestpublicvoidgetUariables()TaskServicetaskService=this_processEngine.getTaskService();Stringtaskid=*52504;/*

49、1 獲班流程變量,使用基本數(shù)據(jù)類(lèi)型獲班流程變量,使用基本數(shù)據(jù)類(lèi)型*/*/Integera appDay=(Tnteer)taskService.getVariable(taskId1無(wú)數(shù)無(wú)數(shù));atedate=(Date)taskService.getVariableftaskldj1111清假日期清假日期)iStringappText=(String)taskSenvice.getVariableftaskl 清清假原因假原因)jSystem,out.print+appDay);S/stem.out.printLn(4,iKg3lfl11-bdate);System.out.printLn+

50、appText);/ /苗奉苗奉2 2. .獲取琉程變量,使用獲取琉程變量,使用j j息姆卜則息姆卜則i i耙耙 本本/ /. .Personp=(Per5on)taskService.getVarlable(taskTd,person11);System.out.printLn(p-gtld()+r,+p.getName()+p4getAge();見(jiàn)工程操作見(jiàn)工程操作7.流程連線在畫(huà)流程圖的時(shí)候可以對(duì)流程的連線設(shè)置表達(dá)式,然后在執(zhí)行的時(shí)候設(shè)置流程變量值,然后Activiti會(huì)根據(jù)對(duì)應(yīng)的值走對(duì)應(yīng)的節(jié)點(diǎn)H HfrfrProProperriesperries二二g_g_ProblemsProble

51、ms驟驟AntAnt登登I IErrorLogErrorLogJUnitJUnit口口ConsoleConsole點(diǎn)擊一條連線,在Mainconfig中的Condition屬性值中設(shè)置$message=同意,另外一條線設(shè)置為$message=不同意,然后在代碼中設(shè)置對(duì)應(yīng)流程變量值。TestpublicvoidcompleteTask()Stringtaskld=165003;/設(shè)置連貌變量對(duì)應(yīng)的值,對(duì)應(yīng)設(shè)置連貌變量對(duì)應(yīng)的值,對(duì)應(yīng)li&nxli&nx:a abpmnbpmn中的線里面定義的羨達(dá)式的值中的線里面定義的羨達(dá)式的值Hapvariables=newHashHapf);va

52、riables.variables.put(put(messagemessage, ,下意下意”) )j jthisthis_ _processEngine.getTaskServicef).complete(taskivariables);將受里將受里i完成任務(wù)完成任務(wù),參數(shù)為務(wù)工參數(shù)為務(wù)工。5y號(hào)號(hào)tem.廣廣完成任羚完成任羚 任期任期ID:ttaskld); 見(jiàn)工程操作GeneralGeneralMainconfigMainconfigDocurneritaticnDocurneritaticnListenersListenersLabelwidth(50-500)Labelwidth(

53、50-500)Skipexpress!onSkipexpress!onConditionCondition2424$message=*raSt8.排他網(wǎng)關(guān)如下圖,其中黑色的叉叉對(duì)應(yīng)eclipse畫(huà)流程圖圖標(biāo)中的ExclusiveGateWay圖標(biāo)然后對(duì)每條線的Condition屬性指定對(duì)應(yīng)的表達(dá)式,然后在執(zhí)行任務(wù)時(shí)候設(shè)置對(duì)應(yīng)的流程變量總經(jīng)理審總經(jīng)理審3 3*Pro*Propertiesperties 與與顯顯ProblemsProblems塞塞AntAnt笠笠ErrorLogErrorLog於於UnitUnitQ QConsoConsoIeIeActiviti會(huì)根據(jù)變量的值來(lái)判斷對(duì)應(yīng)連線中的表

54、達(dá)式走對(duì)應(yīng)的流程節(jié)點(diǎn)路線。* *完成任箝,將任號(hào)向內(nèi)一步推送完成任箝,將任號(hào)向內(nèi)一步推送*/*/TestpublicvoidcompleteTaskf)Stringtaskld=p175004;1111設(shè)置連線設(shè)置連線變里對(duì)應(yīng)的值變里對(duì)應(yīng)的值,filiamxlan-bpmn中的線里面定義中的線里面定義的表達(dá)式的值的表達(dá)式的值Hapvariiables=newHahHap();variables.put(money1,790)設(shè)置變里名版設(shè)置變里名版描述線巾的表達(dá)我的名稱,描述線巾的表達(dá)我的名稱,值對(duì)應(yīng)值對(duì)應(yīng)* *為為加加cessEngine.getlaskServicc().c

55、ompletettaskldjvariables);/完成任務(wù)完成任務(wù),差觸為差觸為任務(wù)任務(wù)工工DCE費(fèi) 用 報(bào) 消 申費(fèi) 用 報(bào) 消 申金額大于等于金額大于等于5 5口口0 0小于小于10001000100|SmorTey=500fit&money*|SmorTey=500fit&money*1000)1000)金額大金額大于于 1 加加口口GeneralGeneralLobelwidth(SO-500)SlapexpressionSlapexpressionConditionCondition經(jīng)理竄批經(jīng)理竄批MainconfigMainconfigDQtumntatiarD

56、Qtumntatiar財(cái)務(wù)審此財(cái)務(wù)審此見(jiàn)工程操作.并行網(wǎng)關(guān)并行網(wǎng)關(guān)不需要指定連線的表達(dá)式,完成后在會(huì)將流程流轉(zhuǎn)到下一個(gè)節(jié)點(diǎn)見(jiàn)工程操作十字圖標(biāo)對(duì)應(yīng)圖標(biāo)中的ParallelGateway6當(dāng)流程流轉(zhuǎn)到并行任務(wù)時(shí)會(huì)出發(fā)多個(gè)任務(wù),當(dāng)多個(gè)任務(wù).個(gè)人任務(wù)的三種指定方式在Assignee中指定任務(wù)具體的處理人 *Prtipertie*Prtipertie二_ _Prcblerrs4AntPrcblerrs4Ant0J0JErrorLogErrorLog前JUnitJUnitSConsoleSConsoleGereraCandidateU5e.maseparated)CandidateU5e.masepara

57、ted)DocumentationCandidategro.maseparated)Candidategro.maseparated)FormFormkeykeyMultiinstanceMultiinstance6MainMainconfigormorm在Assignee中指定任務(wù)的處理人或角色變量任務(wù)O*Properties*Properties與ProblemsProblems凈AntAnt。ErrorLogErrorLogpf?pf?JUnitJUnit曰ConsoleConsoleGeneraGenera1 1SfuserldySfuserldyMainconfigMainconfi

58、gCandidateuse.Candidateuse.P PmdseparatedmdseparatedDecumentailcnFomnCandidategCandidateg口mmseparatedmmseparatedListenersFormkeyFormkey當(dāng)指定Assignee為一個(gè)變量值后需要在代碼中設(shè)置對(duì)應(yīng)的處理人,比如在啟動(dòng)的時(shí)候設(shè)置userid的值(STestpublicvoidpublicvoidf flowStart2()RuntimcServicepuntiineSirvirLt!=process.Engine.getRuntimeServica();/用用key啟

59、對(duì)啟對(duì)JI按照最割的流程版本定義啟動(dòng)按照最割的流程版本定義啟動(dòng)Mapvariables=newHashMap()jvariables.put(sertId,james);Proces&TnstanceprocessInstance=runtimeService,startProcessInstancelSystem.aut.println(processInstance.gt工工d();/ /加程實(shí)到工口加程實(shí)到工口System+out.printingprocessInstance gtDeplQynentId();/ /流程定義流程定義TD在工程中可以將起草人白處理變量設(shè)置為use

60、rid,審批人的處理變量設(shè)置為appUserld,然后通過(guò)業(yè)務(wù)模塊和登錄人來(lái)獲取對(duì)應(yīng)模塊的審批人。為任務(wù)節(jié)點(diǎn)設(shè)置一個(gè)監(jiān)聽(tīng)類(lèi)來(lái)設(shè)置當(dāng)前節(jié)點(diǎn)的處理人如果設(shè)置了監(jiān)聽(tīng)類(lèi)就不需要在設(shè)置Assignee的值1)創(chuàng)建一個(gè)監(jiān)聽(tīng)器類(lèi),需要實(shí)現(xiàn)TaskListener接口(&5uppres&Warnings(serial”)publicvoidnotify(Delegate!askdelegateTask)/這里可以中員據(jù)登陸人的這里可以中員據(jù)登陸人的I鰭間對(duì)應(yīng)的瓠導(dǎo)人鰭間對(duì)應(yīng)的瓠導(dǎo)人, ,然后設(shè)置下然后設(shè)置下一步的申批九一步的申批九1選選/可以揩定個(gè)人任務(wù)的辦理可以揩定個(gè)人任務(wù)的辦理人,人,也可以指定組任勢(shì)的辦理人也可以指定組任勢(shì)的辦理人delegateTaskdelegateTask, ,setAssigneefsetAssigneef); ;2)點(diǎn)擊任務(wù)節(jié)點(diǎn),選擇Listener選項(xiàng)卡,點(diǎn)擊New,將Event的值改為create然后選擇創(chuàng)建的TaskListenerlmpI實(shí)現(xiàn)類(lèi)publicc

溫馨提示

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

評(píng)論

0/150

提交評(píng)論