OSWorkFlow工作流引擎技術培訓_第1頁
OSWorkFlow工作流引擎技術培訓_第2頁
OSWorkFlow工作流引擎技術培訓_第3頁
OSWorkFlow工作流引擎技術培訓_第4頁
OSWorkFlow工作流引擎技術培訓_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

OSWorkflow工作流引擎技術GWI

湖南長城信息金融設備有限責任公司主講:孫家躍時間:2011年07月25日地點:長城信息辦公樓OSWorkflow工作流引擎技術GWI湖南長城信息1主要內(nèi)容工作流的基本概念什么是工作流工作流技術的起源與發(fā)展工作流的發(fā)展歷程工作流技術的具體應用工作流的主要應用方向工作流管理系統(tǒng)工作流管理系統(tǒng)的解說工作流技術中存在的問題有那些問題存在OSWorkflow工作流引擎是一個”低端”工作流實現(xiàn)主要內(nèi)容工作流的基本概念什么是工作流工作流技術的起源與發(fā)展工2工作流的概念工作流(WorkFlow)就是工作流程的計算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規(guī)則在計算機中以恰當?shù)哪P瓦M行表示并對其實施計算。工作流要解決的主要問題是:為實現(xiàn)某個業(yè)務目標,在多個參與者之間,利用計算機,按某種預定規(guī)則自動傳遞文檔、信息或者任務。

簡單地說,工作流就是一系列相互銜接、自動進行的業(yè)務活動或任務。

工作流的概念工作流(WorkFlow)就是工作流程的計算模3OSWorkFlow工作流引擎技術培訓4OSWorkFlow工作流引擎技術培訓5三大主流工作流引擎技術Jbpm工作流引擎 Jbpm的靠山是jboss。Jbpm3和JBPM4的持久層采用hibernate3來實現(xiàn)。Jbpm3的圖形化流程定義通過嵌入到jbosseclipseIDE中實現(xiàn)圖形化編輯。 JBPM對工作流中所需的各種應用提供很好的支持為開發(fā)應用提供方便,但JBPM的流程定義GPD插件與Eclipse支持不完善,目前jbpm4版本只支持Eclipse4.3版本,Jboss組織整合的IDE工具RedHatDeveloperStudio又為收費軟件. JBPM應用前景被行業(yè)內(nèi)人士很看好,被譽為頂替Shark和Osworkflow的新一代工作流引擎.JBPM4.0版本目前還是阿爾發(fā)版,還沒有發(fā)展成為穩(wěn)定的發(fā)布版本,并且現(xiàn)在一直在不停的重構,目前還不便于極力推廣應用,而JBPM4.0較之JBPM3.0又做了很大的改進和變動,轉而使用JBPM3.0有點得不償失.JBPM4.0相關技術應用和文檔支持都還不夠,使用該框架還有待時日,需要靜觀其變.三大主流工作流引擎技術Jbpm工作流引擎6三大主流工作流引擎技術Osworkflow工作流引擎 Osworkflow是完全用java語言編寫的開放源代碼的工作流引擎,具有顯著的靈活性及完全面向有技術背景的用戶的特點。用戶可以根據(jù)自身的需求利用這款開源軟件設計簡單或是復雜的工作流。通過使用,用戶就可以把工作中心放在業(yè)務和規(guī)則的定義上,而不需通過硬編碼的方式實現(xiàn)。用戶可以以最小的代價把osworkflow整合到自己的程序中來。三大主流工作流引擎技術Osworkflow工作流引擎7工作流技術的具體應用工作流特殊服務類:質(zhì)量管理對應流程、產(chǎn)品數(shù)據(jù)信息管理等各種通過表單逐步手工流轉完成的任務均可應用工作流軟件自動規(guī)范地實施。

關鍵業(yè)務流程:訂單處理、報價處理、采購處理、合同審核、客戶電話處理等客戶服務類:客戶信息管理、客戶投訴、請求處理、售后服務管理等管理等。

