2011年2月17日 星期四

[BPMN 2.0] Process平行執行的應用

BPMN 本身支援Parallel Gateway讓開發人員能夠平行處理多個Activity,你可以拉出如下圖所示的Process同步處理MyTask1與MyTask2:


這樣的表示方式很簡單,但是我們有時候會遇到另外一個需求,要怎麼在run-time動態產生多條平行執行的流程?照上圖的作法,必須在design time就設計好執行路徑的數量。

和Loop的情形一樣,我們還是可以使用subprocess的方式來處理。

使用subprocess activity,我們可以簡單拉出下示流程:


Double-click subprocess activity,編輯對話框中的Loop Characteristics Tab


平行執行的時候,記得在Loop Characteristics中選擇 "MultiInstance",並且不要勾選最下方的 "Is Sequential" 選項。

此時的 Loop Cardinality 代表你需要動態幾個平行的instance處理,我在此放入了一個變數parallelCount,你可以自行設計如何取得此數值。

2011年2月11日 星期五

[Oracle BPM/SOA 實務] Muli-Tier 審核流程的設計

來看看在人工簽核作業中常常遇到的情境吧,我們該怎麼設計一個需要兩階層簽核的流程:


假設有上圖所示的組織架構,Tim與Leon的直屬長官是Kenneth;而Kenneth的直屬長官是Gary,由Tim所完成的工作在流程中需要由上面兩層的長官審核才能繼續往下走。首先,你的BPM使用者要有這樣的組織架構在內,你可以參考這篇【如何增加使用者至BPM Server中】先把你所需要的使用者建立起來。

但是,明眼的你應該會發現,在這裡LDAP tree中的使用者是看不出階層關係的,我們該怎麼指定上圖那樣的關係哩?

2011年2月7日 星期一

隨筆

寫了幾篇技術文章才知道寫這些東西多花時間...  (汗..)

有幾個想法和大家分享:

  • 這是個不負責任的部落格:我所發表的所有技術文章只代表我個人的經驗與產品使用方式,一切的一切都請以原廠技術文件為主 (即使可能會有錯...)
  • 這是個文筆不好的部落格:自論文以後,我應該沒有寫過那麼多字的文章了吧... 請見諒所有的文字不通暢與用語粗俗。
  • 這是個沒啥組織的部落格:各文章與相關產品的發表順序並不一定,基本上都是小弟想到甚麼就寫甚麼,也有可能是剛好測試或專案用到的功能記錄,若是從頭開始學習的人,建議你可以先參考小弟的"第一個"系列,並配合其他的文件或書籍服用。
  • 這是個期待溝通的部落格:有任何的疑問與幹譙或是希望能看到的文章,請歡迎留言或透過我的email:yenting.wu@gmail.com反應。
感恩!

[Oracle SOA 應用] 呼叫外部Java類別

開春第一砲,來看看我們在流程中怎麼呼叫一個已經寫好的Java Class。

我就不step-by-step的描述每一個步驟,請你自己新增一個新的SOA專案,並且產生一個Empty Composite。

由於呼叫Java元件屬於系統流程整合的部分,因此,我們使用BPEL流程做為整合的範例。請在Component Palette中托放一個BPEL Process進入Composite中央。再彈出的對話視窗中指定此流程的採用BPEL 1.1或2.0、名稱、同步與非同步、Service名以及是否對外提供SOAP服務:


當回到你的composite editor,你可以看到現在你有個BPEL的Process,並且有個對外的service介面:


2011年1月28日 星期五

[BPMN 2.0] 迴圈的使用

一般來說,由於BPMN Notation是unstructure的表示法,因此不像是BPEL語言,會需要像是While這樣的語法來implement迴圈,通常都是用直接拉回去配合上Exclusive OR的Gateway就可以做到效果:

如上圖所示,就是最基本的迴圈。

BPMN也支援Subprocess Loop的方式來執行迴圈,你可以將需要重複多次執行動作的Activity放在一個subprocess之中,就可以不需要自己去implement上面那些變數的初始化或者是Exclusive OR Gateway了。

下面是個範例:

Subprocess展開前


Subprocess展開後



看起來應該比較簡單了吧?
該怎麼設定迴圈的執行次數,內部變數...等資料呢?

Double-click Subprocess,選擇Loop Characteristics的tab,點選Loop


選擇Loop Condition右手邊的那個小icon打開Express Builder


看一下左邊的Variable區,你會發現你的Subprocess "Loop Demo" 中自動有一個loopCounter的變數,簡單的說,這個變數是扮演一般我們 for-loop 中間的 "i" 的角色。

你就可以和寫for-loop迴圈一樣去指定 loopCounter <= count,來定義迴圈的執行條件了!




[Oracle BPM/SOA 基礎] 第一個BPM流程

現在,我們來做一個簡單的BPM流程吧!

背景設定為一個很簡單的採購流程,使用者上網提出採購申請,之後經過主管同意後,流程會將此採購資料寫入檔案供採購系統抓取,夠簡單吧? 這個簡單流程可以提供各位在一個BPM平台上面的開發是如何進行。

開始之前,請先確定你的BPM開發環境已經完成安裝與設定,你可以參考小弟先前文章完成此步驟。

啟動你的JDeveloper,不管你喜歡與否,這個IDE是Oracle BPM產品流程設計現在唯一的工具,試著熟悉他吧!

新增應用程式專案

選擇 "New Application",會有一彈出的對話框讓你輸入包括Application Name、Directory、package prefix等資訊,特別注意的是JDeveloper是一個general purpose的IDE,所有Oracle產品應用都是透過這IDE開發,所以在BPM專案的開發上面,Application Template記得要選"BPM Applicaiton"。



2011年1月27日 星期四

[Oracle BPM/SOA 基礎] 如何增加使用者至BPM Server中

在Oracle BPM中,參與流程的使用者需先被定義於BPM Server之中,而BPM的使用者資料來源為何哩? 來自於底層的WebLogic Server的security realm!!

WebLogic security realm中使用者資料可以來自很多地方,預設是使用WebLogic本身所embbed的一個LDAP server,當然你也可以config WebLogic讓他連到外面的LDAP Server或是特定Schema的database之中,但這不在我們的討論範圍之中,此文章我要介紹你如何在自己的開發環境之中,使用WebLogic embbed LDAP server,並新增測試所需要的使用者在此server之中。

首先,先把使用者給產生出來。連入WebLogic console,新增你所需要的使用者。(不知道怎麼做嗎? 提示一下:"安全範圍" --> "myrealm" --> 使用者與群組 --> "使用者" --> "新建")

接下來,這個使用者有些BPM所需要的資訊是存放在LDAP tree之中的(如:工作通知時的使用者email帳號、使用者顯示的名稱、使用者的直屬上司是誰...等),既然他是LDAP Server,我們就應該可以透過標準的LDAP連進去修改他囉? 沒錯! 這是可以的,只是要解除預設的封印!

首先你需要連接到WebLogic Console,在網域結構中按下你的bpm_domain,在右方的頁簽中選擇 "安全性" --> "嵌入式LDAP"。


將你喜歡的密碼打入【證明資料】與【確認證明資料】,儲存之後重新開啟server。

接下來,你需要一個LDAP browser讓你連接進WebLogic embbed LDAP server,我個人是使用JXplorer,你可以從這裡下載免費的版本。

WebLogic embbed LDAP server連接的方式是走標準的WebLogic Server的IP與port,預設7001(請根據你的環境修改),連接的DN為cn=Admin,密碼是你剛才所設定在【證明資料】的值。


接下來,你就可以針對你剛才所新增的使用者,另外增加其他的必要資訊了!