天天看點

BizTalk 如何使用業務規則引擎 (Rule Engine)

http://msdn.microsoft.com/zh-cn/library/aa560470(BTS.10).aspx

http://msdn.microsoft.com/zh-cn/library/aa561951(BTS.10).aspx

http://www.blogjava.net/zolly/archive/2009/05/20/RuleEngine.html

http://www.cnblogs.com/muyanpeng/archive/2008/05/08/1188774.html

http://hi.baidu.com/dburu/blog/item/fda69d13f46d51d8f7039ef9.html

http://www.blogjava.net/Jeffery001/archive/2008/11/04/238582.html

http://www.cnblogs.com/linbc/archive/2009/06/29/1512903.html

http://www.cnblogs.com/zhoujg/archive/2006/10/29/543792.aspx

======================================================

http://www.cnblogs.com/muyanpeng/archive/2008/05/07/1187220.html

BizTalk中的業務規則引擎的功能和特點是在不改變流程,不重新部署工程的情況下,動态的配置政策資訊,修改政策邏輯.達到動态的業務配置目的.

舉一個簡單的例子.一個銷售機構銷售一種商品,當該商品的數量小于100的時候不需要運輸部門負責運輸,則不需要通知運輸部門.但是當大于100的時候則需要運輸部門負責運輸.但有的時候這個100的數量是可變的,有的時候是150,有的時候甚至是200. 但是這個數量如果寫在了BizTalk流程裡,就寫死了. 這個時候我們就可以通過業務規則引擎來幫助我們在流程外配置這個屬性.

實作 業務規則引擎DEMO:

訂單的schema:

BizTalk 如何使用業務規則引擎 (Rule Engine)

這裡的value代表的是貨物的數量, 業務規則引擎會根據這個數量修改state的值,來确認該訂單是否達到了需要運輸部門運輸的标準. 根據schema 就可以建立業務規則引擎邏輯了,因為業務規則引擎是依賴于schema,而被流程調用的.

打開 ”業務規則編輯器” :

BizTalk 如何使用業務規則引擎 (Rule Engine)

這裡分為政策和事實部分:

事實部分定義的是詞彙,資料庫(資料庫引用),.net 類(Dll引用).詞彙裡定義的一個個屬性可以對應到schema裡的字段,用做業務政策的元素.

這裡可以引用剛才建立的訂單schema的value 和 state 字段,分别進行取值和負值操作.

右鍵 ”詞彙”  à ”添加新詞彙”à命名為”testRule”

然後右鍵 ”版本 1.0” à ”添加新定義”

BizTalk 如何使用業務規則引擎 (Rule Engine)

在新的定義中選擇xml文檔元素或屬性,浏覽至剛建立的schema檔案,并選中。

之後展開root節點,選中value之後,在名稱項中寫入value,并選中get操作。

重複上面操作将state節點屬性也選入,并選取set操作。

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

在詞彙定義的時候 ,可以定義兩種詞彙:get"set 分别代表對該字段屬性取值和對該屬性字段指派的操作。

操作之後的結果

BizTalk 如何使用業務規則引擎 (Rule Engine)

政策是業務規則的邏輯,結構分為條件,和将要執行的操作.可以用詞彙元素作為判斷依據,使用常量謂詞,函數來完成判斷.

這個時候就可以開始定義規則了 :

BizTalk 如何使用業務規則引擎 (Rule Engine)

建立規則版本1.0的内容:

BizTalk 如何使用業務規則引擎 (Rule Engine)

判斷當值的内容小于501的時候,狀态字段改寫為”<500”.

測試目前的規則:

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

 輸出結果:

 OK 沒有問題.

BizTalk 如何使用業務規則引擎 (Rule Engine)

RULE ENGINE TRACE  for  RULESET: testRuleP  2008 - 5 - 7   16 : 16 : 02

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

FACT ACTIVITY  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Operation: Assert

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Type: TypedXmlDocument:tempSchema

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Instance Identifier:  45146773

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

