Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|产品中心下载开始设置Jazz Build
您现在的位置: 天极网 > 开发频道 > BizTalk 如何使用业务规则引擎 (Rule Engine)
全文
群乐:SOA

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

2008-05-09 09:00 作者: muyanpeng 出处: 天极网 责任编辑:>dizzarz

  BizTalk中的业务规则引擎的功能和特点是在不改变流程,不重新部署工程的情况下,动态的配置策略信息,修改策略逻辑.达到动态的业务配置目的.

  举一个简单的例子.一个销售机构销售一种商品,当该商品的数量小于100的时候不需要运输部门负责运输,则不需要通知运输部门.但是当大于100的时候则需要运输部门负责运输.但有的时候这个100的数量是可变的,有的时候是150,有的时候甚至是200. 但是这个数量如果写在了BizTalk流程里,就写死了. 这个时候我们就可以通过业务规则引擎来帮助我们在流程外配置这个属性.

  实现 业务规则引擎DEMO:

  订单的schema:

  

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

  打开 ”业务规则编辑器” :

  

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

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

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

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

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

  

  在新的定义中选择xml文档元素或属性,浏览至刚建立的schema文件,并选中。

  之后展开root节点,选中value之后,在名称项中写入value,并选中get操作。

  重复上面操作将state节点属性也选入,并选取set操作。

  

  

  

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

  操作之后的结果

  

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

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

  

  创建规则版本1.0的内容:

  

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

  测试当前的规则:

  

  

  输出结果:

 

以下是引用片段:
 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
  
  OK 没有问题.

  在流程中对规则引擎进行引用:

  别忘记首先要引用一个规则引擎的DLL : Microsoft.RuleEngine.dll

  流程如下:

  

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

  

  部署工程,测试工程:

  绑定接收端口和发送端口:

  传入消息:

以下是引用片段:

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

  OK 搞定 ;)

原文连接:http://www.cnblogs.com/muyanpeng/archive/2008/05/07/1187220.html

共1页。 1
网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml