




已閱讀5頁(yè),還剩82頁(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 章章 總體說(shuō)明總體說(shuō)明 在使用 EOS WorkFlow 的過(guò)程中,無(wú)論是開(kāi)發(fā)者在“開(kāi)發(fā)環(huán)境”中定義業(yè)務(wù) 流程,還是“工作流引擎”控制流程流轉(zhuǎn),或是工作流參與者使用的“客戶端” , 再或者管理員使用的“管理與監(jiān)控工具” ,在這期間都會(huì)貫穿 EOS Workflow 的 5 個(gè)主要對(duì)象流程定義、活動(dòng)定義、流程實(shí)例、活動(dòng)實(shí)例以及工作項(xiàng)。 1.1 EOS 工作流開(kāi)發(fā)過(guò)程簡(jiǎn)述工作流開(kāi)發(fā)過(guò)程簡(jiǎn)述 EOS 的工作流開(kāi)發(fā)過(guò)程可以看作是一個(gè)不斷迭代的過(guò)程,如下圖: 流程定義 流程發(fā)布 流程執(zhí)行 開(kāi)始 完善功能或需求變更 首先是分析需求,然后根據(jù)需求定義流程,在這個(gè)階段最主要的工作任務(wù) 其實(shí)是設(shè)計(jì),根據(jù)業(yè)務(wù)需求來(lái)設(shè)計(jì)流程,這個(gè)流程要怎么走,流程相關(guān)的數(shù)據(jù) 如何流動(dòng),流程的參與者如何界定,與流程相關(guān)的業(yè)務(wù)數(shù)據(jù)如何流動(dòng)及保存等 等。在這個(gè)階段的工作結(jié)果是一個(gè)可以發(fā)布的流程,第一次形成的流程可能是 一個(gè)比較簡(jiǎn)單的,并不完善的版本,但是隨著迭代的進(jìn)行,這個(gè)流程將不斷地 被修正和改進(jìn),直到形成一個(gè)能夠使用的版本。 接下來(lái)是流程的發(fā)布,流程發(fā)布的目的是讓工作流引擎能夠識(shí)別該流程。 在開(kāi)發(fā)環(huán)境(JBoss)下可以直接在 Studio 中發(fā)布流程,開(kāi)發(fā)階段一般用此方法, 在生產(chǎn)環(huán)境中一般是先打包,然后在 http:/localhost:端口/eosmgr 中發(fā)布。 流程發(fā)布后就可以執(zhí)行了,流程在執(zhí)行階段叫流程實(shí)例,它有待啟動(dòng)、運(yùn) 行、掛起、完成、結(jié)束、中止等六種狀態(tài)。 我們?cè)谠O(shè)計(jì)及開(kāi)發(fā)的過(guò)程中可能會(huì)犯一些錯(cuò)誤,從而導(dǎo)致發(fā)布的流程執(zhí)行 不正確,或者還可能已經(jīng)開(kāi)發(fā)好的流程滿足不了現(xiàn)在的需求,需要進(jìn)行調(diào)整, 這個(gè)時(shí)候迭代就開(kāi)始了。 1.2 概念說(shuō)明概念說(shuō)明 流程定義流程定義:描述一個(gè)完整的業(yè)務(wù)過(guò)程,它由若干活動(dòng)組成。包括了流程的 基本信息、流程的開(kāi)始和結(jié)束條件、組成的活動(dòng)、活動(dòng)間流轉(zhuǎn)的規(guī)則、需要用 戶執(zhí)行的工作任務(wù)(工作項(xiàng))、可能調(diào)用的應(yīng)用程序以及流程相關(guān)數(shù)據(jù)等信息。 提交到流程定義庫(kù)(WFProcessDefine)后會(huì)包含流程定義 ID(流程定義的唯 一標(biāo)識(shí))、流程定義名稱(chēng)、版本號(hào)、流程定義描述以及提交時(shí)間等描述。 活動(dòng)定義活動(dòng)定義:包含在流程定義之中,代表了一個(gè)相對(duì)獨(dú)立的、邏輯的工作單 元。一個(gè)活動(dòng)代表一個(gè)需要由相關(guān)資源處理,或者由計(jì)算機(jī)處理的任務(wù)。其中 定義了該活動(dòng)的基本信息、執(zhí)行該活動(dòng)的參與者、時(shí)間限制、工作項(xiàng)信息、觸 發(fā)事件、啟動(dòng)策略等信息。 流程實(shí)例流程實(shí)例:當(dāng)流程定義提交、發(fā)布到服務(wù)器以后,就可以啟動(dòng)該流程,啟 動(dòng)時(shí)會(huì)創(chuàng)建流程定義的一個(gè)實(shí)例,叫流程實(shí)例。同一個(gè)流程定義可以有多個(gè)流 程實(shí)例。每一個(gè)流程實(shí)例會(huì)被保存在流程實(shí)例庫(kù)(WFProcessInst)中,包括流 程實(shí)例 ID(唯一標(biāo)識(shí))、流程實(shí)例名稱(chēng)、流程定義 ID、流程實(shí)例的狀態(tài)、該實(shí) 例的啟動(dòng)者、啟動(dòng)時(shí)間、相關(guān)數(shù)據(jù)等信息。 活動(dòng)實(shí)例活動(dòng)實(shí)例:流程實(shí)例中的每個(gè)活動(dòng)稱(chēng)為活動(dòng)實(shí)例。每一個(gè)活動(dòng)實(shí)例會(huì)被保 存在活動(dòng)實(shí)例庫(kù)(WFActivityInst)中,包括活動(dòng)實(shí)例 ID(唯一標(biāo)識(shí)) 、活動(dòng)實(shí)例 的狀態(tài)、所屬的活動(dòng)定義 ID 以及流程實(shí)例 ID、時(shí)間限制、是否超時(shí)、創(chuàng)建時(shí) 間等信息。 工作項(xiàng)工作項(xiàng):表示流程實(shí)例在流轉(zhuǎn)過(guò)程中為完成某個(gè)活動(dòng)實(shí)例所要參與者做的 工作。一個(gè)活動(dòng)實(shí)例可以對(duì)應(yīng)一個(gè)或多個(gè)工作項(xiàng)。每個(gè)工作項(xiàng)會(huì)被保存在工作 項(xiàng)庫(kù)(WFWorkItem)中,包括工作項(xiàng) ID(唯一標(biāo)識(shí)) 、參與者 ID、工作項(xiàng)的狀 態(tài)、所屬的活動(dòng)實(shí)例 ID,流程實(shí)例 ID 等信息。 對(duì)象間的主要關(guān)系對(duì)象間的主要關(guān)系 流程定義和活動(dòng)定義是在工作流開(kāi)發(fā)階段所確定;流程實(shí)例、活動(dòng)實(shí)例和 工作項(xiàng)則是在工作流運(yùn)行階段確定。 一個(gè)流程定義由多個(gè)活動(dòng)定義組成。 一個(gè)流程定義可以創(chuàng)建多個(gè)流程實(shí)例。 一個(gè)流程實(shí)例包含多個(gè)活動(dòng)實(shí)例,每個(gè)活動(dòng)實(shí)例可以包含一個(gè)或多個(gè)工作 項(xiàng) 在一些特定的情況下(比如,一個(gè)活動(dòng)要循環(huán)執(zhí)行多次) ,一個(gè)活動(dòng)定義會(huì) 存在多個(gè)活動(dòng)實(shí)例 具體如下圖所示: 其他概念其他概念 【工作流工作流】 工作流管理聯(lián)盟(WFMC)給出的“工作流”定義是: 全部或者部分,由計(jì)算機(jī)支持或自動(dòng)處理的業(yè)務(wù)過(guò)程; 干預(yù)過(guò)程、業(yè)務(wù)程序的自動(dòng)化處理,文檔、信息或者任務(wù)按照定義好的 規(guī)則在參與者間傳遞,來(lái)完成整個(gè)業(yè)務(wù)目標(biāo)或者對(duì)整個(gè)業(yè)務(wù)目標(biāo)的完成 做貢獻(xiàn)。同時(shí), “工作流”可能由手工組織。 【參與者參與者】 它主要描業(yè)務(wù)流程在實(shí)例化后的運(yùn)行過(guò)程中參與操作的人員、角色或組織。 【工作流相關(guān)數(shù)據(jù)工作流相關(guān)數(shù)據(jù)】 工作流引擎根據(jù)工作流相關(guān)數(shù)據(jù)和轉(zhuǎn)換條件進(jìn)行推進(jìn),工作流相關(guān)數(shù)據(jù)的屬性 包括數(shù)據(jù)名稱(chēng)、數(shù)據(jù)類(lèi)型和數(shù)據(jù)值等。它是工作流引擎執(zhí)行任務(wù)推進(jìn)的依據(jù)。 【轉(zhuǎn)移條件轉(zhuǎn)移條件】 主要負(fù)責(zé)為流程實(shí)例的推進(jìn)提供導(dǎo)航依據(jù),引擎根據(jù)轉(zhuǎn)移條件實(shí)現(xiàn)流程的流轉(zhuǎn)。 【聚合模式聚合模式】 指當(dāng)流程中的一個(gè)活動(dòng)存在多個(gè)前驅(qū)活動(dòng)時(shí),該活動(dòng)產(chǎn)生實(shí)例的規(guī)則將根據(jù)“聚 合模式”而定。聚合模式包括:全部聚合/單一聚合/多路聚合(AND/XOR/OR); “全部聚合”模式表示只有當(dāng)所有前驅(qū)活動(dòng)都運(yùn)行結(jié)束后才啟動(dòng)該活動(dòng)實(shí)例,如 果存在尚未運(yùn)行結(jié)束的前驅(qū)活動(dòng),則該活動(dòng)處于等待狀態(tài)。 “單一聚合”模式表示 只要任何一個(gè)前驅(qū)活動(dòng)運(yùn)行結(jié)束,則該活動(dòng)即進(jìn)入運(yùn)行狀態(tài)。 “多路聚合”模式表 示滿足條件的前驅(qū)活動(dòng)都完成,該活動(dòng)才可進(jìn)入運(yùn)行狀態(tài)。 【分支模式分支模式】 當(dāng)一個(gè)活動(dòng)的后繼活動(dòng)有多個(gè)時(shí),需要確定這些后繼活動(dòng)產(chǎn)生活動(dòng)實(shí)例的規(guī)則 (即分支模式) 。分支模式包括:全部分支/單一分支/多路分支(AND/XOR/OR); “全部分支”模式表示條件表達(dá)式計(jì)算結(jié)果為“True“的所有活動(dòng)都產(chǎn)生活動(dòng)實(shí)例; “單一分支”模式則表示從后繼活動(dòng)中任選一個(gè)條件表達(dá)式為“True”的活動(dòng)產(chǎn)生 實(shí)例。 “單一分支”模式下需要指定一個(gè)“缺省遷移”,當(dāng)所有條件都為“False”時(shí), 此缺省遷移對(duì)應(yīng)的活動(dòng)則會(huì)產(chǎn)生實(shí)例。 “多路分支”表示該活動(dòng)的完成會(huì)觸發(fā)所有 滿足條件的后繼活動(dòng)。 【工作流客戶端工作流客戶端】 工作流客戶端是提供給用戶完成工作流任務(wù)的瀏覽,查詢,執(zhí)行的界面,以及 工作流程啟動(dòng)的界面。EOS 工作流客戶端通過(guò) web 界面的方式提供給用戶。 按用戶和角色取得工作項(xiàng) 工作列表的自定義歸類(lèi) 工作項(xiàng)的簽收、拒收、執(zhí)行、提醒 競(jìng)爭(zhēng)工作項(xiàng)的處理 圖形化的啟動(dòng)過(guò)程 【工作流管理監(jiān)控工具工作流管理監(jiān)控工具】 工作流管理監(jiān)控工具是為用戶提供基于 Web 方式的工作流實(shí)例的管理和監(jiān)控功 能以及業(yè)務(wù)流程的管理。 支持圖形化工作流實(shí)例的管理 支持圖形化監(jiān)控過(guò)程實(shí)例的運(yùn)行情況 支持圖形化業(yè)務(wù)流程的管理 運(yùn)行期實(shí)時(shí)數(shù)據(jù)查詢 圖形化再現(xiàn)流程運(yùn)行過(guò)程 工作項(xiàng)的重分配 流程統(tǒng)計(jì)分析、工作項(xiàng)統(tǒng)計(jì)分析 1.3 相關(guān)配置說(shuō)明相關(guān)配置說(shuō)明 以下是一些有用的配置說(shuō)明,關(guān)于 EOS 工作流的具體配置說(shuō)明請(qǐng)參考附錄 配置文件 wfconfig.xml。 工作流數(shù)據(jù)連結(jié)的配置在哪里工作流數(shù)據(jù)連結(jié)的配置在哪里 在 config/eosconfig.xml 文件中的 module name=“workflowworkflow“ group name=“database“中,指定了工作流的包名稱(chēng)和 unitID。通過(guò)包名稱(chēng)及 unitID 就可以從 EOSEJBREGISTER 表中獲得數(shù)據(jù)庫(kù)連接的 DATASOURCE 和 IP 地址。 帶有工作流的 EOS 應(yīng)用一定要采用數(shù)據(jù)源的方式(配置了數(shù)據(jù)源與連接池,且 eosconfig.xml 文件中 single 值為 false)連接數(shù)據(jù)庫(kù),這樣才能保證工作流 和業(yè)務(wù)系統(tǒng)中事務(wù)的完整性。而且工作流調(diào)度引擎需要連接池來(lái)處理對(duì)數(shù)據(jù)庫(kù) 的并發(fā)控制,不能使用 JDBC 直接連接,否則在實(shí)際的使用中會(huì)出現(xiàn)并發(fā)控制錯(cuò) 誤。例如:使用 EOS5.0,在工作流客戶端的“我的任務(wù)待執(zhí)行的工作任務(wù)” 執(zhí)行一個(gè)待執(zhí)行的工作項(xiàng),該工作項(xiàng)的任務(wù)是調(diào)用一個(gè)人工活動(dòng)去查一張表。 如果在 studio 中啟動(dòng)項(xiàng)目 server,功能一切正常,如果啟動(dòng)外部 server,這 個(gè)功能有時(shí)候正常,有時(shí)候出錯(cuò),出錯(cuò)頁(yè)面的截圖和詳細(xì)的 log 見(jiàn)附件!(注: 出錯(cuò)是不確定的,有時(shí)候連續(xù)好幾次都報(bào)錯(cuò),有時(shí)候連續(xù)好幾次都對(duì)?。┰诰?寫(xiě)工作流的業(yè)務(wù)自動(dòng)機(jī)(業(yè)務(wù)邏輯)中,相關(guān)的工作流操作(如:完成工作流 節(jié)點(diǎn),回退,設(shè)置工作流的相關(guān)數(shù)據(jù)等操作)和外部的業(yè)務(wù)操作都要并在一個(gè) transaction(事務(wù))中。 工作流歷史表的相關(guān)說(shuō)明工作流歷史表的相關(guān)說(shuō)明 EOS 數(shù)據(jù)庫(kù)中存在以 WF_H 開(kāi)頭的幾張表,這是工作流歷史表,分別對(duì)應(yīng)了 流程實(shí)例、活動(dòng)項(xiàng)實(shí)例、工作項(xiàng)實(shí)例等等,業(yè)務(wù)上經(jīng)常需要通過(guò)這些歷史數(shù)據(jù) 進(jìn)行統(tǒng)計(jì)分析,至于什么時(shí)候進(jìn)行記錄備份,幫助文檔中沒(méi)有提到。 其實(shí),在 EOS 系統(tǒng)配置文件 wfconfig.xml 中,定義了歷史記錄備份的策略,如 下: TIME_BASED 0:30,5:00 第第 2 章章 建模過(guò)程建模過(guò)程 EOS Studio 提供了可視化的開(kāi)發(fā)環(huán)境來(lái)定義工作流業(yè)務(wù)流程模型,提供串 行、分支、并行、聚合、循環(huán)、同步、子流程等豐富的流程邏輯結(jié)構(gòu),以及人 工活動(dòng)、自動(dòng)活動(dòng)、路由活動(dòng)等多種活動(dòng)類(lèi)型,并可對(duì)這些活動(dòng)屬性進(jìn)行定義, 如參與者類(lèi)型、觸發(fā)事件、子流程屬性、時(shí)間限制、回退動(dòng)作、多工作項(xiàng)等, 定義屬性時(shí)可選擇不同的數(shù)據(jù)類(lèi)型、可靈活的擴(kuò)展活動(dòng);可以通過(guò)表單數(shù)據(jù)為 活動(dòng)節(jié)點(diǎn)設(shè)置動(dòng)態(tài)表單,其表單數(shù)據(jù)實(shí)現(xiàn)了動(dòng)態(tài)表單的編輯,為日常工作中表 單的定制提供了良好的設(shè)計(jì)工具。 2.1 流程定義流程定義 流程定義由流程屬性、活動(dòng)屬性、連接線三部分構(gòu)成。開(kāi)發(fā)者可以根據(jù)實(shí) 際中的業(yè)務(wù)需要設(shè)置流程上的基本屬性、觸發(fā)事件、時(shí)間限制以及流程啟動(dòng)者。 對(duì)每一個(gè)具體的活動(dòng)則可根據(jù)實(shí)際情況設(shè)定其運(yùn)行的方式、參與者以及調(diào)用的 應(yīng)用等信息。完成流程定義的描述后即可提交、發(fā)布。提交后的流程將生成 XML 格式的流程定義文件,存入流程定義庫(kù)中 2.1.1 流程版本流程版本 版本號(hào)的產(chǎn)生方式如下: 1、開(kāi)發(fā)人員指定 版本號(hào)的格式為: X.Y.ZX.Y.Z (其中 X0;Y:0-99;Z:0-99) ,若指定的版本在流 程定義庫(kù)中不存在,則按指定的版本號(hào)生成新版本 。若指定的版本在流程定義 庫(kù)中存在,則覆蓋流程定義庫(kù)中已有的版本 。例如,某流程在流程定義庫(kù)中存 在 1.1.1 和 1.2.3 兩個(gè)版本。若要提交第三個(gè)版本,開(kāi)發(fā)人員指定新版本號(hào) 1.1.2,那么該流程提交流程定義庫(kù)的版本號(hào)即為 1.1.2;若指定版本號(hào)為 1.1.1, 則該流程在提交流程定義庫(kù)時(shí)會(huì)覆蓋原有 1.1.1 版本的流程 2、自動(dòng)生成新版本 獲取流程定義庫(kù)中同一流程的最大版本,并在此基礎(chǔ)上“加 1“作為當(dāng)前流程 的版本號(hào)。 2.1.2 觸發(fā)事件觸發(fā)事件 觸發(fā)事件說(shuō)明觸發(fā)事件說(shuō)明 流程觸發(fā)事件表示按照流程定義中的設(shè)置流程實(shí)例在運(yùn)行到某個(gè)階段所需 要工作流引擎做某種類(lèi)型的某個(gè)動(dòng)作?!澳硞€(gè)階段”即為事件的觸發(fā)時(shí)機(jī), “某種類(lèi)型”即為事件類(lèi)型,“某個(gè)動(dòng)作”即為事件的動(dòng)作。 觸發(fā)時(shí)機(jī)觸發(fā)時(shí)機(jī):表示指定的事件動(dòng)作在何時(shí)觸發(fā)。EOS WorkFlow 提供了創(chuàng)建、 動(dòng)、結(jié)束、超時(shí)和提醒 5 個(gè)觸發(fā)時(shí)機(jī)。 創(chuàng)建創(chuàng)建:表示指定的事件在流程實(shí)例創(chuàng)建時(shí)觸發(fā)。此時(shí)流程實(shí)例實(shí)際上處于 “待啟動(dòng)”的狀態(tài),并沒(méi)有合適的活動(dòng)實(shí)例產(chǎn)生。簡(jiǎn)言之,流程實(shí)例此時(shí)只是 做好運(yùn)行的準(zhǔn)備,但未真正開(kāi)始運(yùn)行。例如:把田徑比賽中的 110 米欄比作流 程實(shí)例,那么創(chuàng)建時(shí)的流程實(shí)例就相當(dāng)于已站在助跑器前的運(yùn)動(dòng)員們等待發(fā)令 槍響的那一刻。 啟動(dòng)啟動(dòng):表示指定的事件在流程實(shí)例啟動(dòng)時(shí)觸發(fā)。此時(shí),流程實(shí)例已真正處 于運(yùn)行狀態(tài)了,流程實(shí)例已開(kāi)始運(yùn)行,各活動(dòng)實(shí)例將會(huì)相繼產(chǎn)生。例如:流程 實(shí)例此時(shí)的狀態(tài)若比作 110 米欄,就相當(dāng)于運(yùn)動(dòng)員們聽(tīng)到發(fā)令槍響沖離起跑線 的那一刻。 結(jié)束結(jié)束:表示指定的事件在流程實(shí)例結(jié)束時(shí)觸發(fā)。即流程實(shí)例中所有的活動(dòng) 實(shí)例均已完成時(shí)觸發(fā)。 超時(shí)超時(shí):表示指定的事件在流程實(shí)例超時(shí)時(shí)觸發(fā)。例如:若流程的超時(shí)時(shí)間 訂為 1 天,那么定義的事件將在流程實(shí)例啟動(dòng)時(shí)開(kāi)始計(jì)時(shí),并在 1 天之后觸發(fā) 此事件。 提醒提醒:表示指定的事件在流程實(shí)例指定的提醒時(shí)間觸發(fā)。例如:若流程的 提醒時(shí)間訂為 1 小時(shí),那么定義的事件將在流程實(shí)例啟動(dòng)時(shí)開(kāi)始計(jì)時(shí),并在超 時(shí)前 1 小時(shí)觸發(fā)此事件。 事件類(lèi)型事件類(lèi)型:標(biāo)明事件動(dòng)作的類(lèi)型。EOS WorkFlow 提供基于 EOS 平臺(tái)的業(yè)務(wù) 邏輯和運(yùn)算邏輯兩種類(lèi)型。 事件動(dòng)作事件動(dòng)作:由開(kāi)發(fā)人員根據(jù)具體的業(yè)務(wù)需求自行定義??梢允且粋€(gè)運(yùn)算邏輯也可以是 一個(gè)業(yè)務(wù)邏輯。 觸發(fā)事件設(shè)置方法觸發(fā)事件設(shè)置方法 【場(chǎng)景】 在流程“啟動(dòng)的同時(shí),獲取指定節(jié)點(diǎn)信息并放入該流程實(shí)例相關(guān)數(shù)據(jù)的指定 節(jié)點(diǎn)下。如獲取流程信息中創(chuàng)建者節(jié)點(diǎn)(WFContext/WFProcessInst/creator),放 入相關(guān)數(shù)據(jù)區(qū) Node/creator 下。 【分析】 通過(guò)【場(chǎng)景】的描述,我們可以采用流程觸發(fā)事件的方式實(shí)現(xiàn)該需求。分 析為: 1、 “在流程啟動(dòng)的同時(shí)”,表示觸發(fā)的時(shí)機(jī)為啟動(dòng)啟動(dòng),調(diào)用方式為同步同步。 這里需要特別注意的是,調(diào)用方式同步和異步的區(qū)別。同步是指:以“同步”的 方式調(diào)用觸發(fā)事件,等待事件運(yùn)行完成后,該流程才啟動(dòng) 。 同步是指:以“異 步”的方式調(diào)用觸發(fā)事件,該流程在啟動(dòng)完觸發(fā)事件后就啟動(dòng),而無(wú)需等待觸發(fā) 事件運(yùn)行完成。 2、 “獲取指定節(jié)點(diǎn)信息”為事件動(dòng)作,事件動(dòng)作,可以用業(yè)務(wù)邏輯業(yè)務(wù)邏輯來(lái)實(shí)現(xiàn)。觸發(fā)事件中 產(chǎn)生的數(shù)據(jù)還可以在業(yè)務(wù)邏輯中輸出,這樣就可以將這些數(shù)據(jù)直接設(shè)置為相關(guān) 數(shù)據(jù)了。 3、要將步驟 2 中獲取的信息放入該流程實(shí)例相關(guān)數(shù)據(jù)的指定節(jié)點(diǎn)下,具體 可在事件參數(shù)事件參數(shù)中設(shè)置。 輸入?yún)?shù)設(shè)置為 WFContext,在各類(lèi)觸發(fā)事件以及回退事件中,WFContext 屬于流程實(shí)例的相關(guān)數(shù)據(jù)區(qū)部分,這塊數(shù)據(jù)區(qū)有固定的數(shù)據(jù)結(jié)構(gòu),具體請(qǐng)見(jiàn): 3.2.2 流程實(shí)例數(shù)據(jù)區(qū)。觸發(fā)事件的數(shù)據(jù)來(lái)源于相關(guān)數(shù)據(jù)區(qū),WFContext 是相關(guān) 數(shù)據(jù)區(qū)中固有的一塊區(qū)域信息,這些信息都放在 Wfcontext 節(jié)點(diǎn)下。其中, WFContext 數(shù)據(jù)區(qū)內(nèi)容是流程實(shí)例自身的信息,相關(guān)數(shù)據(jù)區(qū)的內(nèi)容還有流程中 產(chǎn)生的過(guò)程數(shù)據(jù),即業(yè)務(wù)數(shù)據(jù)。 輸出參數(shù)設(shè)置為 creator,目標(biāo)路徑為 Node/userID。在觸發(fā)事件所執(zhí)行的 業(yè)務(wù)邏輯中會(huì)產(chǎn)生一個(gè) crator 的節(jié)點(diǎn),把這個(gè)節(jié)點(diǎn)放入到相關(guān)數(shù)據(jù)區(qū) Node/userID 下。目標(biāo)路徑:表示將返回結(jié)果存入到流程實(shí)例相關(guān)數(shù)據(jù)中的什 么位置。如該例中是將調(diào)用業(yè)務(wù)邏輯的返回結(jié)果輸出到該流程相關(guān)數(shù)據(jù)的 Node/userID 節(jié)點(diǎn)下。注意,目標(biāo)路徑目標(biāo)路徑僅對(duì)事件類(lèi)型為業(yè)務(wù)邏輯業(yè)務(wù)邏輯的事件動(dòng)作有 效。 圖-設(shè)置觸發(fā)事件的參數(shù) 注意:注意: 如果調(diào)用的事件類(lèi)型為業(yè)務(wù)邏輯,業(yè)務(wù)邏輯,而參數(shù)的數(shù)據(jù)類(lèi)型為字符串常量字符串常量或字符字符 串變量,串變量,那么路徑路徑中填入的格式必須為:nodeName=“value“nodeName=“value“或 nodeName=valuenodeName=value (因?yàn)闃I(yè)務(wù)邏輯不支持直接傳入常量或變量) 例如:要傳入常量 tiger 到所調(diào)用的業(yè)務(wù)邏輯中,就必須做如下設(shè)置 2.1.3 超時(shí)設(shè)置超時(shí)設(shè)置 如果想擴(kuò)展和替換 EOS 工作流的超時(shí)和預(yù)警機(jī)制,可以根據(jù)工作流配置文件 wfconfig.xml 中的工作流引擎服務(wù)層相關(guān)配置 10000 參數(shù) timelimit_calculator 流程和活動(dòng)時(shí)間限制的計(jì)算方法類(lèi)名稱(chēng),該類(lèi)必須實(shí) 現(xiàn)接口 com.primeton.eos.wf.service.api.TimeLimitCalculator。 配置為空或者不做配置,表示使用確省實(shí)現(xiàn)類(lèi): com.primeton.eos.wf.service.TimeLimitCalculatorDefault。 時(shí)間限制說(shuō)明時(shí)間限制說(shuō)明 流程的時(shí)間限制表示流程啟動(dòng)后必須在多長(zhǎng)時(shí)間內(nèi)完成。在流程時(shí)間限制 的設(shè)置中 EOS WorkFlow 為開(kāi)發(fā)人員提供了指定具體的限制時(shí)間、超時(shí)是否進(jìn)行 郵件通知、是否在超時(shí)前進(jìn)行提醒、是否發(fā)提醒通知等功能。 流程時(shí)間限制的計(jì)時(shí):從流程啟動(dòng)時(shí)開(kāi)始計(jì)時(shí) 流程時(shí)間限制的獲?。褐苯又付ā南嚓P(guān)數(shù)據(jù)獲取(格式:3.5.20 表示時(shí) 限為 3 天 5 小時(shí) 20 分鐘) 發(fā)送提醒郵件:EOS WorkFlow 可根據(jù)流程定義中的具體設(shè)置給流程啟動(dòng)者 發(fā)提醒郵件,提醒他該流程還有多長(zhǎng)時(shí)間將超時(shí) 發(fā)送超時(shí)郵件:EOS WorkFlow 可根據(jù)流程定義中的具體設(shè)置給流程啟動(dòng)者 發(fā)送超時(shí)郵件,告之他該流程已經(jīng)超時(shí) 提醒時(shí)間必須小于指定的時(shí)間限制 EOSEOS WORKFLOWWORKFLOW 判斷流程或人工活動(dòng)超時(shí)的原理判斷流程或人工活動(dòng)超時(shí)的原理 流程或人工活動(dòng)的時(shí)間限制中設(shè)置的限制時(shí)間將寫(xiě)入表 WFProcessInst 或 WFWorkItem 的 limitNum 字段中,單位為毫秒,limitNumDesc 是其描述字段; finalTime 是時(shí)間限制到達(dá)后的時(shí)間。EOS WorkFlow 將當(dāng)前時(shí)間與 startTime 相減的結(jié)果與 limitNum 比較,一旦超出時(shí)間限制就將 isTimeOut 字段置為 Y, 表示超時(shí);timeOutNum 表示超時(shí)了多長(zhǎng)時(shí)間,在流程結(jié)束時(shí)寫(xiě)入。如果設(shè)置了 超時(shí)提醒,該字段可能出現(xiàn)負(fù)數(shù),是未超時(shí)的表現(xiàn),只有正數(shù)才表示超時(shí)的時(shí) 間,timeOutNumDesc 是其描述字段。 時(shí)間設(shè)置說(shuō)明時(shí)間設(shè)置說(shuō)明 【描述】 設(shè)置流程時(shí)間限制包括指定時(shí)間限制的值、提醒時(shí)間的值、決定是否發(fā)送超時(shí) 郵件或提醒郵件 【應(yīng)用場(chǎng)景】 規(guī)定流程 A 必須在 1 天內(nèi)完成,超時(shí)進(jìn)行通知;并在超時(shí)前 10 小時(shí)發(fā)提醒通 知 【操作步驟】 1、雙擊流程 A 的編輯區(qū),彈出屬性設(shè)置屬性設(shè)置窗口,點(diǎn)擊時(shí)間限制時(shí)間限制選項(xiàng)卡 2、勾選啟用時(shí)間限制啟用時(shí)間限制 3、指定時(shí)間限制為:1 天 0 小時(shí) 0 分鐘 4、勾選是否按設(shè)置的時(shí)間限制進(jìn)行超時(shí)通知。是否按設(shè)置的時(shí)間限制進(jìn)行超時(shí)通知。此處將會(huì)根據(jù) wfconfig.xml 相關(guān) 配置給流程啟動(dòng)者發(fā)送郵件。 5、指定提前 0 天 10 小時(shí) 0 分鐘提醒 6、勾選是否按設(shè)置的提醒時(shí)間進(jìn)行超時(shí)預(yù)警。是否按設(shè)置的提醒時(shí)間進(jìn)行超時(shí)預(yù)警。此處將會(huì)根據(jù) wfconfig.xml 相關(guān)配置 給流程啟動(dòng)者發(fā)送郵件。 圖-設(shè)置流程時(shí)間限制 1 說(shuō)明: 1、無(wú)論是超時(shí)通知的郵件還是提醒的郵件,收件人都是流程啟動(dòng)者 2、這些郵件的發(fā)件人,可根據(jù)具體情況在配置文件 設(shè)置$Primeton HOMEeosserverconfig 目錄下的 wfconfig.xml 設(shè)置,相關(guān)部分如下所示: zll zll 25 zll true 參數(shù)說(shuō)明: Field 名稱(chēng) 可否空說(shuō)明 mailServer 是郵件服務(wù)器 SMTP 地址 mailPort是SMTP 端口,一般設(shè)置為 25 authLogin 是SMTP 服務(wù)器是否需要進(jìn)行用戶驗(yàn)證,設(shè)置 true 則 需要進(jìn)行用戶認(rèn)證,設(shè)置 false 則不需要進(jìn)行認(rèn)證 username是SMTP 服務(wù)器的用戶名 password是SMTP 的用戶口令 特別說(shuō)明特別說(shuō)明:EOS 工作流超時(shí)提醒只提醒一次。流程實(shí)例一旦超時(shí),就會(huì)觸發(fā) 相應(yīng)的操作將流程實(shí)例中的 WFProcessInst/isTimeOut 節(jié)點(diǎn)設(shè)置為 Y。如果想 實(shí)現(xiàn)重復(fù)提醒功能,通常的做法是為流程設(shè)置超時(shí)的觸發(fā)事件。在超時(shí)觸發(fā)事 件中注冊(cè)一個(gè)定時(shí)器,定時(shí)掃描該流程實(shí)例是否完成,如果沒(méi)有完成就執(zhí)行發(fā) 放郵件或者短信都通知的操作。 2.1.4 流程啟動(dòng)者流程啟動(dòng)者 流程啟動(dòng)者表示可以啟動(dòng)某個(gè)流程的組織、角色或人。EOS WorkFlow 提 供兩種流程啟動(dòng)策略:任意人員啟動(dòng)和從組織機(jī)構(gòu)樹(shù)獲取。這樣做的目的主要是 從實(shí)際工作中的安全性考慮,視流程的具體情況限定可以啟動(dòng)該流程的人員范圍。 圖-流程啟動(dòng)者 當(dāng)流程實(shí)例運(yùn)行的時(shí)候,可以在相關(guān)數(shù)據(jù)區(qū)的如下節(jié)點(diǎn) xpath 找到流程啟動(dòng)者: tiger 2.1.5 流程定義特別說(shuō)明流程定義特別說(shuō)明 工作流的自動(dòng)活動(dòng)或觸發(fā)事件調(diào)用帶事務(wù)的業(yè)務(wù)邏輯的注意事項(xiàng)工作流的自動(dòng)活動(dòng)或觸發(fā)事件調(diào)用帶事務(wù)的業(yè)務(wù)邏輯的注意事項(xiàng) 因?yàn)楣ぷ髁鞯氖聞?wù)控制和業(yè)務(wù)邏輯的事務(wù)控制是分開(kāi)的,所以,當(dāng)工作流 的自動(dòng)活動(dòng)或觸發(fā)事件調(diào)用了帶事務(wù)控制的業(yè)務(wù)邏輯時(shí),工作流引擎默認(rèn)忽略 業(yè)務(wù)邏輯中的事務(wù),這樣就存在一個(gè)問(wèn)題: 業(yè)務(wù)邏輯中出現(xiàn)了異常,并通過(guò)異常線回滾,這時(shí),業(yè)務(wù)數(shù)據(jù)提交不成功, 但是,工作流引擎并沒(méi)有接收到異常,它會(huì)繼續(xù)往后走,最終就出現(xiàn)工作流事 務(wù)和業(yè)務(wù)事務(wù)不一致的現(xiàn)象。 【解決方案和步驟】 建議業(yè)務(wù)邏輯中不要用異常線回退到回滾,讓異常直接拋出,這樣工作流 引擎會(huì)接收到異常,進(jìn)而做回滾! 【備注】 1)異常線不能隨便使用,如果一定要用,最好設(shè)置返回值返回,最后轉(zhuǎn)向 出錯(cuò)頁(yè)面; 2)使用異常線前還要注意 BL 方法是否會(huì)拋異常,因?yàn)椴皇撬械?BL 方法 都會(huì)拋異常。 2.2 活動(dòng)定義活動(dòng)定義 EOS WorkFlow 提供了六種類(lèi)型的活動(dòng)。開(kāi)始活動(dòng)、結(jié)束活動(dòng)、人工活動(dòng)、 自動(dòng)活動(dòng)、子流程活動(dòng)以及路由活動(dòng)。 活動(dòng)圖元介紹 圖元名稱(chēng)含義 開(kāi)始活動(dòng) 表示一個(gè)業(yè)務(wù)流程的開(kāi)始。在流程開(kāi)始活動(dòng)可以定義流程的 啟動(dòng)表單以及業(yè)務(wù)流程的觸發(fā)事件。 人工活動(dòng)指需要人工干預(yù)、進(jìn)行某種操作的活動(dòng)。比如填寫(xiě)表單等。 自動(dòng)活動(dòng) 指無(wú)需人工干預(yù),系統(tǒng)自動(dòng)執(zhí)行的活動(dòng)。比如獲取系統(tǒng)時(shí)間、 往數(shù)據(jù)庫(kù)中插入記錄等。 子流程 一種特殊的活動(dòng),此活動(dòng)本身是指向某一個(gè)流程,表示當(dāng)流 程實(shí)例運(yùn)行至此時(shí),啟動(dòng)另外一個(gè)流程。子流程的啟動(dòng)分為 同步和異步兩種方式。 路由活動(dòng) 是一種邏輯活動(dòng),根據(jù)控制條件判斷流程的流向。該活動(dòng)本 身并不執(zhí)行任何具體的操作。 結(jié)束活動(dòng)表示一個(gè)業(yè)務(wù)流程的結(jié)束。 2.2.1 設(shè)置活動(dòng)基本信息設(shè)置活動(dòng)基本信息 活動(dòng)包括:人工活動(dòng)、自動(dòng)活動(dòng)、子流程。 1)自動(dòng)活動(dòng)的基本信息設(shè)置如下: 自動(dòng)返回結(jié)果: “是是”:表示執(zhí)行動(dòng)作的返回結(jié)果全部自動(dòng)放入相關(guān)數(shù)據(jù)相關(guān)數(shù)據(jù)的根路徑下。 “否否”:表示執(zhí)行動(dòng)作的返回結(jié)果將不會(huì)自動(dòng)放入相關(guān)數(shù)據(jù)中去。此時(shí), 如要將返回結(jié)果中的某項(xiàng)返回到相關(guān)數(shù)據(jù)中,可在參數(shù)參數(shù)選項(xiàng)卡中設(shè)置。 該項(xiàng)設(shè)置僅對(duì)調(diào)用類(lèi)型是業(yè)務(wù)邏輯業(yè)務(wù)邏輯有效 調(diào)用方式: “同步同步”: 直到調(diào)用的執(zhí)行動(dòng)作運(yùn)行完后當(dāng)前自動(dòng)活動(dòng)才結(jié)束 “異步異步”:當(dāng)前自動(dòng)活動(dòng)在調(diào)用執(zhí)行動(dòng)作后就結(jié)束,而無(wú)需等待執(zhí)行動(dòng) 作運(yùn)行完 結(jié)束方式: “自動(dòng)自動(dòng)”:調(diào)用完執(zhí)行動(dòng)作后,工作流引擎自動(dòng)將當(dāng)前自動(dòng)活動(dòng)結(jié)束 “人工人工:”調(diào)用完執(zhí)行動(dòng)作后,引擎不將當(dāng)前自動(dòng)活動(dòng)結(jié)束,而是等待 外部調(diào)用結(jié)束該活動(dòng) 2)子流程的基本信息設(shè)置如下: 調(diào)用方式: “同步同步”:以“同步”的方式調(diào)用子流程,等待子流程運(yùn)行完成后,該 子流程活動(dòng)才結(jié)束 “異步異步”:以“異步”的方式調(diào)用子流程,當(dāng)前活動(dòng)在啟動(dòng)完子流程后 就結(jié)束,而無(wú)需等待子流程運(yùn)行完成 子流程:?jiǎn)螕簟具x擇】按鈕,從彈出窗口的資源樹(shù)中選擇子流程或直 接輸入子流程,填寫(xiě)規(guī)則為:構(gòu)件包名. .工作流構(gòu)件名. .業(yè)務(wù)流程名。如果調(diào) 用的子流程需要輸入或輸出一些參數(shù)請(qǐng)?jiān)趨?shù)參數(shù)選項(xiàng)卡中設(shè)置 2.2.2 聚合模式、分支模式聚合模式、分支模式 活動(dòng)的“分支”與“聚合”模式在流程定義時(shí)設(shè)置,分別描述了活動(dòng)在運(yùn) 行時(shí)何時(shí)被觸發(fā)以及或個(gè)運(yùn)行結(jié)束后,它的后繼活動(dòng)如何被觸發(fā)。 聚合模式聚合模式 聚合模式,表示該活動(dòng)得以觸發(fā)的方式。它包括“全部聚合(AND) ” 、 “單一聚 合(XOR) ”以及“多路聚合(OR) ”三種情況: 1.1.“全部聚合全部聚合”型聚合模式型聚合模式 表示該活動(dòng)必須等到它的所有前驅(qū)活動(dòng)全部完成才可以觸發(fā)。 2.2.“單一聚合單一聚合”型聚合模式型聚合模式 表示當(dāng)該活動(dòng)的若干前驅(qū)活動(dòng)中只要有一個(gè)滿足條件的活動(dòng)完成,該活動(dòng) 即可被觸發(fā)。 3.3. “多路聚合多路聚合”型聚合模式型聚合模式 表示該活動(dòng)必須等到它的所有滿足條件的前驅(qū)活動(dòng)全部完成才可以觸發(fā)。 滿足條件的前驅(qū)活動(dòng)包括: 1)它與該活動(dòng)的連線是“默認(rèn)值“; 2)它與該活動(dòng)連線上條件為“true” ; 3)多路聚合還需要特別說(shuō)明的是:多路聚合不一定要設(shè)置默認(rèn)連線,也就 是說(shuō)一個(gè)多路聚合的全部連線都可以設(shè)置條件。 【示例示例】 1.“全部聚合全部聚合”型聚合模式示例型聚合模式示例 圖-“全部聚合”型聚合模式 如上圖所示, “人工活動(dòng) 3”的“聚合模式(JoinMode) ”設(shè)置為“全 部聚合” ,那么只有在它的前驅(qū)“人工活動(dòng)” 、 “人工活動(dòng) 1” , “人工活動(dòng) 2”都完成后, “人工活動(dòng) 3”才可以運(yùn)行。 2.“單一聚合單一聚合”型聚合模式示例型聚合模式示例 圖-“單一聚合”型聚合模式 如上所示,由于“人工活動(dòng) 3”的“聚合模式(JoinMode) ”設(shè)置為“單一 聚合” ,那么根據(jù)上面的算法說(shuō)明,當(dāng)“人工活動(dòng)”完成后, “人工活動(dòng) 3” 就可以運(yùn)行了。而無(wú)需考慮“人工活動(dòng) 1”或“人工活動(dòng) 2”是否完成。 3.3.“多路聚合多路聚合”型聚合模式示例型聚合模式示例 1)由前驅(qū)活動(dòng)射出的連線上中有默認(rèn)值 圖-“多路聚合”型聚合模式 如上圖所示,由于“人工活動(dòng) 3”的“聚合模式(JoinMode) ”是“多路聚 合”并且在處理的過(guò)程中“num=6” ,那么根據(jù)上面的算法說(shuō)明由于“人工活動(dòng)” 與“人工活動(dòng) 3”以及“人工活動(dòng) 1”與“人工活動(dòng) 3”的連線上的條件都滿足, 因此“人工活動(dòng) 3”在“人工活動(dòng)”和“人工活動(dòng) 1”完成后被觸發(fā)。 2)由前驅(qū)活動(dòng)射出的連線上都設(shè)置條件 圖-“多路聚合”型聚合模式 如上圖所示,由于“活動(dòng) E”的“聚合模式(JoinMode) ”是“多路聚合” 并且在處理的過(guò)程中“num=6” ,那么根據(jù)上面的算法說(shuō)明由于“活動(dòng) B 與“活 動(dòng) D”的射出的連線上的條件都滿足,因此“活動(dòng) B 與“活動(dòng) D”都完成后,活 動(dòng) E 才被觸發(fā)。 分支模式分支模式 分支模式,表示該活動(dòng)結(jié)束后,它的后繼活動(dòng)的觸發(fā)情況。它包括“全部 分支(AND) ” 、 “單一分支(XOR) ”以及“多路分支(OR)”三種情況: 1.1.“全部分支全部分支”型分支模式型分支模式 表示該活動(dòng)結(jié)束后它的所有后繼活動(dòng)將同時(shí)被觸發(fā)。 2.2.“單一分支單一分支”型分支模式型分支模式 如果該活動(dòng)的分支模式為“單一分支” ,那么引擎會(huì)根據(jù)由該活動(dòng)“射出” 的連接線上的條件進(jìn)行判斷,決定該觸發(fā)哪個(gè)后繼活動(dòng)。具體分為下面三 種情況: 1)滿足條件的連接線所指的活動(dòng)被觸發(fā); 2)如果有若干個(gè)連接線上的條件都滿足,那么比較連接線上的優(yōu)先級(jí), 優(yōu)先級(jí)高的那條連接線所指的活動(dòng)將被觸發(fā); 3)如果連接線上的條件都不滿足,那么取“默認(rèn)值”的那條連接線所 指的活動(dòng)將被觸發(fā)。 注注活動(dòng)的“分支模式”為“單一分支”時(shí),由它射出的連接線有且只有 一條線的取值是“默認(rèn)值” 。 3 3 “多路分支多路分支”型分支模式型分支模式 如果該活動(dòng)的分支模式為“多路分支” ,那么引擎會(huì)根據(jù)由該活動(dòng)“射出” 的連接線上的條件進(jìn)行判斷,決定觸發(fā)哪個(gè)或哪些后繼活動(dòng)。具體分為下 面二種情況: 1)如果連接線上取“默認(rèn)值” ,那么由此連接線所指的后繼活動(dòng)會(huì)被觸發(fā); 2)如果連接線上的條件滿足,那么由此連接線所指的后繼活動(dòng)會(huì)被觸發(fā)。 3)多路分支還需要特別說(shuō)明的是:多路分支不一定要設(shè)置默認(rèn)連線,也就 是說(shuō)一個(gè)多路分支的全部連線都可以設(shè)置條件。 【示例示例】 1.“全部分支全部分支”型分支模式示例型分支模式示例 圖-“全部分支”型分支模式 如上圖所示,由于 A 活動(dòng)的分支模式是“全部分支” ,那么當(dāng) A 活動(dòng)完 成后它后繼的所有活動(dòng)(B、C、D)將同時(shí)被觸發(fā)。 2.2.“單一分支單一分支”型分支模式示例型分支模式示例 1)由該活動(dòng)射出的連線上只有一個(gè)滿足條件時(shí) 圖-“單一分支”型分支模式 1 如圖所示,由于“A” 活動(dòng)的分支模式是“單一分支”并且在處理 的過(guò)程中“num=6” ,所以由“A”射出的連接線上只有“num 5”滿 足條件,因此“B”活動(dòng)滿足條件被觸發(fā)。 2)由該活動(dòng)射出的連線上有若干個(gè)滿足條件時(shí) 圖-“單一分支”型分支模式 2 如上圖所示,由于“A” 活動(dòng)的分支模式是“單一分支”并且在 處理的過(guò)程中“num=1” ,盡管由 A 指向 B 和 C 的兩條分支都滿足條件, 但指向 B 的優(yōu)先級(jí)大于指向 C 的優(yōu)先級(jí),因此“B”活動(dòng)被觸發(fā)。 3)由該活動(dòng)射出的連線上沒(méi)有一個(gè)滿足條件時(shí) 圖-“單一分支”型分支模式 3 如上圖所示,由于“A” 活動(dòng)的分支模式是“單一分支”并且在處理 的過(guò)程中“num=2” ,那么由“A”射出的連接線上沒(méi)有滿足條件的, 因此“D”活動(dòng)被缺省觸發(fā)。 3.“多路分支多路分支”型分支模式示例型分支模式示例 1)由活動(dòng)射出的連線上中有默認(rèn)值 圖-“多路分支”型分支模式 如上圖所示,由于“開(kāi)始活動(dòng)”的分支模式是“多路分支”并且在處理 的過(guò)程中“num=6” ,那么根據(jù)上面的算法說(shuō)明,由“開(kāi)始活動(dòng)”射出的 連接線上為“默認(rèn)值“所指的后繼活動(dòng)“人工活動(dòng)”一定會(huì)被觸發(fā);又由 于滿足“num5”的條件所以“人工活動(dòng) 1”也會(huì)被觸發(fā) 2)由活動(dòng)射出的連線上中沒(méi)有默認(rèn)值,全部設(shè)置條件 如上圖所示,由于“開(kāi)始活動(dòng)”的“分支模式”是“多路分支”并且在處 理的過(guò)程中“num=6” ,那么根據(jù)上面的算法說(shuō)明由于射向“活動(dòng) B 與“活動(dòng) D”的連線上的條件都滿足,因此“活動(dòng) B 與“活動(dòng) D”在開(kāi)始活動(dòng)結(jié)束后被觸 發(fā)。 2.2.3 參與者設(shè)置參與者設(shè)置 活動(dòng)參與者實(shí)際上是指在流程實(shí)例運(yùn)行過(guò)程中,流程實(shí)例“流轉(zhuǎn)”至此時(shí) 該活動(dòng)實(shí)例所對(duì)應(yīng)的工作項(xiàng)有哪些人可以執(zhí)行。在流程定義時(shí)設(shè)置活動(dòng)的參與 者實(shí)際上是圈定流程實(shí)例運(yùn)行至此時(shí)可以執(zhí)行該活動(dòng)實(shí)例所對(duì)應(yīng)工作項(xiàng)的人員 范圍,可以是機(jī)構(gòu)、角色或人。 EOS WorkFlow 提供了 4 種可以獲取參與者的方式: 組織機(jī)構(gòu)與角色組織機(jī)構(gòu)與角色:參與者由開(kāi)發(fā)人員從機(jī)構(gòu)樹(shù)中獲取 只選擇一人:表示該活動(dòng)所對(duì)應(yīng)的工作項(xiàng)直接分配給該人處理 超過(guò)一人:表示該活動(dòng)所對(duì)應(yīng)的工作項(xiàng)由這些人中的某個(gè)人以“領(lǐng)取” 的方式處理 虛擬崗位(機(jī)構(gòu)虛擬崗位(機(jī)構(gòu)+ +角色)角色):表示在不設(shè)置崗位的情況下,由部門(mén)+角色共同決定 一個(gè)人工活動(dòng)的參與者。 流程啟動(dòng)者流程啟動(dòng)者:表示活動(dòng)參與者為該流程的啟動(dòng)者 活動(dòng)執(zhí)行者活動(dòng)執(zhí)行者:表示活動(dòng)參與者為某個(gè)已完成的活動(dòng)實(shí)例所對(duì)應(yīng)工作項(xiàng)的執(zhí)行者 從相關(guān)數(shù)據(jù)獲取從相關(guān)數(shù)據(jù)獲?。罕硎净顒?dòng)參與者由相關(guān)數(shù)據(jù)指定。由相關(guān)數(shù)據(jù)獲取參與者的 規(guī)則詳見(jiàn)從相關(guān)數(shù)據(jù)獲取參與者 從規(guī)則邏輯獲取從規(guī)則邏輯獲?。罕硎净顒?dòng)參與者由某個(gè)規(guī)則邏輯的返回值確定。由規(guī)則邏輯 獲取參與者的規(guī)則詳見(jiàn)從規(guī)則邏輯獲取參與者 特別說(shuō)明特別說(shuō)明:如果要改寫(xiě)組織機(jī)構(gòu)權(quán)限并在參與者設(shè)置的時(shí)候顯示新的組織機(jī)構(gòu)樹(shù), 具體操作請(qǐng)參見(jiàn)知識(shí)庫(kù)文檔:組織機(jī)構(gòu)與工作流集成方案.doc 虛擬崗位(機(jī)構(gòu)虛擬崗位(機(jī)構(gòu)+ +角色)設(shè)置參與者角色)設(shè)置參與者 -圖通過(guò)機(jī)構(gòu)+角色實(shí)現(xiàn)虛擬崗位設(shè)置參與者 用角色+機(jī)構(gòu)的方式設(shè)置參與者需要特別注意的是,在該活動(dòng)激活以前一定 要將上圖中機(jī)構(gòu)變量路徑設(shè)置到相關(guān)數(shù)據(jù)區(qū)中。 此外,還有一種方法設(shè)置一組機(jī)構(gòu):把多個(gè)機(jī)構(gòu)寫(xiě)成如下格式: 1 2 這樣機(jī)構(gòu)變量路徑 xpath 寫(xiě)成:list/org/id 即可。這樣,工作流引擎也會(huì)找 到多個(gè)機(jī)構(gòu) id,從而實(shí)現(xiàn)設(shè)置一組機(jī)構(gòu)+角色的要求。如下圖所示: 圖-設(shè)置一組機(jī)構(gòu)變量 從相關(guān)數(shù)據(jù)區(qū)設(shè)置參與者從相關(guān)數(shù)據(jù)區(qū)設(shè)置參與者 1)從相關(guān)數(shù)據(jù)獲得一個(gè)具體的參與者)從相關(guān)數(shù)據(jù)獲得一個(gè)具體的參與者 【算法說(shuō)明】 從相關(guān)數(shù)據(jù)的 XPATH 中,直接指定一個(gè)參與者。 注:這種方式獲得的參與者只能是個(gè)人。相關(guān)數(shù)據(jù)必須滿足下面的結(jié)構(gòu)。 tiger 2)從相關(guān)數(shù)據(jù)獲得某一類(lèi)型的參與者(指定一個(gè)或一組人員)從相關(guān)數(shù)據(jù)獲得某一類(lèi)型的參與者(指定一個(gè)或一組人員) 【算法說(shuō)明】 從相關(guān)數(shù)據(jù)的 XPATH 中,獲得某一類(lèi)型的參與者??梢允且粋€(gè)人,也可以是 某一角色或某一機(jī)構(gòu)的一組人。相關(guān)數(shù)據(jù)必須滿足下面的結(jié)構(gòu)。 3)從相關(guān)數(shù)據(jù)獲得一系列參與者)從相關(guān)數(shù)據(jù)獲得一系列參與者 【算法說(shuō)明】 從相關(guān)數(shù)據(jù)的 XPATH 中,獲得一組參與者??梢允且粋€(gè)人、一個(gè)角色、一個(gè) 崗位、一個(gè)機(jī)構(gòu),也可以是機(jī)構(gòu)、角色或個(gè)人的集合,還可以是崗位列表的集 合。相關(guān)數(shù)據(jù)必須滿足下面的結(jié)構(gòu)。 id 和 type 的含義如上所示 特別說(shuō)明特別說(shuō)明 :在上面 XPATH 結(jié)構(gòu)中如果 type 是“person” ,那么 id 即為用 戶 ID;如果 type 是 “role” ,那么 id 即為角色 ID;如果 type 是“organization” , 那么 id 即為機(jī)構(gòu) ID;如果 type 是 “position” ,那么 id 即為崗位 ID;如果 type 是 “position_list” ,那么 id 即需滿足如下格式: / type=”O(jiān)R”表示組織機(jī)構(gòu) rolea/ 角色 ID $orgID / 獲取機(jī)構(gòu) ID 的 XPATH(相對(duì)于相關(guān)數(shù)據(jù)的根路徑) 。 ”$” 不可少,標(biāo)識(shí)其后的串是個(gè) XPATH。 此外,還有一種方法設(shè)置一組機(jī)構(gòu):把多個(gè)機(jī)構(gòu)寫(xiě)成如下格式: 1 2 這樣機(jī)構(gòu)變量路徑 xpath 寫(xiě)成:list/org/id 即可。這樣,工作流引擎也會(huì)找 到多個(gè)機(jī)構(gòu) id,從而實(shí)現(xiàn)設(shè)置一組機(jī)構(gòu)+角色的要求。 從規(guī)則邏輯設(shè)置參與者從規(guī)則邏輯設(shè)置參與者 從規(guī)則邏輯獲取參與者從規(guī)則邏輯獲取參與者 【算法說(shuō)明算法說(shuō)明】 從業(yè)務(wù)邏輯獲取參與者列表,然后再按照“分配到組織機(jī)構(gòu)”的模式進(jìn)行分配。 從業(yè)務(wù)邏輯返回 Dom 當(dāng)中找到參與者列表的方法: 1)如果返回的結(jié)果中包括下面的結(jié)構(gòu),系統(tǒng)從)如果返回的結(jié)果中包括下面的結(jié)構(gòu),系統(tǒng)從 listlist 節(jié)點(diǎn)中獲取多個(gè)參與者。節(jié)點(diǎn)中獲取多個(gè)參與者。 2)如果從規(guī)則邏輯中沒(méi)有找到如果從規(guī)則邏輯中沒(méi)有找到 listlist 節(jié)點(diǎn),那么系統(tǒng)會(huì)查找節(jié)點(diǎn),那么系統(tǒng)會(huì)查找 ParticipantParticipant 節(jié)點(diǎn)節(jié)點(diǎn). . 獲取參與者。格式如下所示:獲取參與者。格式如下所示: id 和 type 的含義同上。 特別說(shuō)明特別說(shuō)明 :如果如上所示的兩種結(jié)構(gòu)都存在于調(diào)用的規(guī)則邏輯的返回的 結(jié)果中,那么系統(tǒng)只會(huì)從 list 節(jié)點(diǎn)中獲取參與者。 在上面 XPATH 結(jié)構(gòu)中如果 type 是“personperson” ,那么 id 即為用戶 ID;如果 type 是 “rolerole” ,那么 id 即為角色 ID;如果 type 是“organizationorganization” ,那么 id 即為機(jī)構(gòu) ID;如果 type 是 “positionposition” ,那么 id 即為崗位 ID;如果 type 是 “position_listposition_list” ,那么 id 即需滿足如下格式: / type=”O(jiān)R”表示組織機(jī)構(gòu) rolea/ 角色 ID $orgID / 獲取機(jī)構(gòu) ID 的 XPATH(相對(duì)于相關(guān)數(shù)據(jù)的根 路徑) 。 ”$”不可少,標(biāo)識(shí)其后的串是個(gè) XPATH。 此外,還有一種方法設(shè)置一組機(jī)構(gòu):把多個(gè)機(jī)構(gòu)寫(xiě)成如下格式: 1 2 這樣機(jī)構(gòu)變量路徑 xpath 寫(xiě)成:list/org/id 即可。這樣,工作流引擎也會(huì)找 到多個(gè)機(jī)構(gòu) id,從而實(shí)現(xiàn)設(shè)置一組機(jī)構(gòu)+角色的要求。 工作流參與者設(shè)置機(jī)制說(shuō)明工作流參與者設(shè)置機(jī)制說(shuō)明 流程實(shí)例根據(jù)流轉(zhuǎn)條件依次激活實(shí)例中的相應(yīng)的活動(dòng),當(dāng)活動(dòng)分配給某個(gè) 參與者(唯一的 userID)的時(shí)候,就在 WFWorkItem 表中形成一條工作項(xiàng)記錄, 主鍵為 workItemID。在 WFWorkItem 工作項(xiàng)信息表里還有個(gè)很重要的字段: participant。這個(gè)字段描述該工作項(xiàng)的參與者具體是誰(shuí)。在工作項(xiàng)參與者 WFWIParticipant 表中,也有工作項(xiàng) workItemID 和參與者 participant,不過(guò), 這個(gè)表里描述的是根據(jù)流程定義,活動(dòng)被激活后工作項(xiàng)的分配情況,根據(jù)流程 定義的設(shè)置形成相應(yīng)的記錄,比如,流程定義中有 3 種參與者,那么在 WFWIParticipant 表中也形成 3 條記錄,所以這里的參與者有可能是具體個(gè)人 (userID) ,也可能是角色(role) ,也可能是機(jī)構(gòu)(orgID) ,也可能是崗位 (positionID) ,當(dāng)工作項(xiàng)沒(méi)有領(lǐng)取的時(shí)候,在 WFWorkItem 表中也會(huì)形成一條 記錄,這條記錄的參與者字段 participant 是用“|”隔開(kāi)的參與者串,這個(gè)串 中的參與者是在流程定義的時(shí)候定義的。當(dāng)工作項(xiàng)被領(lǐng)取以后,就會(huì)在工作項(xiàng) 表 WFWorkItem 表里出現(xiàn)具體的執(zhí)行人信息。此外,有時(shí)候工作項(xiàng)會(huì)出現(xiàn)該派的 情況,這個(gè)時(shí)候,改派以后具體參與者也在工作項(xiàng)表 WFWorkItem 表有描述,而 工作項(xiàng)參與者 WFWIParticipant 表不會(huì)有什么變化。 2.2.4 時(shí)間限制時(shí)間限制 活動(dòng)的時(shí)間限制表示活動(dòng)實(shí)例啟動(dòng)啟動(dòng)后必須在多長(zhǎng)時(shí)間內(nèi)完成。在活動(dòng) 時(shí)間限制的設(shè)置中 EOS WorkFlow 為開(kāi)發(fā)人員提供了指定具體的限制時(shí)間、超時(shí) 是否進(jìn)行郵件通知、是否在超時(shí)前進(jìn)行提醒、是否發(fā)提醒通知等功能。 活動(dòng)時(shí)間限制的設(shè)置:開(kāi)發(fā)人員可以根據(jù)業(yè)務(wù)需要在“人工活動(dòng)”和“子流程 活動(dòng)”中進(jìn)行設(shè)置。 活動(dòng)時(shí)間限制的計(jì)時(shí):從活動(dòng)實(shí)例啟動(dòng)時(shí)開(kāi)始計(jì)時(shí) 活動(dòng)時(shí)間限制的獲?。褐苯又付?、從相關(guān)數(shù)據(jù)獲?。ǜ袷剑?.5.20 表示時(shí) 限為 3 天 5 小時(shí) 20 分鐘) 活動(dòng)還有超時(shí)的觸發(fā)事件設(shè)置,可以針對(duì)超時(shí)做具體的操作。 EOSEOS WORKFLOWWORKFLOW 判斷流程或人工活動(dòng)超時(shí)的原理判斷流程或人工活動(dòng)超時(shí)的原理 流程或人工活動(dòng)的時(shí)間限制中設(shè)置的限制時(shí)間將寫(xiě)入表 WFProcessInst 或 WFWorkItem 的 limitNum 字段中,單位為毫秒,limitNumDesc 是其描述字段; finalTime 是時(shí)間限制到達(dá)后的時(shí)間。EOS WorkFlow 將當(dāng)前時(shí)間與 startTime 相減的結(jié)果與 limitNum 比較,一旦超出時(shí)間限制就將 isTimeOut 字段置為 Y, 表示超時(shí);timeOutNum 表示超時(shí)了多長(zhǎng)時(shí)間,在流程結(jié)束時(shí)寫(xiě)入。如果設(shè)置了 超時(shí)提醒,該字段可能出現(xiàn)負(fù)數(shù),是未超時(shí)的表現(xiàn),只有正數(shù)才表示超時(shí)的時(shí) 間,timeOutNumDesc 是其描述字段。 2.2.5 多工作項(xiàng)多工作項(xiàng) 一個(gè)活動(dòng)到底產(chǎn)生多少個(gè)工作項(xiàng)并且產(chǎn)生的這些工作項(xiàng)又由誰(shuí)來(lái)做呢?EOS WorkFlow 就工作項(xiàng)的產(chǎn)生和分配問(wèn)題提供了 2 種策略: 按參與者設(shè)置個(gè)數(shù)領(lǐng)取工作項(xiàng):按參與者設(shè)置個(gè)數(shù)領(lǐng)取工作項(xiàng):按照此活動(dòng)參與者的個(gè)數(shù)產(chǎn)生工作項(xiàng)。每 個(gè)參與者一個(gè)工作項(xiàng),若參與者中包括若干人員(比如參與者的類(lèi)型為機(jī)構(gòu)或 角色) ,則這些人員可通過(guò)先“領(lǐng)取”的方式執(zhí)行工作項(xiàng)。 例如:某活動(dòng)設(shè)置了 3 個(gè)參與者:tiger,角色 B(包含 fish 和 goose 兩人), 機(jī)構(gòu) A(包含 kitty、snoppy、micky 三人),那么按照此策略將產(chǎn)生 3 個(gè)工作項(xiàng)。 具體分配為:tiger 一個(gè)工作項(xiàng),由其直接執(zhí)行(該參與者只有一個(gè)人所以無(wú)需 先領(lǐng)取);角色 B 一個(gè)工作項(xiàng),由 fish 或 goose 中的一個(gè)人以領(lǐng)取的方式執(zhí)行; 同理,機(jī)構(gòu) A 一個(gè)工作項(xiàng),由 kitty、snoppy 或 micky 中的一個(gè)人以領(lǐng)取的方 式執(zhí)行。 按操作員個(gè)數(shù)分配工作項(xiàng)按操作員個(gè)數(shù)分配工作項(xiàng):根據(jù)參與者中的人員個(gè)數(shù)產(chǎn)生工作項(xiàng),并且這 些工作項(xiàng)將直接分配到參與者中的人員,每人一個(gè)。 例如,上面的例子若按此策略將產(chǎn)生 6 個(gè)工作項(xiàng), tiger、fish、goose、kitty、snoppy,micky 每人分配一個(gè)工作項(xiàng),直接執(zhí)行。 多工作項(xiàng)執(zhí)行 不管工作項(xiàng)的個(gè)數(shù)如何相關(guān)人員每個(gè)人至多只能執(zhí)行一個(gè)。 未完成工作項(xiàng)自動(dòng)終止未完成工作項(xiàng)自動(dòng)終止 1)選擇選擇“是是”:工作流引擎在結(jié)束活動(dòng)實(shí)例的同時(shí)對(duì)于那些剩余的未完成 的工作項(xiàng)作“停止停止”處理。 2)選擇選擇“否否”:那些剩余的未完成的工作項(xiàng)仍處于運(yùn)行運(yùn)行狀態(tài),盡管此時(shí)活 動(dòng)實(shí)例已結(jié)束。這些工作項(xiàng)的擁有者此時(shí)無(wú)論是否處理它們,已不會(huì)對(duì)運(yùn) 行的流程造成任何影響,只有當(dāng)流程實(shí)例結(jié)束時(shí),引擎才會(huì)將這些工作項(xiàng) 終止 活動(dòng)項(xiàng)與工作項(xiàng)活動(dòng)項(xiàng)與工作項(xiàng) 活動(dòng)項(xiàng)和工作項(xiàng)是一對(duì)多的關(guān)系,人工活動(dòng)被激活后,形成活動(dòng)項(xiàng)實(shí)例繼 而有生成工作項(xiàng)實(shí)例,供參與者操作。在工作項(xiàng)表 WFWorkItem 中保存了活動(dòng)項(xiàng) 實(shí)力和工作項(xiàng)之間的關(guān)系。 通過(guò)通過(guò) BL_BL_finishActivityByDefIDfinishActivityByDefID 結(jié)束活動(dòng)的方式結(jié)束工作項(xiàng)結(jié)束活動(dòng)的方式結(jié)束工作項(xiàng) 在現(xiàn)有工作流工作項(xiàng)結(jié)束調(diào)用中一般都會(huì)采用 BL_finishWorkItem 這個(gè)運(yùn) 算邏輯調(diào)用,但是也有情況可以通過(guò) BL_finishActivityByDefID 來(lái)結(jié)束活動(dòng)的 方式結(jié)束工作項(xiàng)。如果這樣做的話會(huì)帶來(lái)一個(gè)問(wèn)題, BL_finishActivityByDefID 方法是結(jié)束活動(dòng),當(dāng)活動(dòng)中的工作項(xiàng)需要領(lǐng)取而又沒(méi)有領(lǐng)取的情況下,如果直 接使用該方法,則會(huì)導(dǎo)致此活動(dòng)被終止,而不是正常結(jié)束,所以這種情況下只 能直接使用 BL_finishWorkItem 來(lái)結(jié)束工作項(xiàng)。要么先領(lǐng)取,然后再用 BL_finishActivityByDefID 來(lái)結(jié)束活動(dòng)。orkItem 2.2.6 觸發(fā)事件觸發(fā)事件 創(chuàng)建創(chuàng)建:指活動(dòng)被實(shí)例化時(shí) 啟動(dòng)啟動(dòng):指活動(dòng)被實(shí)例化并滿足啟動(dòng)條件時(shí),當(dāng)活動(dòng)被創(chuàng)建的同時(shí)也會(huì)被啟動(dòng), 所以這兩項(xiàng)的觸發(fā)時(shí)機(jī)是一致的。 結(jié)束結(jié)束:當(dāng)活動(dòng)完成時(shí)(finish) 超時(shí)超時(shí):當(dāng)活動(dòng)超時(shí)時(shí)(如果設(shè)置了時(shí)間限制,該項(xiàng)有效)觸發(fā) 事件類(lèi)型:標(biāo)明事件動(dòng)作的類(lèi)型。EOS WorkFlow 提供基于 EOS 平臺(tái)的業(yè)務(wù)邏輯 和運(yùn)算邏輯兩種類(lèi)型。 事件動(dòng)作:由開(kāi)發(fā)人員根據(jù)具體的業(yè)務(wù)需求自行定義??梢允且粋€(gè)運(yùn)算邏輯也 可以是一個(gè)業(yè)務(wù)邏輯。 觸發(fā)事件設(shè)置說(shuō)明: 1、觸發(fā)時(shí)機(jī)和調(diào)用方式。這里需要特別注意的是,調(diào)用方式同步和異步的 區(qū)別。同步是指:以“同步”的方式調(diào)用觸發(fā)事件,等待事件運(yùn)行完成后,該活 動(dòng)才啟動(dòng) 。 異步是指:以“異步”的方式調(diào)用觸發(fā)事件,該活動(dòng)在啟動(dòng)完觸發(fā)事 件后就啟動(dòng),而無(wú)需等待觸發(fā)事件運(yùn)行完成。 2、觸發(fā)事件。如果用業(yè)務(wù)邏輯業(yè)務(wù)邏輯來(lái)實(shí)現(xiàn),那么觸發(fā)事件中產(chǎn)生的數(shù)據(jù)還可以 在業(yè)務(wù)邏輯中輸出,這樣就可以將這些數(shù)據(jù)直接設(shè)置為相關(guān)數(shù)據(jù)了。如果是運(yùn) 算邏輯則不能輸出到相關(guān)數(shù)據(jù)區(qū)中。 3
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社會(huì)單位消防培訓(xùn)課件
- 二壩初中九年級(jí)數(shù)學(xué)試卷
- 高三學(xué)生滿分?jǐn)?shù)學(xué)試卷
- 肉羊養(yǎng)殖技術(shù)課件
- 肉牛屠宰加工技術(shù)課件
- 2024年12月恒豐銀行煙臺(tái)分行社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 龍湖文化培訓(xùn)課件資源
- 2025至2030城市軌道行業(yè)市場(chǎng)深度研究與戰(zhàn)略咨詢分析報(bào)告
- 2024年廣州市海珠區(qū)六中珠江中學(xué)招聘教師筆試真題
- 2025至2030不銹鋼取石機(jī)行業(yè)市場(chǎng)深度研究與戰(zhàn)略咨詢分析報(bào)告
- 食品行業(yè)質(zhì)量安全風(fēng)險(xiǎn)管理措施
- 煙草行業(yè)的安全知識(shí)培訓(xùn)
- 微信繳費(fèi)合同范本
- 儲(chǔ)能站施工組織設(shè)計(jì)施工技術(shù)方案(技術(shù)標(biāo))
- 餐飲業(yè)顧客投訴處理的整改措施
- 《危險(xiǎn)房屋鑒定標(biāo)準(zhǔn)JGJ125-2016》
- 網(wǎng)絡(luò)安全應(yīng)急響應(yīng)隊(duì)伍建設(shè)-洞察分析
- DB32∕T 3148-2016 礦渣粉單位產(chǎn)品能源消耗限額
- 虛擬化資源調(diào)度策略-洞察分析
- 2018-2024年中國(guó)軌道交通智能化系統(tǒng)未來(lái)趨勢(shì)預(yù)測(cè)分析及投資規(guī)劃研究建議報(bào)告
- 2025年江蘇省環(huán)保集團(tuán)招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論