財務相關類:付款請求、應收款處理、日常報銷處理、出差報銷、預算和計劃申請等。行政管理類:出差申請、加班申請、請假申請、用車申請、購買申請、日報周報等凡是原來手工流轉處理的行政表單。人事管理類:員工培訓安排、績效考評、職位變動處理、員工檔案信息管理等。

工作流技術的具體應用工作流特殊服務類:關鍵業(yè)務流程:客戶服務8工作流管理系統(tǒng)工作流管理系統(tǒng)定義工作流管理系統(tǒng)功能工作流管理系統(tǒng)分類工作流管理系統(tǒng)工作流管理系統(tǒng)參考模型工作流管理系統(tǒng)工作流管理系統(tǒng)定義工作流管理系統(tǒng)功能工作流管理9工作流管理系統(tǒng)的定義WFMC給出的工作流管理系統(tǒng)的定義是:“工作流管理系統(tǒng)是一個軟件系統(tǒng),它完成工作流的定義和管理,并按照在計算機中預先定義好的工作流邏輯推進工作流實例的執(zhí)行”。通常,工作流管理系統(tǒng)指運行在一個或多個稱為工作流引擎的軟件上的用于定義、實現(xiàn)和管理工作流運行的一套軟件系統(tǒng),它和工作流執(zhí)行者(人、應用)交互,推進工作流實例的執(zhí)行,并監(jiān)控工作流的運行狀態(tài)。工作流管理系統(tǒng)的定義WFMC給出的工作流管理系統(tǒng)的定義是:“10工作流管理系統(tǒng)功能1建立功能:對工作流過程及其組成活動定義和建模3運行交互功能:指在工作流運行中,與用戶(業(yè)務工作的參與者或控制者)及外部應用程序工具交互的功能2運行控制功能:在運行環(huán)境中管理工作流過程,對工作流過程中的活動進行調(diào)度工作流管理系統(tǒng)是定義、創(chuàng)建、執(zhí)行工作流的系統(tǒng)。在最高層上,工作流管理系統(tǒng)應能提供以下三個方面的功能支持:工作流管理系統(tǒng)功能1建立功能:3運行交互功能:2運行控制功能11工作流管理系統(tǒng)分類根據(jù)用途和所實現(xiàn)的業(yè)務流程的特點的不同,可分為以下四種類型:協(xié)同型工作流:主要由參與者的交互參與刻畫,參與者協(xié)作次數(shù)比較多,不像其他類型工作流總是向前流轉,它還包括循環(huán)流和反向流,例如:協(xié)同編輯特定型工作流:由若干非自動化的任務組成,多用于處理異?;虬l(fā)生機會比較小的情況。工作流的執(zhí)行要求在一個工作流任務執(zhí)行的同時決定下一個執(zhí)行的任務和執(zhí)行者,能夠提供合作協(xié)同功能,但不控制工作順序。管理型工作流:由較為結構化和可預見的流程組成,用于執(zhí)行簡單協(xié)同規(guī)則的可重復和可預測的流程,它的執(zhí)行步驟和規(guī)則是事先定義的,不要求控制復雜流程和訪問多個信息系統(tǒng),例如:學位申請、車輛登記等。生產(chǎn)型工作流:工作流的高級類型,實現(xiàn)重要業(yè)務流程的工作流,特別是與業(yè)務組織的功能直接相關的工作流,關系到組織的功能。與管理型工作流相比,生產(chǎn)型工作流一般應用在大規(guī)模、復雜的和異構的環(huán)境下,整個流程涉及許多不同的任務、人和組織。工作流管理系統(tǒng)分類根據(jù)用途和所實現(xiàn)的業(yè)務流程的特點的不同,可12工作流管理系統(tǒng)參考模型流程定義工具工作流機工作流客戶應用工作流引擎直接調(diào)用的應用工作流管理工具工作流機接口1接口2接口3接口4接口5其他工作流執(zhí)行任務工作流API與交換格式工作流執(zhí)行任務工作流管理系統(tǒng)參考模型流程定義工具工作流機工作流客戶應用工作13工作流技術中存在的問題不同的廠商所提供的工作流產(chǎn)品具有獨立的一套工作流模型、工作流定義語言、API函數(shù)。但難于在不同系統(tǒng)之間進行交互,集成的效果不理想,不能方便地在不同系統(tǒng)間進行應用對象的重復利用和數(shù)據(jù)的方便交流。目前,大多數(shù)工作流產(chǎn)品的生產(chǎn)廠家己經(jīng)意識到這個問題,他們加入了工作流管理聯(lián)盟并提出了一套工作流管理系統(tǒng)的標準。工作流管理系統(tǒng)沒有達到真正的集成,還是自己獨立地運行,處理一些行政上簡單的流程業(yè)務,不能很好將OA、ERP、CRM、SCM等具體事務處理系統(tǒng)緊密地聯(lián)系在一起,達到數(shù)據(jù)錄入一次即可有效的目的。實施一個完整的工作流管理系統(tǒng),是一個復雜的過程,要了解其他應用系統(tǒng)的業(yè)務,進行流程處理分析、業(yè)務流程改造、管理規(guī)程和操作規(guī)范建立等,并且還必須有不同軟件供應商的全力配合。系統(tǒng)中對于并發(fā)訪問和異常錯誤缺乏正確和可靠的支持。一旦系統(tǒng)出現(xiàn)非正常退出,如何恢復數(shù)據(jù)并保證數(shù)據(jù)的一致性還需要解決。工作流管理系統(tǒng)必須建立在底層通信的基礎上,才能實現(xiàn)分布計算,這要額外付出經(jīng)費和精力進行構筑,這是企業(yè)所不希望的,從而限制了在企業(yè)中的廣泛應用。工作流底層環(huán)境的建立系統(tǒng)的安全性實現(xiàn)的復雜性系統(tǒng)集成性不理想標準化程度差工作流技術中存在的問題不同的廠商所提供的工作流產(chǎn)品具有獨立的14OSWorkflow簡介OSWorkflow都不同于這些已有的工作流系統(tǒng)。最大不同在于OSWorkflow有要求圖形化工具來開發(fā)工作流,而推薦手工編寫xml格式的工作流程描述符。它能為應用的代碼和數(shù)據(jù)庫進行集成。這一切似乎給正在尋找快速“即插即用”工作流解決方案的人制造了麻煩,但研究發(fā)現(xiàn),那些“即插即用”方案也不能在一個成熟的應用程序中提供足夠的靈活性來實現(xiàn)所有需求。OSWorkflow基于有限狀態(tài)機概念。每個state(狀態(tài))由stepID和status(狀態(tài))聯(lián)合表現(xiàn)(可簡單理解為step及其status表示有限狀態(tài)機的state)。一個state到另一state的transition(過度)依賴于action的發(fā)生,在工作流生命期內(nèi)有至少一個或多個活動的state。Osworkflow幾乎提供了所有用戶可能在實際流程定義中需要用到的工作流構成元素,如:環(huán)節(jié)(step)、條件(conditions)、循環(huán)(loops)、分支(spilts)、合并(joins)、角色(roles)等等OSWorkflow簡介OSWorkflow都不同于這些已15所需JAR包OSWorkflow自身(%osworkflow解壓包%\):

