BizTalk 如何使用业务规则引擎 (Rule Engine)

时间:2022-02-03 23:29:07

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里的字段,用做业务策略的元素.

这里可以引用刚才建立的订单schemavalue 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)