[Develop]Lab5-BussinessRule

[Develop]Lab5-BussinessRule

Lab5、BussinessRule

假如過去你究是個開發人員,你因該也遇過一些類似的情形。過去開發的程式,在程式碼裡面有一些商務邏輯。例如有時候

會撰寫一些程式,當什麼條件成立的時候做什麼;當什麼條件不成立的時候又要做什麼 !! 這因該是非常經常遇到的問題。當

金額小於5000的時候不給老闆簽核,當金額大於5000時要給老闆簽核。這樣的邏輯在開發中因該是非常的常見。但是大家因該

也都有一種經驗就是,當前人甚至自己開發的程式久了,有時候商務規則的變動,就是開發人員的痛苦所在。

( 商務規則是經常性的被調整,企業總是要能很迅速的跟上外在環境的步伐而調整 )。常常遇到 User 反應,只是將本來的

1000元改成5000元,有很難嗎 ? 為什麼要這麼久阿 ? 開發人員總是跟使用者有一個鴻溝在,我常常覺得這是一個開發人員一直

無法說出的痛。事實上商業程序本來就是會經常變動,使用者提出要求也是合情合理。而商務規格的變動,1000元變成5000

元,也確實因該要很簡單才對。但是當一切沒有好的Tool協助的時候,商務規則就變的無比的艱辛了。這個Lab 我們要來探索一下

Biztalk 一個很彈性的架構,商務規則編輯器。用來幫助我們很彈性的建立商務邏輯,以及維護商務邏輯的版本。使以往的商務邏輯

變更的需求能更簡單的被滿足。

※ 這個範例我們要模擬一個簽核的動作;概念很簡單,當你傳入一張申請單,上面會有金額。商務規則編輯器會依照金額來判斷,當金額小於

一萬元時,簽核結果為同意。而當金額大於一萬元時,簽核結果為不同意。


建立一個空白的Biztalk專案。

首先建立一個空白的 Biztalk Server 專案,我替他取名為 [ Lab5_BussinessRule ]。

clip_image001

在專案中我們新增一個 [ 結構屬性 ] 的項目,也就是一份 XML Schema 。我們替他命名為 [ Form.xsd ]。

clip_image002

再剛剛建立的 [ Form.xsd ] 檔案中我們建立兩個子項目,第一個子項目為 Amount,型態我們選擇 int 。這個欄位是要用來提供給商務規則編輯器

判斷金額用的。接著我們新增第二的子項目 [ Result ],型態是 String。這個欄位是用來讓商務規則編輯器回覆簽核結果用的欄位。

clip_image003


商務流程規則編輯。

接著我們來開啟商務規則編輯器。在Windows 桌面上我們在程式集中找到 Biztalk Server 的介面,選擇裡面的 [
商務規則編輯器 ]。

clip_image004

進到了商務規則編輯器後,我們看到左邊有兩個區塊。[ 原則總管 ] 與 [ 事實總管 ]。首先我們要來認識這兩個區域的功用。我們先探到一下所謂的

商用邏輯的概念。當我們在跟需求單位(可能是會計部、財務部….等)討論需求時,需求單位可能會要求我們協助開發一些程式或是系統。我們在

需求訪談過程中常常可以聽到下列的語言,當金額大於多少時要給誰簽、當請假天數超過三天時要怎麼樣、當產品過保固時要怎麼處理、

當庫存小於多少時要怎麼處裡………….等。當…..時要…..處理,這種對話方式出現時,就是商務規則編輯器派上用場的時候。

當 ??? 時候,要 ??? 處理,再商務規則編輯器中,??? 的地方就是要定義所謂的詞彙了。在這邊我們的範例是,當金額大於一萬時,簽核結果為不同意。

當金額小於一萬時,簽核結果為同意。也就是判斷詞彙有兩個,金額 與 簽核結果。因此我們要在這裡設定兩個辭彙。

clip_image005


商務流程規則編輯
– 新增詞彙 。

在詞彙的地方按下滑鼠郵件,選擇[ 新增詞彙 ]。我們將詞彙命名為 [ Lab5_BussinessRule ]。

clip_image006

clip_image007

在我們新增出來詞彙的地方按下滑鼠右鍵來 [ 新增定義 ] 。

clip_image008

會進入到 [ 歡迎使用詞彙定義精靈 ],這邊我們選擇 [ XML文件項目或屬性 ],然後按下一步來繼續動作。

clip_image009

這時我們先定義名稱為 [ 金額 ],並且按下 [ 瀏覽 ] 按紐。

clip_image010

選擇到我們剛剛建立的 Biztalk專案中那個 Form 的 Xml Schema 檔案。

clip_image011

在跳出的 [ 選取繫結 ]部分我們選擇剛剛在 XML Schema裡面的 [ Amount ],也就是金額會運用XML文件中的這個欄位值來作為判斷。

選擇完畢後按下 [ 確定 ]。

clip_image012

回到 [ XML 文件項目或屬性 ],在最下方我們要設定 [ 執行取得作業 ]。因為要從XML文件中取得這個元素內容的值來提供給

商務流程規則編輯器作為判斷。設定完成後,就新增好了金額的定義了。

clip_image013

接著再新增第二個定義 [ 簽核結果]。

clip_image008[1]

進到 [ XML 文件項目或屬性 ] ,在定義名稱中我們打上[ 簽核結果 ]。然後按下 [ 瀏覽 ]。依照剛剛的步驟選擇到 Biztalk專案中的

XML Schema檔案,並且這次選擇 [ Result ] 元素。