osworkflow-2.8.0.jarOSWorkflow核心引用包(%osworkflow解壓包%\lib\core):

commons-logging.jar:必要,支持日志。

propertyset-1.4.jar:必要,支持propertyset的aggregate,cached,memory,jdbc,file,javabeans,map,xml接口實現(xiàn),并不支持hibernate3,如果要支持hibernate3,要自己寫代碼。這個下面再談。

oscore-2.2.5.jar:必要,提供了一些工具等。OSWorkflow可選包(%osworkflow解壓包%\lib\optional):

bsf.jar:支持bsf,可選。

bsh-1.2b7.jar:支持beanshell,可選。

ehcache.jar:支持緩存,可選。

osuser-1.0-dev-2Feb05.jar:支持例子里面的用戶和群組管理,在涉及到用戶和群組的操作建議加上此包。spring2所需的包(%spring解壓包%\dist):

spring.jar(version:2.05)Hibernate3所需的包(%hibernate解壓包%\lib):

antlr.jar;cglib.jar;asm.jar;asm-attrs.jars;commons-collections.jar;hibernate3.jar;jta.jar;dom4j.jar;log4j.jar所需JAR包OSWorkflow自身(%osworkflow16OSWorkflow核心概念

一個工作流包含多個步驟。每一個步驟都有一個當前狀態(tài)(例如,Underway(進行中)、Queued(等候處理中)、Finished(完成))。每一個步驟中都有一個或者多個動作可以被執(zhí)行。每一個動作都可以設置執(zhí)行條件(condition),也可以設置執(zhí)行函數(shù)(pre-functionorpost-function)。動作產(chǎn)生結果(result),導致工作流的狀態(tài)和當前步驟發(fā)生改變。OSWorkflow核心概念一個工作流包含多個17OSWorkflow核心概念step(步驟):

一個step是工作流所處的位置??赡軓囊粋€step流轉到另外一個step(或者有時候還是停留在一樣的step)。舉例來說,一個OA系統(tǒng)的請假流程,它的step名稱可能有“本部門審批階段”,“辦公室審批階段”,“總經(jīng)理審批階段”等。

status(狀態(tài)):

工作流status是一個用來描述工作流程中具體步驟狀態(tài)的字符串。OSWorkflow的有Underway(進行中)、Queued(等候處理中)、Finished(完成)三種status。工作流Status是用來描述工作流程中具體Step(步驟)狀態(tài)的字符串。一個實際State(狀態(tài))真正是由兩部分組成:State=(Step+Status)。

action(動作):

action指定了可能發(fā)生在step內(nèi)的轉變,會導致step的變更。在OA系統(tǒng)中,“本部門審批階段”可能有“拒絕”或“批準”兩個action。action和step之間的關系是,step說明“在哪里”,action說明“可以去哪里”。一個action典型地由兩部分組成:可以執(zhí)行此動作的condition(條件),以及執(zhí)行此動作的result(結果)。

OSWorkflow核心概念step(步驟):18OSWorkflow核心概念condition(條件):

類似于邏輯判斷,可包含“AND”和“OR”邏輯。比如一個請假流程中的“本部門審批階段”,該階段利用“AND”邏輯,判斷流程狀態(tài)是否為等候處理中,以及審批者是否為本部門主管。

result(結果):

Result代表指向新的step及其stepstatus,也可能進入split或者join。Result分為兩種,contidional-result(有條件結果),只有條件為真時才使用該結果,和unconditional-result(無條件結果),當條件不滿足或沒有條件時使用該結果。split/join(分離/連接):

流程的切分和融合。很簡單的概念,split提供多個result;join則判斷多個currentstep的狀態(tài),提供一個result。OSWorkflow核心概念condition(條件):

19工作流程描述一個工作流(workflow)由多個步驟(step)來表示流程(flow)。每個步驟有一個或者多個動作,一個動作可以被設置成為是否自動執(zhí)行,或者通過與用戶的交互來由程序選擇執(zhí)行。每一個動作至少有一個無條件結果(unconditionalresult)和零到多個有條件的結果(conditionalresult)如果定義了多個conditionalresult,第一個符合所有條件的result將會被執(zhí)行,如果沒有定義conditonalresults或者沒有符合的conditions(條件),就會執(zhí)行unconditionalresult。執(zhí)行完當前步驟,它可能會停留在當前步驟,跳轉到另一個新的步驟,或者是一個split,或者是一個join中去。以上所有的情況下,workflow的的狀態(tài)可以隨之改變(例如狀態(tài)是Underway,Quened,Finished)。如果一個動作執(zhí)行的result(結果)是一個分支(split),result中的split屬性會指向splits元素中定義的一個split元素。工作流程描述一個工作流(workflow)由多個步驟(ste20工作流程描述一個分支可以有一個或者多個無條件結果,但不會有條件結果。這些結果指向來自于split里面的步驟。注冊器(register)是一個全局變量,它在工作流運行時被解析,可以被每個function和condition使用propertyset是全局范圍的持久數(shù)據(jù)集合(——譯者注:如果用數(shù)據(jù)庫存儲,它為os_propertyentry表。)transientVars是一個保存臨時數(shù)據(jù)的Map對象,它應用于所有的functions和conditons。這個transientVars里面包括所有的registers(全局變量),用戶輸入,以及當前工作流的上下文和狀態(tài)。它僅在一次工作流調(diào)用的生命周期中存在。工作流程描述一個分支可以有一個或者多個無條件結果,但不會有條21OSWorkflow核心代碼剖析osworkflow.xml加載過程WorkflowDescriptor對象加載過程、WorkflowStore對象加載過程Workflow接口中的核心方法OSWorkflow核心代碼剖析osworkflow.xml22osworkflow.xml加載過程osworkflow.xml加載過程 1、在AbatractWorkflow中的getConfiguration()方法調(diào)用了Configuration中的load(null)方法 2、Configuration中的load(null)方法調(diào)用了getInputStream()方法。getInputStream()方法里面加載osworkflow.xmlosworkflow.xml加載過程osworkflow.x23WorkflowDescriptor對象加載過程WorkflowDescriptor對象加載過程

1、首先在Workflow接口中getWorkflowDescriptor(StringworkflowName)方法調(diào)用Configuration對象中的getWorkflow(workflowName)方法。 2、Configuration對象調(diào)用factory中的getWorkflow(name)方法。 3、factory中的getWorkflow(name)方法調(diào)用同類中的getWorkflow(name,true)方法。 4、getWorkflow(name,true)方法首先用name參數(shù)取得WorkflowConfig對象,這個WorkflowConfig對象在factory初始化的時候已經(jīng)被生成了。緊接著調(diào)用loadWorkflow(c,validate)方法去解析XML并最終生成WorkflowDescriptor對象。WorkflowDescriptor對象加載過程Workfl24WorkflowStore對象加載過程WorkflowStore對象加載過程

1、首先AbatractWorkflow中的getPersistence()方法調(diào)用Configuration對象中的getWorkflowStore()方法。 2、如果store為空,從預先用load(URLurl)加載的persistenceClass中取得實現(xiàn)類,然后再創(chuàng)建新的實例并初始化參數(shù),最后返回WorkflowStore對象WorkflowStore對象加載過程WorkflowSto25Workflow接口中的核心方法1、initialize方法

初始化方法主要完成了以下幾個功能 得到WorkflowStore實現(xiàn)類,利用里面的createEntry方法創(chuàng)建一個WorkflowEntry對象。 執(zhí)行populateTransientMap方法,將context(WorkflowContext),entry(WorkflowEntry),store(WorkflowStore),configuration(Configuration),descriptor(WorkflowDescriptor)裝進transientVars;將當前要執(zhí)行的actionId和currentSteps裝進transientVars;將所有XML中配置的register裝進transientVars。 根據(jù)restrict-to里面配置的條件來判斷是否能初始化工作流,如果不能則回滾并拋出InvalidRoleException異常。 執(zhí)行transitionWorkflow方法傳遞工作流,這個transitionWorkflow方法是Workflow中重中之重的方法,以下會進行詳細講解。 返回當前工作流程實例ID。Workflow接口中的核心方法1、initialize方法26Workflow接口中的核心方法transitionWorkflow方法

transitionWorkflow方法是工作流最最核心的方法,它主要是完成以下功能

?

利用getCurrentStep方法取得當前步驟:如果只有一個有效當前步驟,直接返回;如果有多個有效當前步驟,返回符合條件的第一個。

?

調(diào)用動作驗證器來驗證transientVars里面的變量。

?

執(zhí)行當前步驟中的所有post-function。

執(zhí)行當前動作中的所有pre-function。

檢查當前動作中的所有有條件結果,如果有符合條件的,驗證transientVars里面的變量并執(zhí)行有條件結果里面的pre-function;如果動作里面沒有一個有條件結果,執(zhí)行無條件結果,驗證transientVars里面的變量并執(zhí)行無條件結果里面的pre-function。

如果程序進入到一個split中:

1)驗證transientVars里面的變量;

2)執(zhí)行split中的pre-functions;