FACT ACTIVITY  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Operation: Assert

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Type: TypedXmlDocument:tempSchema: /* [local - name() = ' Root '   and  namespace - uri() = ' http://ruleProject.tempSchema ' ]

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Instance Identifier:  3667779

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

CONDITION EVALUATION TEST (MATCH)  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Test Expression: TypedXmlDocument:tempSchema: /* [local - name() = ' Root '   and  namespace - uri() = ' http://ruleProject.tempSchema ' ].value  <   501

BizTalk 如何使用業務規則引擎 (Rule Engine)

Left Operand Value:  1

BizTalk 如何使用業務規則引擎 (Rule Engine)

Right Operand Value:  501

BizTalk 如何使用業務規則引擎 (Rule Engine)

Test Result: True

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

AGENDA UPDATE  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Operation: Add

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Name: Rule1

BizTalk 如何使用業務規則引擎 (Rule Engine)

Conflict Resolution Criteria: 0

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

RULE FIRED  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Name: Rule1

BizTalk 如何使用業務規則引擎 (Rule Engine)

Conflict Resolution Criteria: 0

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

FACT ACTIVITY  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Operation: Retract

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Type: TypedXmlDocument:tempSchema

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Instance Identifier:  45146773

BizTalk 如何使用業務規則引擎 (Rule Engine)
BizTalk 如何使用業務規則引擎 (Rule Engine)

FACT ACTIVITY  2008 - 5 - 7   16 : 16 : 03

BizTalk 如何使用業務規則引擎 (Rule Engine)

Rule Engine Instance Identifier: 696d69d5 - 463c - 44bd - aec4 - b6d27a8a1426

BizTalk 如何使用業務規則引擎 (Rule Engine)

Ruleset Name: testRuleP

BizTalk 如何使用業務規則引擎 (Rule Engine)

Operation: Retract

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Type: TypedXmlDocument:tempSchema: /* [local - name() = ' Root '   and  namespace - uri() = ' http://ruleProject.tempSchema ' ]

BizTalk 如何使用業務規則引擎 (Rule Engine)

Object Instance Identifier:  3667779

BizTalk 如何使用業務規則引擎 (Rule Engine)

在流程中對規則引擎進行引用:

别忘記首先要引用一個規則引擎的DLL : Microsoft.RuleEngine.dll

流程如下:

BizTalk 如何使用業務規則引擎 (Rule Engine)

規則部分定義: 這裡的參數是流程裡的消息,因為規則引擎的處理是針對消息進行的.

BizTalk 如何使用業務規則引擎 (Rule Engine)

部署工程,測試工程:

綁定接收端口和發送端口:

傳入消息:

BizTalk 如何使用業務規則引擎 (Rule Engine)

< ns0:Root  xmlns:ns0 ="http://ruleProject.tempSchema" >

BizTalk 如何使用業務規則引擎 (Rule Engine)

   < value > 1 </ value >

BizTalk 如何使用業務規則引擎 (Rule Engine)

   < state > 0 </ state >

BizTalk 如何使用業務規則引擎 (Rule Engine)

</ ns0:Root >

BizTalk 如何使用業務規則引擎 (Rule Engine)

傳出消息:

BizTalk 如何使用業務規則引擎 (Rule Engine)

 OK 搞定 ;)

BizTalk 如何使用業務規則引擎 (Rule Engine)

<? xml version="1.0" encoding="utf-8" ?>

BizTalk 如何使用業務規則引擎 (Rule Engine)

< ns0:Root  xmlns:ns0 ="http://ruleProject.tempSchema" >

BizTalk 如何使用業務規則引擎 (Rule Engine)

   < value > 1 </ value >

BizTalk 如何使用業務規則引擎 (Rule Engine)

   < state > &lt; 501 </ state >

BizTalk 如何使用業務規則引擎 (Rule Engine)

</ ns0:Root >

BizTalk 如何使用業務規則引擎 (Rule Engine)