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:

 

这里的value代表的是货物的数量, 业务规则引擎会根据这个数量修改state的值,来确认该订单是否达到了需要运输部门运输的标准. 根据schema 就可以建立业务规则引擎逻辑了,因为业务规则引擎是依赖于schema,而被流程调用的.

打开业务规则编辑器” :


 

这里分为策略和事实部分:

事实部分定义的是词汇,数据库(数据库引用),.net (Dll引用).词汇里定义的一个个属性可以对应到schema里的字段,用做业务策略的元素.

这里可以引用刚才建立的订单schemavalue state 字段,分别进行取值和负值操作.

右键词汇”  à添加新词汇à命名为”testRule”

然后右键版本 1.0” à添加新定义


 

在新的定义中选择xml文档元素或属性,浏览至刚建立的schema文件,并选中。
之后展开root节点,选中value之后,在名称项中写入value,并选中get操作。
重复上面操作将state节点属性也选入,并选取set操作。





 

在词汇定义的时候 ,可以定义两种词汇:get"set 分别代表对该字段属性取值和对该属性字段赋值的操作。
操作之后的结果


 

策略是业务规则的逻辑,结构分为条件,和将要执行的操作.可以用词汇元素作为判断依据,使用常量谓词,函数来完成判断.

这个时候就可以开始定义规则了 :

 

创建规则版本1.0的内容:

 

判断当值的内容小于501的时候,状态字段改写为”<500”.
测试当前的规则:


 输出结果:
 OK 没有问题.

 

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

FACT ACTIVITY 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Operation: Assert
Object Type: TypedXmlDocument:tempSchema
Object Instance Identifier: 
45146773

FACT ACTIVITY 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Operation: Assert
Object Type: TypedXmlDocument:tempSchema:
/* [local - name() = ' Root '   and  namespace - uri() = ' http://ruleProject.tempSchema ' ]
Object Instance Identifier: 
3667779

CONDITION EVALUATION TEST (MATCH) 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Test Expression: TypedXmlDocument:tempSchema:
/* [local - name() = ' Root '   and  namespace - uri() = ' http://ruleProject.tempSchema ' ].value  <   501
Left Operand Value: 
1
Right Operand Value: 
501
Test Result: True

AGENDA UPDATE 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Operation: Add
Rule Name: Rule1
Conflict Resolution Criteria: 0

RULE FIRED 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Rule Name: Rule1
Conflict Resolution Criteria: 0

FACT ACTIVITY 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Operation: Retract
Object Type: TypedXmlDocument:tempSchema
Object Instance Identifier: 
45146773

FACT ACTIVITY 
2008 - 5 - 7   16 : 16 : 03
Rule Engine Instance Identifier: 696d69d5
- 463c - 44bd - aec4 - b6d27a8a1426
Ruleset Name: testRuleP
Operation: Retract
Object Type: TypedXmlDocument:tempSchema:
/* [local - name() = ' Root '   and  namespace - uri() = ' http://ruleProject.tempSchema ' ]
Object Instance Identifier: 
3667779

 

在流程中对规则引擎进行引用:
别忘记首先要引用一个规则引擎的DLL : Microsoft.RuleEngine.dll
流程如下:



 

规则部分定义: 这里的参数是流程里的消息,因为规则引擎的处理是针对消息进行的.



 

部署工程,测试工程:

绑定接收端口和发送端口:
传入消息:

< ns0:Root  xmlns:ns0 ="http://ruleProject.tempSchema" >
  
< value > 1 </ value >
  
< state > 0 </ state >
</ ns0:Root >

传出消息: OK 搞定 ;)

<? xml version="1.0" encoding="utf-8" ?>
< ns0:Root  xmlns:ns0 ="http://ruleProject.tempSchema" >
  
< value > 1 </ value >
  
< state > &lt; 501 </ state >
</ ns0:Root >

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值