clip_image014

回到 [ XML 文件項目或屬性 ],這邊因為我們要對簽核結果的內容寫入同意或是不同意的簽核結果。所以在下方的選取作業上我們要輸入

[ 執行設定作業 ]。

clip_image015

在詞彙設定精靈中我們先使用預設值,直接按下 [ 完成 ]。

clip_image016

當兩個定義都完成後,我們在版本的地方按下[ 發佈 ] 來發佈這個版本的詞彙。

clip_image017


商務流程規則編輯
– 新增原則。

再來我們要看到原則的地方,剛剛我們設定了詞彙。而我們在前面有說到商務規則的部份會遇上,當….的時候,要…如何處理。

而我們已經設定好詞彙了,接著就是當 ??? 的時候。例如: 當金額大於多少、當請假大於幾天、當保固期過後..等。因此接著我們就要來輸入所謂的

[ 判斷式 ]。我們在原則的地方打上 [ 新增原則 ]。

clip_image018

在出現 [ 版本 1.0 ]的地方按下滑鼠右鍵 [ 新增規則 ]。

clip_image019

在新建出來的版本的地方,我們新增一個規則。可以看到右邊出現了兩個區域,[ 條件區域 ] 與 [ 動作區域 ]。條件區域就是建立商務規則編輯器中

的條件式,可想成以往在撰寫程式中的 IF 部分。而動作區域也就是撰寫程式中的 Then 了。

clip_image020

在條件的地方我們按下右鍵,選擇 [ 述詞 ] 中的 [ 大於或等於]。接著會看到條件部分出現了右下圖的畫面,這部份因該可以很直覺的瞭解。引數1

就是要置放我們剛剛建立的 [ 金額 ],而輸入值就是比對基準。也就是輸入當金額大於等於10000,這樣的一個判斷式。

clip_image021

clip_image022

這邊我們直接將左邊的詞彙中的[ 金額 ] 拖拉到條件式中的引數里,在後面的輸入值中輸入10000。接著將詞彙中的 [ 簽核結果
]拖拉到 [ THEN 區域 ]

的動作中,然後在後面打上 [ 不同意 ]。表示當金額大於10000時,這個動作是申請是不被同意的。

clip_image023

繼續在原則中建立第二個規則,當金額小於一萬元的規則。按照上面的步驟,當金額小於一萬時,審核結果為 [同意]。

clip_image024

設定完畢後我們將這個規則發佈與部署。

clip_image025


回到Biztalk
專案。

回到 Biztalk 專案中,我們新增一個 Biztalk 協調流程。我名稱取為 [ Lan5_BussinessRule ]。

clip_image026

在協調流程中我們建立一個 [ 新訊息 ],訊息內容指定為我們建立的 Form.xsd 。

clip_image027

clip_image028

clip_image029

在協調流程中我們拉出三個元件,[ 接收元件]、[ 呼叫規則 ]、[ 傳送元件]。

clip_image030

然後點兩下 呼叫規則的元件,進入呼叫規則的組態視窗。在 [ 選取你要呼叫的商務原則中 ] 選擇我們剛剛建立的原則,在下面原則參數的部份

選擇我們的訊息。這邊是指定你要送入哪個訊息到這個商務規則之中。

clip_image031

clip_image032

接著我們新增兩個連接埠,連接接收與傳送元件。這部份不多說明,要是您不知道這部份如何設定,可以參考 Biztalk範例的 Lab1。

clip_image033

都設定完成後,我們建置專案。運氣好的話會看到建置成功。建置成功後就部署專案。

( 要記得要選擇今要組件喔 !!! 如果不知道金要組件是什麼的話 ? 也請參考Biztalk Lab1。)

clip_image034


新增實體連接埠。

新增接受埠,選擇 [ 單向接收埠 ]。

clip_image035

clip_image036

我命名為 [ Lab5_ReceiveLocationPool ]。

clip_image037

在接收埠下我新增一個接收位置 [ Lab5_ReceivePort ]。傳輸類型我指定為 [ FILE ] ,並且點選位置URI來指定檔案接收位置。而接收管線選擇

預設管線 [ DefaultPiplines ]。按下確定後就新增完成了。

clip_image038

接著新增一個傳送埠。

clip_image039

傳送類型也選擇,[ FILE ]。並且指定檔案要傳送的實體位置。

clip_image040

接著到左邊一般的區域,設定傳送管線也是 [ DefaultPiplines ]。

clip_image041

接著我們到協調流程中來繫結實體連接位置。

clip_image042

在傳送位置與接收位置選擇我們剛剛建立的那兩個連接埠。

clip_image043

然後在主控件的地方選擇 [ BiztalkServerApplication ]。( 也可以選擇你自己建立的其他主控件 )。

clip_image044

繫結完成後我們啟動協調流程。

clip_image045


測試。

接著我們準備一份 XML文件,內容如下圖。在金額的部份我們輸入5000元。

clip_image046

將文件放到剛剛我們建立的實體接收埠位置,接著你會看到這個接收位置的檔案被Biztalk收走。

clip_image047

clip_image048

到傳送實體位置去,會看到產出了一份檔案。

clip_image049

點兩下後可以看到這個檔案的 [ Result ] 元素中的文字被改成 同意 。這是由商務規則編輯器在判斷金額後所做的修改。

clip_image050

我們再做一個金額大於10000元的文件測試,一樣放入你的檔案實體接收位置。

clip_image051

我們看到結果可以發現檔案被商務規則編輯器給修改成不同意了。

clip_image052