3)如果動作中的finish不等于true,執(zhí)行split中所有的result;

4)結束當前步驟并將其移至歷史步驟中去,創(chuàng)建新的步驟并執(zhí)行新步驟中的pre-function;

5)執(zhí)行split中的post-function。Workflow接口中的核心方法transitionWork27Workflow接口中的核心方法如果程序進入到一個join中:

1)結束當前步驟并將其移至歷史步驟中去;

2)將剛結束的步驟和在join中的當前步驟還有歷史步驟加到joinSteps集合中并產(chǎn)生JoinNodes對象,將此對象put到transientVars里;

3)檢查join條件;

4)執(zhí)行join有條件結果中的validator;

5)執(zhí)行join有條件結果中的pre-function;

6)如果當前步驟不在歷史步驟里面,把它移到歷史步驟里面去;

7)如果剛剛結束的當前動作中的finish不等于true,創(chuàng)建新的步驟并執(zhí)行新步驟中的pre-function;

8)執(zhí)行join中的post-function。如果程序進入到另一個step中:結束當前步驟并將其移至歷史步驟中去,創(chuàng)建新的步驟并執(zhí)行新步驟中的pre-function。如果動作里面有符合條件的有條件結果,執(zhí)行有條件結果里面的post-function;如果動作里面沒有一個有條件結果,則執(zhí)行無條件結果里面的post-function。執(zhí)行動作里面的post-function。如果動作一開始是一個初始狀態(tài),將設置ACTIVATED標識;如果動作在XML里面有完成狀態(tài)的標識,將設置COMPLETED標識。執(zhí)行有效的自動動作(autoaction)。最后返回流程是否完成的布爾值:如果流程實例已經(jīng)完結,返回true;否則返回falseWorkflow接口中的核心方法如果程序進入到一個jo28Workflow接口中的核心方法doAction方法判斷工作流程實例的狀態(tài),如果狀態(tài)不為ACTIVATED(1),直接返回。利用findCurrentSteps方法得到當前所有步驟列表。執(zhí)行populateTransientMap方法,將context(WorkflowContext),entry(WorkflowEntry),store(WorkflowStore),configuration(Configuration),descriptor(WorkflowDescriptor)裝進transientVars;將當前要執(zhí)行的actionId和currentSteps裝進transientVars;將所有XML中配置的register裝進transientVars。檢查全局動作(GlobalAction)和當前步驟里面所有動作的有效性。如果有無效動作,直接拋出InvalidActionException異常。執(zhí)行transitionWorkflow方法傳遞工作流,如果捕獲到WorkflowException,拋出異常并回滾。如果動作中沒有顯式地標明finish的狀態(tài)為true,那么這時要執(zhí)行checkImplicitFinish方法,查找當前步驟中是否還有有效動作,如果沒有一個有效動作,則直接調(diào)用completeEntry方法結束流程并將流程的狀態(tài)設置成為COMPLETED(4)。Workflow接口中的核心方法doAction方法29主要配置文件osworkflow.xml

