Oracle WorkFlow(工作流)(一)
轉載自:http://hi.baidu.com/quce227/item/3dee702c66466a0343634a58
1概述
1.1工作流的概念
Workflow是EBS的基礎架構技術之一,系統中大部分流程性的通知和審批控制、賬戶按規則自動生成都是通過Workflow實現的
1.2工作流的目的
- 1. 在業務流程中發送、提供附加信息,這些附加信息以自助的Web頁面或Form的形式存在,例如:在Application中審批采購訂單時,采購訂單的form會作為附加信息提供給審批人。
- 2. 定義業務規則。使用WorkflowBuilder(圖形化工具)修改業務規則的流程;使用PL/SQL寫流程中活動的源代碼。
- 3. 發送電子郵件。工作流可以以電子郵件的方式向任何Application的用戶發送通知。
1.3工作流體系結構:
- 1. 開發者客戶端:只要在PC上安裝了WorkflowBuilder并且可以連接到數據庫,就可以用來創建和修改工作流的定義。
- 2. 數據庫服務器:工作流是和Oracle的數據庫集成在一起的。
- 3.應用服務器:包括Oracle Web Server、WebDB以及發送電子郵件的后臺程序。
- 4. 最終用戶端:安裝了瀏覽器可以使用Application、接收工作流發出的郵件和使用用來監控工作流的Web頁面。
1.4工作流開發工具安裝
在http://www.oracle.com/technology ... workflow/index.html下載頁面上找到workflow client并下載下來,即為所要安裝的Workflow Builder。
WorkflowBuilder介紹:
用來定義和修改工作流的圖形化工具,運行在Windows操作系統上。可以將一個或幾個工作流的定義保存到數據庫中或保存成一個文件。
WorkflowBuilder由‘對象瀏覽器'和‘流程圖表' 兩種窗口構成。‘對象瀏覽器'以樹狀結構顯示了工作流的對象構成,最上面一層是一個數據庫連接或一個wft文件,下面一層顯示的是在數據庫或文件中包含的工作流定義,更下面一層的是構成一個完整的工作流定義的對象(例如:屬性、流程、功能、通知、消息和快速編碼)。‘流程圖表'窗口使用‘對象瀏覽器'窗口中的對象來創建和修改工作流中的流程。
工作流的流程是由活動(活動可以是功能、通知或另一個工作流流程)和各活動之間的連線構成的。在應用中可以通過工作流引擎的API來調用一個工作流的流程。一個工作流的流程開始于一個‘開始'的活動。工作流引擎會自動地一個接一個地運行流程中的活動,直到遇到一個通知或一個暫停工作流流程的活動。當工作流引擎遇到一個通知時,它會調用通知程序來發送信息給某個角色,當用戶或角色對通知作了回應,工作流引擎會接著運行后面的活動,直到遇到一個‘結束'活動。
在工作流的流程中可以使用循環、分支和平行結構以及使用子流程來實現復雜的業務規則。
2工作流的組成及創建
在Workflow Builder的對象瀏覽器窗口中以樹狀的方式顯示了工作流的對象的組成,在樹狀結構的第三層(也就是項目類型的下面一層),包含以下這些分支:屬性(Attribute)、流程(或子流程Process)、功能(Function)、通知(Notification)、信息(Message)和快速編碼(Lookup Types);一個完整的工作流的定義就是由這些對象構成的。
2.1單據類型(Item Type)
組成工作流的對象的集合,在工作流流程中的每一個對象都必須從屬于一個項目類型。企業的業務有很多類別,同一種業務對應有不同的業務流程,同時在業務流轉的過程中處理不同的業務信息。單據類型其實就相當于一個業務類型。
單據類型屬性主要是定義業務信息,另外還包含一些在其它對象需要引用的信息,例如通知里的接收人就可以作為單據類型的屬性。單據類型的另外一項功能就是對工作流程進行分類 ,所有工作流里的其它對象都屬于一個單據類型。
Item Type是個抽象的概念,為方便理解,可以看作就是一個工作流。
創建一個Item Type:
- § 如果你沒有打開一個data store,從File里選擇New菜單創建一個新的Data Store,然后從鼠標右鍵菜單里選擇New Item Type在瀏覽樹里定義一個新的Item Type,此時單據類型的屬性頁會出現;
- § 每一個單據類型有一個大寫的內部名稱,最多8個字符,所有的工作流API、PL/SQL過程,SQL腳本在識別單據類型的時候都引用單據類型的內部名稱。在內部名稱里不能包括":"和"/"。 Internal Name相當于Code,在程序中經常用它來標志一個工作流;
- § 輸入一個翻譯性的名字,該名字是一個長一些的描述性名稱,Display Name相當于User Name,你也可以在Description中為單據類型輸入一段摘要信息;
- § 指定單據類型的持續類型,Persistence:當你定義一個單據類型時,你必須指定它的Persistence Type,它主要是控制單據類型實例的狀態審核追蹤的保存時間,如果你把持續類型設置為Permanent,則運行時的狀態信息會一直保存,除非你調用WF_Purge.Totalperm()過程清除;如果你把持續類型設置為Temporary,你必須指定持續的天數,臨時持續類型的單據類型實例在完成之后至少保存你指定的持續天數,在'n'天過后,你可以調用任何一個WF_Purge的API清除單據類型的運行時信息。;
- § Selector:如果你的單據類型有或者將有多個可運行的流程活動,定義一個PL/SQL函數決定在一個特殊的條件下運行哪一個流程活動。你也可以擴展這個選擇函數為一個回調函數,這樣在流程執行的過程中,如果會話信息中斷的話,可以恢復單據類型實例的上下文信息。當你從通知詳細頁面上去查看一個頁面屬性時特別有用;
- § 選擇"Roles"頁規定能訪問單據類型的角色(沒有用過);
- § 選擇"Access"頁規定單據類型的訪問和定制級別;
- § 選擇"應用"保存你的修改;
- § 在瀏覽樹里會出現一個二級分支來表示你剛創建的單據類型,你可以在瀏覽樹里雙擊單據類型瀏覽或修改單據類型的屬性;
2.2屬性(Attribute)
就好像PL/SQL中的全局變量,它可以全局地被工作流流程中的活動引用(例如:在審批采購訂單的工作流流程中,采購訂單的編號就是一個項目類型屬性,在審批流程的活動中可以隨時獲得這個屬性的值,也就是采購訂單的編號)。
單據類型屬性是和單據類型聯系在一起的,它通常充當一個全局變量,可以被流程里的活動引用或者修改。單據類型屬性包含流程完成所必需的單據信息。對于活動需要引用的信息或者通知消息里包含的信息,你通常需要定義一個單據類型屬性。
創建一個Attribute:
- § 選中Item Type 子樹中的Attribute/右鍵/New Attribute,出現屬性頁面;
- § 輸入一個大寫的內部名稱;
- § 輸入一個顯示名稱,該名稱會出現在瀏覽樹里;
- § 你可以輸入一段描述摘要信息;
- § 選擇屬性的數據類型,在定義活動屬性的時候,沒有Form,URL,Document屬性類型。一般情況下可選以下幾項:
屬性具有10種類型,下面給出每種類型的說明:
- Oslash; Text:屬性的值是一個字符串文本;
- Oslash; Number:屬性的值是一個數字,你可以為數字類型的屬性定義一個格式掩碼;
- Oslash; Date:屬性的值是一個日期類型,你也可以為日期類型的屬性定義一個格式掩碼;
- Oslash; Lookup:屬性的值是一個查找類型的代碼;
- Oslash; Form:屬性的值是一個Oracle應用的內部窗體函數名稱以及函數的參數;如果你在通知消息里包括了一個窗體類型的屬性,在查看通知的時候,會顯示一個窗體附件的圖標,可以讓用戶瀏覽到相應的頁面。
- Oslash; URL:屬性的值是一個網絡的URL地址,如果你在通知活動里包含了一個URL引用屬性,在查看通知的時候,會有一個指向URL的標識,用戶可以完成活動也可以訪問URL地址或的額外的信息。
- Oslash; Document:屬性的值是一個附件文檔,你可以在默認值里指定文檔的類型:PL/SQL文檔,通過存儲過程把數據庫里的信息以文檔的方式表達;DM文檔,一個被外部文檔管理系統管理的文檔。
- Oslash; Role:屬性的值是一個角色的內部名稱,如果在一個通知里包含了一個角色類型的屬性,則該屬性會自動解釋為角色的顯示名稱,省去了在內部名稱和外部名稱之間維護的工作。為了給角色類型的屬性賦一個默認值,你必須首先從數據庫里裝載角色。
- Oslash; Attribute:屬性類型的值是對單據類型的引用。
- Oslash; Event:暫時不知?(沒有查到相關資料)
- § 根據你選擇的屬性類型,為屬性指定默認值信息;
- § 對單據類型屬性來說,可選的默認值是一個你輸入或從列表中選擇的常量,不過,這個常量可以是一個在運行時替換的字符串;對活動屬性來說,默認值可以是一個常量或者一個單據類型屬性;
- § 選擇"應用"保存你的修改,選擇"確定"保存你的修改并推出屬性頁面,"取消"取消你的修改并推出屬性頁面;
- § 如果你在定義一個單據類型屬性,選擇"Access"頁設置允許修改屬性的訪問級別。
你創建的任何Attributes類型會出現在瀏覽樹的"Attributes"分支下,所有的函數屬性出現在對應的函數下面,你可以從瀏覽樹里雙擊一個屬性瀏覽或修改屬性的定義。
2.2.1定義一個URL屬性
- § 在屬性默認值里指定一個URL地址,這個URL可以是一個常量或者一個從其它單據屬性返回的值;
- § 你也可以在URL里包含字符串參數,這個參數可以是一個字符串文本或一個其它單據類型的格式替換。在參數字符串里采用其它單據類型進行格式替換,需要采用如下的格式:item_attr;
- § 如果URL里包含一個參數字符串,你必須遵守如下的限制:你不能用一個文檔類型的單據類型屬性對參數進行格式替換;你可以用表單或URL屬性對參數進行格式替換,但不能進行嵌套替換;
- § 如果你需要在URL里傳遞一個日期時間參數,你需要使用TO_CHAR函數把日期時間轉換為如下格式:"YYYY-MM-DD+HH24:MM:SS",同樣對日起類型需要使用TO_DATE;
- § 結束工作之后選擇"確定"按鈕保存。
2.2.2定義一個Form屬性
- § 在窗體屬性頁的默認值里指定一個窗體函數的名稱以及可選的字符串參數(窗體函數的參數);
- § 默認值必須使用下面的格式輸入:function_name:arg1=value1 arg2=value2...argn=valuen,argn的值可以是一個包含在雙引號內的字符串,也可以是一個被其他單據類型屬性進行格式替換的值,可以使用下面的方式定義格式替換:argn="item_attr"或者argn="value &item_attr";
- § 如果你的窗體屬性內包括參數,你必須牢記以下的限制:你不能使用一個文檔類型的屬性進行標記替換;你可以使用一個窗體類型或URL類型的屬性進行標記替換,但是你不能進行嵌套替換;
- § 保存你的工作。
2.2.3定義一個Document屬性
- § 在屬性頁的默認值里輸入一個標識文檔的字符串;
- § 你可以標識以下兩種類型的文檔:PL/SQL文檔或者存放在文檔管理系統里的文檔;
- § 一個PL/SQL文檔表示數據庫里的數據,該文檔由一個存儲過程產生,需要使用下面的方式來指定一個PL/SQL文檔的默認值:plsql:<procedure>/<document_identifier>。在使用時用一個包和過程名稱來替換procedure,用直接傳送給過程的字符串參數替換document_identifier,這個參數字符串應該能標識這個文檔。PL/SQL存儲過程必須按照標準的API格式來寫;默認值的實例如下所示:plsql:po_wf.show_req/po_req:2034;
- § 如果你想動態的生成一個PL/SQL文檔,你可以把文檔標識定義成一個標記替換,然后使用其它單據類型屬性的值替換,例如:plsql:po_wf.show_req/item_attr1:&item_attr2;
- § 如果想指定一個由外部文檔管理系統管理的文檔,可以在默認值里輸入如下格式的信息:DM:<node_ID>:<document_ID>:[version];
- § 選擇"確定"保存你的修改。
2.3流程(Process)
流程就是業務流程的流轉規則。流程包括兩部分:流程里包含的活動和各個活動在不同條件下的流轉關系。在定義流程的時候,因為流程里的活動可能有不同的返回結果,我們需要把不同結果的處理活動和結果聯系起來,另外在OracleERP里還定義了一些標準的返回結果(例如超時),你在定義流程的時候,也可以對這些內嵌的返回結果進行處理。在流程實例流轉的時候,流程里的活動有自己相應的狀態,工作流引擎得到活動的狀態改變信息或活動返回結果之后,按照你定義的流程流轉規則控制流程的流轉。流程必須屬于一個單據類型。
流程定義里有一個標志屬性"是否可運行標志",如果一個流程是可運行的,則可以在窗體上可以直接調用,否則該流程只能作為一個子流程包含在其它的流程里面,工作流引擎在碰到流程活動的時候,會自動激活子流程,讓子流程流轉。
2.3.1在你畫流程圖之前,你必須先定義一個流程活動來表達流程圖:
- § 從瀏覽樹里選擇一個單據類型,右鍵Process并從菜單里選擇"New Process",在活動屬性頁上定義流程活動信息;
- § 流程活動必須有一個全部大寫的內部名稱和一個顯示名稱,你也可以輸入一段摘要信息來描述這個活動;
- § 指定流程活動的結果類型,流程活動可以不返回結果;
- § 為流程活動選擇一個圖標來標識它;
- § 選中Runnable,這樣你就可以把流程當作一個獨立的流程來運行,如果不選的話,定義的流程只能作為一個子流程在別的流程下運行;
- § 保存你的工作;
- § 選擇"Details"頁定義流程活動的詳細信息;
- § 選擇"Access"頁指定允許修改流程的訪問級別;
- § 保存你所作的修改;
- § 在瀏覽樹的"Processes"分支下回出現你新定義的流程,在瀏覽樹里用鼠標雙擊流程就可以查看和修改流程活動的信息。
2.3.2畫流程圖
在Oracle Workflow Builder里,流程圖采用一種圖形化的方式來顯示流程里的活動以及活動之間的轉移。在流程圖里用一個圖標來表示活動,用一個箭頭來表示活動之間的轉移。你可以從瀏覽樹里把一個活動拖拽到流程圖里,也可以直接在流程圖里創建一個活動,在流程圖里雙擊一個活動節點可以查看或修改節點的信息。通過在兩個活動之間畫一個箭頭來表示活動之間的轉移。
轉移在流程圖里使用一個箭頭表示的,它表示一個活動的結束以及另外一個活動的激活。如果一個活動的結果類型是None,則轉移表現為一個指向另外一個活動的箭頭,表示只要初始的活動一結束,就流向下一個活動。如果一個活動有返回結果類型,則你必須把轉移和活動的一個結果聯系起來,你也可以為定義了返回結果的活動定義下面的轉移類型:Default,Any,Timeout。在沒有任何轉移匹配完成結果時,工作流引擎執行默認的轉移;如果定義了一個人以的轉移,則不論活動的返回結果是什么,工作流引擎就執行這個轉移,這樣可以保證你除了在工作流里執行和放返回結果對應的活動外,還可以執行一個通用的活動。如果一個活動在完成之前已經超時,則工作流引擎執行超時轉移。一個活動的返回結果可以有多個轉移來進行并行處理。
(1)增加一個節點
- § 在開始畫流程圖之前,你必須先顯示流程活動的流程窗口,你可以通過以下的方式顯示流程窗口:在瀏覽樹里雙擊一個定義好的流程活動;選擇一個定義好的流程活動并按下Ctrl+E;選擇一個流程活動,并從編輯菜單里選擇流程詳細信息;使用快速啟動向導創建一個新的流程。
- § 可以通過下面的方式創建一個節點:從瀏覽樹里拖拽一個活動;選擇New Function、New Notification、New Process工具欄按鈕創建一個節點;在彈出菜單里選擇Create Activity創建一個新的節點;
- § 按住鼠標右健并把鼠標從一個活動拖到另一個活動就在兩個活動之間創建了一個轉移;
- § 如果來源活動定義了放回結果類型,則需要把轉移和一個結果聯系起來;
- § 你可以在流程圖里進行Copy和Paste;
(2)定義一個節點
- § 打開流程活動的流程窗口;
- § 使用工具欄按鈕創建一個新的活動;
- § 在單據類型域里,選擇一個單據類型;
- § 采用下面的方式定義節點的剩余信息:選擇一個已定義活動的內部名稱或顯示名稱,Workflow Builder會自動顯示出原來定義的信息;另外你也可以使用新建按鈕來創建一個新的活動,并根據活動的類型分別定義它們的信息,注意,在流程圖里說做的修改都會反映到瀏覽樹里的活動信息里;
- § 選擇"Node"頁來定義節點的特定信息,為節點指定一個標簽,因為一個活動在一個流程里可能有多個實例,可以通過標簽來區分同一個活動的不同實例;
- § 指定節點是否為一個開始或結束節點;
- § 如果流程有一個接過類型,你必須為結束節點指定一個最終的結果;
- § 你可以提供一段注釋信息供自己察看;
- § 對一個通知或一個子流程活動,你可以規定該活動節點是否必須在規定的時間之內完成;
- § 對一個通知節點來說,你可以覆蓋同志消息的優先級,另外需要給通知活動指定一個執行者,這是一個角色;
- § 保存你的修改;
- § 如果節點是一個函數或通知活動,并且這個活動有參數,你可以選擇節點屬性頁給這些活動屬性賦值;
如果這個節點是一個子流程,則一個子流程的標識會出現在子流程節點圖標上。
- (3)定義活動屬性值
活動屬性值主要是別PL/SQL存儲過程服務的,這個存儲過程被函數或通知活動調用。
- § 顯示屬性值頁;
- § 選擇一個屬性;
- § 在值區域里,輸入這個屬性的值,這個值可以是一個常量也可以是一個對單據類型屬性的引用。注意,這個值的類型必須和活動屬性的類型以及存儲過程參數的類型保持一致;
- § 保存你的修改。
轉載于:https://www.cnblogs.com/wanghang/p/6299261.html
總結
以上是生活随笔為你收集整理的Oracle WorkFlow(工作流)(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim下php文件中自动缩排html代码
- 下一篇: jmeter中timeout值怎么设置_