![Activiti流程實(shí)例_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/6098c835-c42f-4b0e-b58c-302bb5b31dfd/6098c835-c42f-4b0e-b58c-302bb5b31dfd1.gif)
![Activiti流程實(shí)例_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/6098c835-c42f-4b0e-b58c-302bb5b31dfd/6098c835-c42f-4b0e-b58c-302bb5b31dfd2.gif)
![Activiti流程實(shí)例_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/6098c835-c42f-4b0e-b58c-302bb5b31dfd/6098c835-c42f-4b0e-b58c-302bb5b31dfd3.gif)
![Activiti流程實(shí)例_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/6098c835-c42f-4b0e-b58c-302bb5b31dfd/6098c835-c42f-4b0e-b58c-302bb5b31dfd4.gif)
![Activiti流程實(shí)例_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/8/6098c835-c42f-4b0e-b58c-302bb5b31dfd/6098c835-c42f-4b0e-b58c-302bb5b31dfd5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1重要概念掃盲1.1前言 從本篇文章我們開始介紹工作流框架activiti的相關(guān)知識(shí),不過在介紹activiti的知識(shí)之前,我們很有必要對(duì)工作流的一些基本概念進(jìn)行了解。1.1.1工作流重要概念 Workflow Workflow(工作流)是“業(yè)務(wù)過程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化,是對(duì)工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象、概括描述”,它主要解決的是“使在多個(gè)參與者之間按照一種提前定義好的規(guī)則流程來(lái)傳遞與執(zhí)行文檔、信息或任務(wù)的過程,讓這個(gè)過程可以自動(dòng)進(jìn)行或者部分自動(dòng)執(zhí)行,從而完成預(yù)期的業(yè)務(wù)目標(biāo)”。 W
2、fMC 提到工作流就不能不提到工作流管理聯(lián)盟(WfMC,WorkflowManagementCoalition),它是一個(gè)由涉及工作流和業(yè)務(wù)流程管理的推廣學(xué)者(adopters)、開發(fā)工程師、顧問、分析師、大學(xué)和研究團(tuán)體的全球性組織,它的成立,標(biāo)志著工作流技術(shù)開始進(jìn)入相對(duì)成熟的階段。該組織創(chuàng)建并完善了工作流管理系統(tǒng)的相關(guān)術(shù)語(yǔ)、體系結(jié)構(gòu)及應(yīng)用編程接口等方面制定了一系列標(biāo)準(zhǔn),是唯一的致力于工作流標(biāo)準(zhǔn)的專業(yè)組織。 WfMS 接下來(lái)要說(shuō)的是工作流管理系統(tǒng)(WorkflowManagement System,WfMS)
3、,它完成了工作量的定義和管理,并按照在系統(tǒng)中預(yù)先定義好的工作流規(guī)則進(jìn)行工作流實(shí)例的執(zhí)行的軟件系統(tǒng),這里要說(shuō)明一下的是,并不是我們企業(yè)自己的系統(tǒng)應(yīng)用了工作流就是工作流管理系統(tǒng)了,工作流管理系統(tǒng)不是企業(yè)的業(yè)務(wù)系統(tǒng),而是為企業(yè)的業(yè)務(wù)系統(tǒng)的運(yùn)行提供了一個(gè)軟件的支撐環(huán)境。WfMS被用來(lái)定義、管理和執(zhí)行工作流程,它的目標(biāo)是管理工作的流程以確保工作在正確的時(shí)間被期望的人員所執(zhí)行。同時(shí)也可以在自動(dòng)化進(jìn)行的業(yè)務(wù)過程中插入人工的執(zhí)行和干預(yù)。 WfMS與工作流框架 WfMS我一般習(xí)慣于稱它為工作流框架,常見的工作流框Activiti、JBPM、OSWorkflow、A
4、ctiveBPEL、YAWL等。 1.1.2工作流引擎 個(gè)人覺得直接理解工作流引擎概念有點(diǎn)難度,我們可以先通過了解工作流引擎的職責(zé)再反過來(lái)理解工作流引擎,工作流引擎一般都做兩件事情: 1.定義流程,也就是給我們提供某種規(guī)范來(lái)定義規(guī)則,以及如何定義一個(gè)流程的這種規(guī)范,同事我們可以根據(jù)工作流引擎提供的相關(guān)概念來(lái)定義更為復(fù)雜的流程,這就是工作流引擎做的第一件事叫做定義流程。 2.執(zhí)行流程,也就是工作流引擎需要解釋這個(gè)規(guī)則,還要負(fù)責(zé)流程,它相當(dāng)于流程的調(diào)度者,監(jiān)控每個(gè)流程的執(zhí)行情況,并將流程
5、操作發(fā)往下一步,或者根據(jù)條件休眠或終止流程的這么一個(gè)過程就叫做執(zhí)行流程。 了解完工作流引擎的這兩個(gè)職責(zé),我相信對(duì)于什么是工作流引擎一定已經(jīng)有了一定的認(rèn)識(shí)了,我們?cè)谟靡痪渖晕⒂悬c(diǎn)官方的話來(lái)總結(jié)一下工作流引擎,工作流引擎為我們提供相關(guān)規(guī)則概念的定義,給我們提供了相關(guān)的API來(lái)調(diào)用這個(gè)引擎去執(zhí)行流程。流程的操作實(shí)際上就是工作流引擎提供相關(guān)的api我們?nèi)フ{(diào)用它。 工作流框架與工作流引擎 上面我們提及了常見了幾個(gè)工作流框架,其中現(xiàn)在的Activiti和JBPM5.0之前的版本都是基于ProcessEngine 工作流引
6、擎的工作流框架;JBPM5.0開始是基于DroolsFlow為工作流引擎的工作流框架;其中OSWorkflow是以工作流引擎命名的工作流框架,所以O(shè)SWorkflow是基于OSWorkflow工作流引擎的工作流框架;ActiveBPEL是基于工作流BPEL引擎的工作流框架. 到這里關(guān)于工作流的相關(guān)概念就介紹完了,接下來(lái)我們先了解一下我們的主角activiti的前世今生。 1.1.3 Activiti前世今生 Activiti 的創(chuàng)始人是 Tom Baeyens 說(shuō)到Tom B
7、aeyens 就不能不提他與jbpm的淵源。TomBaeyens 是 jBPM 的創(chuàng)始人,在 2002年,Tom Baeyens創(chuàng)建了基于狀態(tài)機(jī)原理的jBPM流程引擎。jBPM經(jīng)過了JBoss和Redhat公司之后,發(fā)展到了 jBPM 4。由于jBPM使用的是 GPL開源協(xié)議,并且與JBoss和Redhat公司的其他產(chǎn)品線結(jié)合的越來(lái)越緊密,對(duì)jBPM在更廣泛的范圍使用形成了阻礙。JBoss內(nèi)部對(duì)jBPM未來(lái)版本的架構(gòu)實(shí)現(xiàn)產(chǎn)生了嚴(yán)重的意見分歧,在2005年 Tom Baeyens離開了JBoss公司加入了Alfresco 公司,創(chuàng)建了使用Apache based-license V2的
8、、獨(dú)立于Alfresco產(chǎn)品的開源流程產(chǎn)品Activiti 。Activiti在2010年3月份開始啟動(dòng),到了2010年12月份正式發(fā)布第一個(gè)版本,新的基于jBPM4的開源工作流系統(tǒng)Activiti 5.0 !所以說(shuō)Activiti5是在jBPM 3、jBPM 4的基礎(chǔ)上發(fā)展而來(lái)的,是原jBPM 的延續(xù)。 Activiti 與jBPM 5的比較 jBPM 5則與之前的jBPM3、jBPM 4沒有太大關(guān)聯(lián),且舍棄了備受推崇的PVM(流程虛擬機(jī))思想,轉(zhuǎn)而選擇jBoss自身產(chǎn)品DroolsFlow作為流程引擎
9、的核心實(shí)現(xiàn),工作流最為重要的“人機(jī)交互”任務(wù)(類似于審批活動(dòng))則由單獨(dú)的一塊“Human Task Service”附加到DroolsFlow上實(shí)現(xiàn),任務(wù)的查詢、處理等行為通過Apache Mina異步通信機(jī)制完成。 序號(hào)技術(shù)組成ActivitijBPM51數(shù)據(jù)庫(kù)持久層ORMMyBatis3Hibernate32持久化標(biāo)準(zhǔn)無(wú)JPA規(guī)范3事務(wù)管理MyBatis機(jī)制/spring事務(wù)控制Bitronix,基于JTA事務(wù)管理4數(shù)據(jù)庫(kù)連接方式Jdbc/DataSourceJdbc/DataSource5支持?jǐn)?shù)據(jù)庫(kù)Oracle、SQL Server、MySQL等多數(shù)數(shù)據(jù)庫(kù)Oracle、SQL
10、Server、MySQL等多數(shù)數(shù)據(jù)庫(kù)6設(shè)計(jì)模式Command模式、觀察者模式等無(wú)7內(nèi)部服務(wù)通訊Service間通過API調(diào)用基于Apache Mina異步通訊8集成接口SOAP、Mule、RESTful消息通訊9支持的流程格式BPMN2、xPDL、jPDL等目前僅只支持BPMN2 xml10引擎核心PVM(流程虛擬機(jī))Drools11技術(shù)前身jBPM3、jBPM4Drools Flow12所屬公司AlfrescojB 從表格中的比較我們可以看出,Activiti最大的優(yōu)勢(shì)是采用了PVM(流程虛擬機(jī)),支持除了BPMN2.0規(guī)范之外的流程格式,
11、與外部服務(wù)有良好的集成能力,延續(xù)了jBPM3、jBPM4良好的社區(qū)支持,服務(wù)接口清晰,鏈?zhǔn)紸PI更為優(yōu)雅;劣勢(shì)是持久化層沒有遵循JPA規(guī)范。 jBPM最大的優(yōu)勢(shì)是采用了ApacheMina異步通信技術(shù),采用JPA/JTA持久化方面的標(biāo)準(zhǔn),以功能齊全的Guvnor作為流程倉(cāng)庫(kù),有RedHat(jB被紅帽收購(gòu))的專業(yè)化支持;但其劣勢(shì)也很明顯,對(duì)自身技術(shù)依賴過緊且目前僅支持BPMN2。 我們對(duì)Activiti和jBPM進(jìn)行比較目的是為了讓我們可以對(duì)他們的特性更加的了解,只有了解了他們的特性以后,這樣當(dāng)我們遇到具
12、體的項(xiàng)目時(shí)就可以根據(jù)需要來(lái)選用適合的工作流框架。 1.2總結(jié) 我們這篇文章主要介紹了工作流相關(guān)的基本概念,同時(shí)又了解了Activiti的前世今生,最后將Activiti與jBPM進(jìn)行了比較。2 Activiti整體認(rèn)識(shí)2.1前言 在上一篇文章中我們將工作流的相關(guān)概念、activiti的前世今生、activiti與jbpm的比較進(jìn)行學(xué)習(xí),這篇文章我們正式進(jìn)行activiti的學(xué)習(xí),activiti的整個(gè)學(xué)習(xí)我們主要通過例子的形式來(lái)理解。今天我們主要是準(zhǔn)備下activiti的環(huán)境,在數(shù)據(jù)庫(kù)中創(chuàng)建activiti默
13、認(rèn)的23張表以及activiti核心對(duì)象ProcessEngine最后是一個(gè)activiti的簡(jiǎn)單demo。2.2 環(huán)境準(zhǔn)備 相關(guān)軟件及版本: jdk版本:Jdk1.8 IDE:eclipse 數(shù)據(jù)庫(kù):MySQL Activiti:5.13 eclipse中安裝流程設(shè)計(jì)器插件: eclipse打開help->install new software,單擊add:
14、 Name: Activiti BPMN2.0 designer Location:/designer/update/ 進(jìn)行安裝即可。 引入jar包: $Activiti_HOME/install/activiti-5.13/libs(activiti相關(guān)包)+mysql對(duì)應(yīng)驅(qū)動(dòng)包(mysql-connector-Java.jar) jar包引入完畢后,我們環(huán)境
15、就準(zhǔn)備的差不多了,往下我們就該創(chuàng)建我們activiti數(shù)據(jù)庫(kù)默認(rèn)的表了。2.3 創(chuàng)建activiti表 在activiti中,相對(duì)于前身jbpm基礎(chǔ)上又額外多了5張表,所有現(xiàn)在的activiti框架默認(rèn)提供了23張表。所以第一步我們就來(lái)創(chuàng)建這23張表。 方法1:使用代碼來(lái)創(chuàng)建activiti工作流的表 java view plain copy1. 方法1:使用代碼來(lái)創(chuàng)建activiti工作流的表 2. 3. / 使用代碼創(chuàng)建工作流需要的23張表
16、60;4. Test 5. public void createTable() 6. / 工作流引擎的全部配置 7. ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration 8.
17、60; .createStandaloneProcessEngineConfiguration(); 9. 10. / 鏈接數(shù)據(jù)的配置 11. processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver"); 12.
18、160; processEngineConfiguration 13. .setJdbcUrl("jdbc:mysql:/localhost:3306/activiti1?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8"); 14.
19、60; processEngineConfiguration.setJdbcUsername("root"); 15. processEngineConfiguration.setJdbcPassword("123456"); 16. 17. /* 18. * public stat
20、ic final String DB_SCHEMA_UPDATE_FALSE = "false" 19. * 不能自動(dòng)創(chuàng)建表,需要表存在 public static final String DB_SCHEMA_UPDATE_CREATE_DROP 20. * = "create-drop"
21、; 先刪除表再創(chuàng)建表 public static final String 21. * DB_SCHEMA_UPDATE_TRUE = "true"如果表不存在,自動(dòng)創(chuàng)建表 22. */ 23. /如果表不存在,自動(dòng)創(chuàng)建表 24.
22、 processEngineConfiguration 25. .setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); 26. / 工作流的核心對(duì)象,ProcessEnginee對(duì)象 27.
23、; ProcessEngine processEngine = processEngineConfiguration 28. .buildProcessEngine(); 29. System.out.println(processEngine); 30. 31.
24、 32. 代碼執(zhí)行完畢,我們通過navicat查看數(shù)據(jù)庫(kù)會(huì)發(fā)現(xiàn),創(chuàng)建了一個(gè)新的數(shù)據(jù)庫(kù)activiti1,并且還有23張表。 方式2:使用配置文件來(lái)創(chuàng)建activiti的表 在類路徑下創(chuàng)建Activiti.cfg.xml文件,文件內(nèi)容為:java view plain copy1. <beans xmlns="/schema/beans" 2
25、. xmlns:context="/schema/context" xmlns:tx="/schema/tx" 3. xmlns:xsi="/2001/XMLSchema-instance" 4.
26、0;xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd 5. /schema/context /schema/context/spring-context-2.5.xsd 6. http:/www.springfra
27、/schema/tx /schema/tx/spring-tx-3.0.xsd"> 7. 8. 9. <bean id="processEngineConfiguration" 10. class="org.act
28、iviti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> 11. <!- 連接數(shù)據(jù)的配置 -> 12. <property name="jdbcDriver" value="com.mysql.j
29、dbc.Driver"></property> 13. <property name="jdbcUrl" 14. value="jdbc:mysql:/localhost:3306/activiti1?createDatabaseIfNotE
30、xist=true&useUnicode=true&characterEncoding=utf8"></property> 15. <property name="jdbcUsername" value="root"></property> 16.
31、; <property name="jdbcPassword" value="123456"></property> 17. <!- 沒有表創(chuàng)建表 -> 18. <property name="databaseS
32、chemaUpdate" value="true"></property> 19. </bean> 20. 21. </beans> 通過代碼來(lái)加載配置文件中內(nèi)容:java view plain copy1. /* 2. * 使用配置文件來(lái)創(chuàng)建數(shù)據(jù)庫(kù)中的表 3. */
33、; 4. Test 5. public void createTable_2() 6. /通過讓工作流引擎的全部配置對(duì)象來(lái)執(zhí)行配置文件中的內(nèi)容來(lái)創(chuàng)建流程引擎對(duì)象 7. ProcessEngine processEngine = ProcessEngineConfiguration 8.
34、0; .createProcessEngineConfigurationFromResource( 9. "activiti.cfg.xml").buildProcessEngine(); 10.
35、160; System.out.println("processEngine" + processEngine); 11. 運(yùn)行產(chǎn)生的結(jié)果與第一種是一樣的,其中這一種通過配置文件的方式是用的是比第一種多的。 連接數(shù)據(jù)庫(kù)url寫法: 無(wú)論是通過代碼還是通過xml文件來(lái)創(chuàng)建工作流的表,里面都涉及到一個(gè)知識(shí)點(diǎn)就是mysql的url的寫法,我們進(jìn)行下小結(jié): #autoReconnect當(dāng)數(shù)據(jù)庫(kù)連接丟失時(shí)是否自動(dòng)
36、連接,取值true/false 缺省為false #maxReconnects如果autoReconnect為true,此參數(shù)為重試次數(shù),缺省為3次 #initialTimeout如果autoReconnect為true,此參數(shù)為重新連接前等待的秒數(shù)缺省為2 #maxRows設(shè)置查詢時(shí)返回的行數(shù),0表示全部缺省為0 #useUnicode是否使用unicode輸出,true/false缺省為false #characterEncoding如果useUni
37、code,該參數(shù)制定encoding類型,建議使用utf8缺省為無(wú) #createDatabaseIfNotExist當(dāng)JDBC連接指定數(shù)據(jù)庫(kù),如果此數(shù)據(jù)庫(kù)不存在,此參數(shù)值為true時(shí),則自動(dòng)創(chuàng)建此數(shù)據(jù)庫(kù) 下面是一個(gè)url的例子:java view plain copy1. jdbc:mysql:/localhost:3306/ourmysql? 2. createDatabaseIfNotExist=true& 3. amp;useUnicode=true&
38、amp; 4. amp;characterEncoding=utf8& 5. amp;autoReconnect=true& 6. amp;useLocalSessionState=true 2.4 核心對(duì)象ProcessEngine 數(shù)據(jù)庫(kù)里的表創(chuàng)建完畢,接下來(lái)我們講述activiti里面的核心對(duì)象ProcessEngine。 ProcessEngine類,一般稱為流程引擎類,沒錯(cuò),這個(gè)流程引擎就是我們上一篇文章中
39、提到的流程引擎,它是activiti中最核心的類,并且這個(gè)類是線程安全的,所有的線程和請(qǐng)求都可以使用同一個(gè)ProcessEngine對(duì)象,其它常用類幾乎也都是由它而來(lái)的。 得到ProcessEngine對(duì)象: 方式1:使用classpath根目錄下的默認(rèn)配置文件jbpm.cfg.xml創(chuàng)建一個(gè)單例的ProcessEngine java view plain copy1. ProcessEngineprocessEngine = ProcessEngines.getDefaultProcessEng
40、ine(); 方式2:指定其他位置:配置文件,如src根目錄config包下的my-jbpm-cfg.xml。 java view plain copy1. ProcessEngineprocessEngine = ProcessEngineConfiguration 2. .createProcessEngineConfigurationFromResource( 3. "config/my-jbpm-cfg.xml").buil
41、dProcessEngine(); 得到各個(gè)Service RepositoryService RepositoryService是管理流程定義的倉(cāng)庫(kù)服務(wù)的接口。 java view plain copy1. RepositoryServicerepositoryService = processEngine.getRepositoryService(); RuntimeService
42、160; RuntimeService是activiti的流程執(zhí)行服務(wù)類??梢詮倪@個(gè)服務(wù)類中獲取很多關(guān)于流程執(zhí)行相關(guān)的信息,如執(zhí)行管理,包括啟動(dòng)、推進(jìn)、刪除流程實(shí)例等操作。 java view plain copy1. RuntimeServiceruntimeService = processEngine.getRuntimeService(); TaskService TaskService是activiti的任務(wù)服務(wù)
43、類??梢詮倪@個(gè)類中獲取任務(wù)的信息。 java view plain copy1. TaskServicetaskservice = processEngine.getTaskService(); HistoryService HistoryService 是activiti的查詢歷史信息的類。在一個(gè)流程執(zhí)行完成后,這個(gè)對(duì)象為我們提供查詢歷史信息。 java view plain copy1. HistoryServic
44、ehistoryService = processEngine.getHistoryService(); 到這里關(guān)于activiti核心對(duì)象ProcessEngine先介紹這么多,下面看我們的小的helloworld的demo。2.5 Demo流程2.5.1 第一步流程設(shè)計(jì)畫出業(yè)務(wù)流程 我們通過流程設(shè)計(jì)器就可以拖拖拽拽出我們的流程,同時(shí)設(shè)置相關(guān)屬性,保存后會(huì)生成兩個(gè)文件,分別是helloworld.bpmn和helloworld.png. 這是我們的流程圖: 2.5.2 第二步部署流程定義
45、60;java view plain copy1. /* 2. * 部署流程定義 3. */ 4. Test 5. public void deploymentProcessDefinition() 6. /創(chuàng)建核心引擎對(duì)象 7. ProcessEngine processEngine =
46、 ProcessEngines.getDefaultProcessEngine(); 8. Deployment deployment = processEngine.getRepositoryService()/ 與流程定義和部署對(duì)象相關(guān)的service 9. .createDeployment()/
47、;創(chuàng)建一個(gè)部署對(duì)象 10. .name("helloworld入門程序")/ 添加部署的名稱 11. .addClasspathResource("diagrams/helloworld.bpmn")/ cl
48、asspath的資源中加載,一次只能加載 12.
49、 / 一個(gè)文件 13. .addClasspathResource("diagrams/helloworld.png")/ classpath的資源中加載,
50、一次只能加載 14.
51、160; / 一個(gè)文件 15. .deploy();/ 完成部署 16. System.out.println("部署ID:" + deploymen
52、t.getId(); 17. System.out.println("部署名稱:" + deployment.getName(); 18. 運(yùn)行結(jié)果: 部署ID:1 部署名稱:helloworld入門程序 2.5.3 第三步 啟動(dòng)流程實(shí)例java view plain copy1. /* 2. * 啟動(dòng)流程實(shí)例
53、0;3. */ 4. Test 5. public void startProcessInstance() 6. / 流程定義的key 7. String processDefinitionKey = "HelloWorld" 8. Proc
54、essInstance pi = processEngine.getRuntimeService()/ 于正在執(zhí)行的流程實(shí)例和執(zhí)行對(duì)象相關(guān)的Service 9. .startProcessInstanceByKey(processDefinitionKey);/ 使用流程定義的key啟動(dòng)流程實(shí)例,key對(duì)應(yīng)hellworld.bpmn文件中id的屬性值,使用key值啟動(dòng),默認(rèn)是按照
55、最新版本的流程定義啟動(dòng) 10. System.out.println("流程實(shí)例ID:" + pi.getId();/ 流程實(shí)例ID 101 11. System.out.println("流程定義ID:" + pi.getProcessDefinitionId(); / 流程定義ID HelloWorld:1:4 &
56、#160;運(yùn)行結(jié)果為: 流程實(shí)例ID:101 流程定義ID:HelloWorld:1:42.5.4 第四步查詢當(dāng)前辦理人的個(gè)人任務(wù)java view plain copy1. /* 2. * 查詢當(dāng)前人的個(gè)人任務(wù) 3. */ 4. Test 5. public void findMyPersonTask() 6. String
57、 assignee = "張三" 7. List<Task> list = processEngine.getTaskService()/ 與正在執(zhí)行的認(rèn)為管理相關(guān)的Service 8. .createTaskQuery()/ 創(chuàng)建任務(wù)查詢對(duì)象
58、0; 9. .taskAssignee(assignee)/ 指定個(gè)人認(rèn)為查詢,指定辦理人 10. .list(); 11. 12. if (list !=
59、 null && list.size() > 0) 13. for (Task task:list) 14. System.out.println("任務(wù)ID:"+task.get
60、Id(); 15. System.out.println("任務(wù)名稱:"+task.getName(); 16. System.out.println("任務(wù)的創(chuàng)建時(shí)間"+task); 17.
61、 System.out.println("任務(wù)的辦理人:"+task.getAssignee(); 18. System.out.println("流程實(shí)例ID:"+task.getProcessInstanceId(); 19.
62、; System.out.println("執(zhí)行對(duì)象ID:"+task.getExecutionId(); 20. System.out.println("流程定義ID:"+task.getProcessDefinitionId(); 21.
63、 System.out.println("#"); 22. 23. 24. 運(yùn)行結(jié)果: 任務(wù)ID:104 任務(wù)名稱:提交申請(qǐng)
64、0; 任務(wù)的創(chuàng)建時(shí)間Taskid=104,name=提交申請(qǐng) 任務(wù)的辦理人:張三 流程實(shí)例ID:101 執(zhí)行對(duì)象ID:101 流程定義ID:HelloWorld:1:4 # 2.5.5 第五步 完成任務(wù)java view plain copy1. /* 2. * 完成我的任務(wù) 3. */ 4. Test 5. publ
65、ic void completeMyPersonTask() 6. /任務(wù)Id 7. String taskId="104" 8. processEngine.getTaskService()/與正在執(zhí)行的認(rèn)為管理相關(guān)的Service 9.
66、160; .complete(taskId); 10. System.out.println("完成任務(wù):任務(wù)ID:"+taskId); 11. 12. 運(yùn)行結(jié)果: 完成任務(wù):任務(wù)ID:104 到這里我們就完成了一個(gè)簡(jiǎn)單的helloworld,從畫一個(gè)流程圖、到部署流程定義、啟動(dòng)流程實(shí)例、查詢當(dāng)前辦理人的任務(wù)、完成當(dāng)前的任務(wù),從
67、第二步開始每一步在數(shù)據(jù)庫(kù)中都會(huì)有相應(yīng)的記錄進(jìn)行添加、刪除、更新,我們運(yùn)行產(chǎn)生的結(jié)果也都是從數(shù)據(jù)庫(kù)中查出來(lái)的記錄,關(guān)于每一步對(duì)應(yīng)與數(shù)據(jù)庫(kù)中怎樣的變化,我們會(huì)在后續(xù)的文章繼續(xù)介紹。2.6 后記 我們本篇文章主要講述了activiti的環(huán)境準(zhǔn)備包含各個(gè)軟件的版本和安裝流程設(shè)計(jì)器,接下來(lái)我們講解了兩種方式來(lái)創(chuàng)建activiti的23張表,還夾雜著一個(gè)數(shù)據(jù)庫(kù)連接url的寫法,接下來(lái)是activiti核心對(duì)象ProcessEngine,以及通過ProcessEngine獲取相關(guān)的Service,最后通過一個(gè)特別簡(jiǎn)單的小demo來(lái)讓大家對(duì)部署流程定義、啟動(dòng)流程實(shí)例、查詢當(dāng)前任務(wù)、完
68、成當(dāng)前任務(wù)這些步驟有一個(gè)感性的認(rèn)識(shí),詳細(xì)的內(nèi)容我們會(huì)在后續(xù)文章繼續(xù)介紹。3 Activiti流程定義管理3.1 前言 在上一篇文章我們通過一個(gè)小demo對(duì)Activiti進(jìn)行了宏觀的介紹,讓大家對(duì)Activiti有了整體的認(rèn)識(shí),這篇文章我們來(lái)學(xué)習(xí)具體的流程定義管理的CRUD.3.2 正文3.2.1 流程定義是什么 ProcessDefinition(流程定義)就是一個(gè)流程的步驟說(shuō)明,比如我們接下來(lái)要說(shuō)的這個(gè)流程,申請(qǐng)人王三發(fā)起提交申請(qǐng),李四作為部門經(jīng)理進(jìn)行審批,審批完成后,此申請(qǐng)到達(dá)下一級(jí)總經(jīng)理王五,進(jìn)行審批。就這么整個(gè)流程說(shuō)明其實(shí)就是流程定
69、義,不過在Activiti中整個(gè)流程定義是以helloworld.bpmn與helloworld.png格式存在的。 在上一篇文章中我們只是稍微提了下,關(guān)于helloworld.bpmn是在流程設(shè)計(jì)器中拖拖拽拽形成的,其實(shí)還可以通過在配置文件中進(jìn)行配置,具體的圖形我已經(jīng)放到了上一篇文章中了,現(xiàn)在我就將我配置好的helloworld.bpmn配置文件展示給大家:html view plain copy1. <?xml version="1.0" encoding="UTF-8"?>
70、; 2. <definitions xmlns="/spec/BPMN/20100524/MODEL" xmlns:xsi="/2001/XMLSchema-instance" xmlns:xsd="/2001/XMLSchema" xmlns:activiti="/bpmn" xmlns:bpmndi=&
71、quot;/spec/BPMN/20100524/DI" xmlns:omgdc="/spec/DD/20100524/DC" xmlns:omgdi="/spec/DD/20100524/DI" typeLanguage="/2001/XMLSchema" expressionLanguage="/1999/X
72、Path" targetNamespace="/test"> 3. <process id="HelloWorld" name="HelloWorldProcess" isExecutable="true"> 4. <startEvent id="starteven
73、t1" name="Start"></startEvent> 5. <endEvent id="endevent1" name="End"></endEvent> 6. <userTask id="usertask1" name="提交申請(qǐng)"
74、;activiti:assignee="張三"></userTask> 7. <userTask id="usertask2" name="審批【部門經(jīng)理】" activiti:assignee="李四"></userTask> 8. <userTask id="usertask3
75、" name="審批【總經(jīng)理】" activiti:assignee="王五"></userTask> 9. <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow> 10. &
76、#160; <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow> 11. <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="u
77、sertask3"></sequenceFlow> 12. <sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow> 13. </process> 14. <bpmn
78、di:BPMNDiagram id="BPMNDiagram_HelloWorld"> 15. <bpmndi:BPMNPlane bpmnElement="HelloWorld" id="BPMNPlane_HelloWorld"> 16. <bpmndi:BPMNShape bpmnElement=&quo
79、t;startevent1" id="BPMNShape_startevent1"> 17. <omgdc:Bounds height="35.0" width="35.0" x="320.0" y="50.0"></omgdc:Bounds> 18.
80、160; </bpmndi:BPMNShape> 19. <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> 20. <omgdc:Bounds height
81、="35.0" width="35.0" x="320.0" y="430.0"></omgdc:Bounds> 21. </bpmndi:BPMNShape> 22. <bpmndi:BPMNShape bpmnElement="usertas
82、k1" id="BPMNShape_usertask1"> 23. <omgdc:Bounds height="55.0" width="105.0" x="285.0" y="120.0"></omgdc:Bounds> 24. &
83、#160; </bpmndi:BPMNShape> 25. <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"> 26. <omgdc:Bounds height="55.0
84、" width="105.0" x="285.0" y="240.0"></omgdc:Bounds> 27. </bpmndi:BPMNShape> 28. <bpmndi:BPMNShape bpmnElement="usertask3"
85、160;id="BPMNShape_usertask3"> 29. <omgdc:Bounds height="55.0" width="105.0" x="285.0" y="350.0"></omgdc:Bounds> 30.
86、; </bpmndi:BPMNShape> 31. <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> 32. <omgdi:waypoint x="337.0" y="85
87、.0"></omgdi:waypoint> 33. <omgdi:waypoint x="337.0" y="120.0"></omgdi:waypoint> 34. </bpmndi:BPMNEdge> 35.
88、160; <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> 36. <omgdi:waypoint x="337.0" y="175.0"></omgdi:waypoint> 37.
89、0; <omgdi:waypoint x="337.0" y="240.0"></omgdi:waypoint> 38. </bpmndi:BPMNEdge> 39. <bpmndi:BPMNEdge bpmnElement=&q
90、uot;flow3" id="BPMNEdge_flow3"> 40. <omgdi:waypoint x="337.0" y="295.0"></omgdi:waypoint> 41. <omgdi:waypoint
91、;x="337.0" y="350.0"></omgdi:waypoint> 42. </bpmndi:BPMNEdge> 43. <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4"> &
92、#160;44. <omgdi:waypoint x="337.0" y="405.0"></omgdi:waypoint> 45. <omgdi:waypoint x="337.0" y="430.0"></omgdi:w
93、aypoint> 46. </bpmndi:BPMNEdge> 47. </bpmndi:BPMNPlane> 48. </bpmndi:BPMNDiagram> 49. </definitions> 通過流程設(shè)計(jì)器或者通過配置文件直接書寫都是可以的。3.2.2
94、流程定義的CRUD 部署流程定義 在進(jìn)行流程定義的操作之前,先要將流程定義進(jìn)行部署,部署流程定義的方式有兩種: 1.部署流程定義的helloworld.bpmn與helloworld.png兩個(gè)文件java view plain copy1. /* 2. * 部署流程定義 類路徑從classpath 3. */ 4. Test 5. public
95、void deoploymentProcessDefinition_classpath() 6. Deployment deployment = processEngine.getRepositoryService() / 與流程定義和部署對(duì)象相關(guān)的service 7. .createDeploym
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年再婚配偶病理性離婚協(xié)議樣本
- 2025年標(biāo)準(zhǔn)片石料采購(gòu)銷售合同
- 2025年企業(yè)經(jīng)營(yíng)周轉(zhuǎn)借款合同樣本
- 2025年全時(shí)勞動(dòng)合同范例
- 2025年住房公積金購(gòu)房交易操作指引協(xié)議
- 2025年專利發(fā)展戰(zhàn)略聯(lián)盟協(xié)議
- 2025年修理廠噴漆施工承包協(xié)議綜合
- 2025年太陽(yáng)能發(fā)電合同模板
- 2025年中外合作醫(yī)療機(jī)構(gòu)員工合同模板
- 2025年企業(yè)業(yè)務(wù)策劃合作標(biāo)準(zhǔn)協(xié)議
- 中國(guó)人口研究專題報(bào)告-中國(guó)2025-2100年人口預(yù)測(cè)與政策建議-西南財(cái)經(jīng)大學(xué)x清華大學(xué)-202501
- 建筑工程安全與管理
- 幼兒園開學(xué)教師安全知識(shí)培訓(xùn)
- 2024年山東水利職業(yè)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 遼寧省名校聯(lián)盟2025年高三1月份聯(lián)合考試 語(yǔ)文試卷(含答案詳解)
- 25版六年級(jí)寒假特色作業(yè)
- 浙江省杭州市9+1高中聯(lián)盟2025屆高三一診考試英語(yǔ)試卷含解析
- 2025教科版一年級(jí)科學(xué)下冊(cè)教學(xué)計(jì)劃
- 旅游行業(yè)智慧旅游營(yíng)銷策略與方案
- 《應(yīng)收培訓(xùn)》課件
- 2024年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論