這個檔案是設定流程是否存在資料庫或存在記憶體workflows.xml 指定系統(tǒng)啟動時要載入那些流程。example.xml 對工作流程進行是設計定義osuser.xml 對用戶管理propertyset.xml 持久化到數(shù)據(jù)庫需要用到該配置文件加載OS_PROPERTYENTRY表主要配置文件osworkflow.xml30osworkflow.xml<osworkflow> <persistenceclass="com.opensymphony.workflow.spi.jdbc.MySQLWorkflowStore"> <!--Forjdbcpersistence,allarerequired.--> <propertykey="datasource"value="java:comp/env/jdbc/oswf"/> <!--mysql--> <propertykey="entry.sequence"value="SELECTmax(ID)+1FROMOS_WFENTRY"/> <propertykey="step.sequence"value="SELECTmax(ID)+1FROMOS_STEPIDS"/> <propertykey="entry.table"value="OS_WFENTRY"/> <propertykey="entry.id"value="ID"/> <propertykey=""value="NAME"/> <propertykey="entry.state"value="STATE"/> <propertykey="history.table"value="OS_HISTORYSTEP"/> <propertykey="current.table"value="OS_CURRENTSTEP"/> <propertykey="historyPrev.table"value="OS_HISTORYSTEP_PREV"/> <propertykey="currentPrev.table"value="OS_CURRENTSTEP_PREV"/> <propertykey="step.id"value="ID"/> <propertykey="step.entryId"value="ENTRY_ID"/> <propertykey="step.stepId"value="STEP_ID"/> <propertykey="step.actionId"value="ACTION_ID"/> <propertykey="step.owner"value="OWNER"/> <propertykey="step.caller"value="CALLER"/> <propertykey="step.startDate"value="START_DATE"/> <propertykey="step.finishDate"value="FINISH_DATE"/> <propertykey="step.dueDate"value="DUE_DATE"/> <propertykey="step.status"value="STATUS"/> <propertykey="step.previousId"value="PREVIOUS_ID"/> <!--mysql特殊配置--> <propertykey="step.sequence.increment"value="INSERTINTOOS_STEPIDS(ID)values(null)"/> <propertykey="step.sequence.retrieve"value="SELECTmax(ID)FROMOS_STEPIDS"/> <propertykey="entry.sequence.increment"value="INSERTINTOOS_ENTRYIDS(ID)values(null)"/> <propertykey="entry.sequence.retrieve"value="SELECTmax(ID)FROMOS_ENTRYIDS"/> </persistence> <factoryclass="com.opensymphony.workflow.loader.XMLWorkflowFactory"> <propertykey="resource"value="workflows.xml"/> </factory></osworkflow>osworkflow.xml<osworkflow>31workflows.xml<workflows>

<workflowname="leave_apply"type="resource"location="example1.xml"/><workflowname="leave_apply"type="resource"location="example2.xml"/><workflowname="leave_apply"type="resource"location="example3.xml"/><workflowname="leave_apply"type="resource"location="example4.xml"/></workflows>workflows.xml<workflows>32example.xmlinitial-actions:每個流程都至少需定義一個initial-actions,這是流程的起點。action:導致流程變動的動作,每個action都有個編號,且不能重復。step:雖然它的名稱是步驟,似乎它會有動作?其實將它視為流程位置可能比較恰當,osworkflow真正的動作在action發(fā)生。result:執(zhí)行動作后的結果,result有兩種conditional-result和unconditional-result,每個result一定有unconditional-result,當conditional-result的條件都不滿足時,就執(zhí)行unconditional-result。status:流程在某個action時的狀態(tài)。old-status:流程執(zhí)行某個action后的狀態(tài)。caller:這是OSWorkflow的保留字,可取得呼叫此工作流的user,即Workflowworkflow=newBasicWorkflow(caller);example.xmlinitial-actions:每個流33一個完整的流程定義文件:example.xmlStep的定義步驟1【可以多次進行acction=1的操作,acction=1保持當前步驟不變,只是改變狀態(tài)】<stepid="1"name="FirstDraft"> <actions> <actionid=“1”name=“開始撰寫草稿"> <results> <unconditional-resultold-status="Finished"status="Underway"step="1"/></results></action><actionid=“2”name=“完成草稿"><results><unconditional-resultold-status="Finished"status="Queued"step="2"/></results></action></actions></step>步驟2<stepid="2"name="finished"/>一個完整的流程定義文件:example.xmlStep的定義34一個完整的流程定義文件:example.xml條件(Condition)的使用<actionid="1"name="StartFirstDraft"> <restrict-to> <conditionstype=“AND“>----type=“OR”就是”或“的關系 <conditiontype="class"> <argname=""> com.opensymphony.workflow.util.StatusCondition </arg><argname="status">Queued</arg></condition></conditions></restrict-to><results><unconditional-resultold-status="Finished"status="Underway"step="1"/></results></action>可以自己實現(xiàn)Condition類來做驗證[繼承com.opensymphon

溫馨提示

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

最新文檔

評論

0/150

提交評論