使用 Microsoft Rules Composer 创建规则(预览版)
适用于:Azure 逻辑应用(标准)
重要
此功能为预览版,受 Azure 预览版补充使用条款约束。
规则控制有关业务流程运作方式的业务逻辑。 为了帮助你创建这些规则并用于 Azure 逻辑应用规则引擎项目,Microsoft Rules Composer 提供了用于创作规则集和词汇并控制其版本的可视化工具。
本操作指南概述了规则的工作原理,以及如何使用 Microsoft Rules Composer 创建规则。
先决条件
下载并安装 Microsoft Rules Composer。
如果你有一个要处理的现有规则集,则需要包含该规则集的 XML 文件。 如果没有这种规则集,本指南将介绍如何新建规则集,并将其另存为 XML 文件。
重要
如果现有 XML 文件依赖于任何 .NET 程序集,或者用于添加事实的程序集具有其他依赖项,请确保将所有这些文件保存在同一文件夹中,并且要保存在 Microsoft Rules Composer 的本地目录中。
什么是规则?
“规则”是声明性语句,其中包含一个条件和计算条件的多个操作。 如果结果为 true,规则引擎将执行一个或多个操作。 以下格式定义 Azure 逻辑应用规则引擎中规则的语法:
IF <条件> THEN <操作>
以下示例规则通过比较两个货币值与使用交易金额和折扣形式的数据或事实,确定是否执行交易并应用业务逻辑:
如果 (IF) 购买的金额大于一定数量,则 (THEN) 向客户提供额外的折扣
条件:包含应用于事实的一个或多个谓词的 true 或 false 布尔表达式。 谓词是包含动词的子句,陈述有关主题的内容。 在我们的示例中,谓词“大于”用于事实“购买的金额”。 此条件的计算结果始终为 true 或 false。 可以将谓词与逻辑运算符 AND、OR 和 NOT 组合在一起,形成潜在的长逻辑表达式,但计算结果始终为 true 或 false。
操作:操作是条件评估的功能结果。 满足规则条件时就会启动相应的操作。 在我们的示例中,提供额外的折扣是仅在条件为 true 时发生的操作,即如果 (IF) 购买的金额大于 $1,000。 操作通过调用方法、设置对象的属性或对 XML 文档执行“设置”操作,在 Azure 逻辑应用规则引擎中表示。
事实:事实是有关规则运作所在世界的分散信息。 在我们的示例中,金额和数量是事实。 事实可能源自许多源,例如事件系统、混合应用程序中的对象等。必须使用以下元素之一才能将事实馈送到 Azure 逻辑应用中的规则引擎中:
- .NET 对象,如方法、属性和字段。
- XML 文档,例如元素、属性和文档子节。
词汇:条件和操作中使用的事实的友好名称。 有关详细信息,请参阅《创建和管理词汇》。
下图和各部分介绍了条件、操作和事实如何组合在一起使用:
Microsoft Rules Composer
可以使用 Microsoft Rules Composer 创建、修改、保存规则并控制规则的版本。 也可以通过编程方式执行这些任务。 Rules Composer 包含以下 UI 元素:
窗口 | 说明 |
---|---|
规则集资源管理器 | 创建包含一个或多个规则的规则集。 |
条件编辑器 | 为规则生成条件。 |
操作编辑器 | 生成在条件计算结果为 true 时运行的操作。 |
事实资源管理器 | 浏览 XML 和 .NET 事实,然后将这些事实拖动到条件编辑器或操作编辑器。 |
创建和管理规则集
规则集是基于域、边界上下文或任何业务边界而组合在一起的一套规则。 若要管理规则存储中的规则集和规则,请使用规则集资源管理器。 可以创建、修改、测试或删除规则集及其规则。
在“Microsoft Rules Composer”中,打开“规则存储”菜单,然后选择“加载”。
查找并选择包含你要打开的规则存储的 XML 文件。
在“规则集资源管理器”窗口中,打开“规则集”快捷菜单,然后选择“添加新规则集”。
Microsoft Rules Composer 创建一个新的空规则集,其规则集版本号为 1.0(默认版本)。
保存规则集。 在“规则存储”菜单上,选择“保存”,为规则集创建 XML 文件。
下表介绍了可用于处理规则集的其他规则集资源管理器命令:
任务 | 命令 |
---|---|
新建规则集。 | 添加新规则集 |
新建所选规则集的空版本。 可以从其他版本复制规则并将它们粘贴到新版本中。 | 添加新版本 |
将所选规则集版本复制到剪贴板。 | 复制 |
将规则集版本及其内容粘贴到选定的规则集中。 | 粘贴 |
删除所选的规则集版本。 | 删除 |
删除所选的规则集及其所有版本。 | 在父规则集级别删除 |
重新加载所选规则集版本及其规则,可以选择放弃当前该版本中的全部更改并从规则存储恢复内容。 | 重新加载 |
保存对所选版本及其规则所做的所有更改。 | 保存 |
在与规则引擎项目一起使用之前测试所选的规则集版本。 | 测试规则集 |
下表描述了规则集版本的属性:
属性 | 值 |
---|---|
Name | 规则集的名称。 注意:只能通过更新规则集的 Name 属性而非规则集版本来更改此值。 |
当前版本 | 规则集资源管理器中当前选择的规则集的版本。 |
事实检索器 | 用于向规则集版本提供事实的事实检索器。 Microsoft Rules Composer 支持生成功能,并使用事实检索器提供事实。 有关详细信息,请参阅以下文档: - 对规则集执行高级任务 - 生成事实创建器和检索器 |
最大执行循环深度 | 引发执行循环异常前允许的最大正向链接算法深度。 默认的循环次数是 65,536。 |
转换持续时间 | 引发转换超时异常前允许的最长规则转换时间。 默认持续时间为 60,000 毫秒。 |
翻译 | 用于翻译规则的翻译器。 Microsoft Rules Composer 目前仅支持默认内置翻译器,但也支持通过扩展来添加更多翻译器。 |
版本说明 | 当前版本的说明。 |
有关使用规则集的详细信息,请参阅《对规则集执行高级任务》。
创建和管理规则
在“Microsoft Rules Composer”中,从“规则存储”菜单中选择“加载”。
查找包含要处理的规则集的 XML 文件并将其选中。
在“规则集资源管理器”窗口中,找到要在其中添加规则的规则集版本。
打开规则集版本的快捷菜单,然后选择“添加新规则”。
以下列表描述了可以用于更改规则的方式:
创建规则集的新版本。
直接编辑现有规则集版本。 可以更改单个规则、添加新规则或删除现有规则。
下表描述了可用于处理规则的所有规则集资源管理器快捷命令:
任务 | 快捷命令 |
---|---|
在所选规则集版本中创建新规则。 | 添加新规则 |
将所选规则复制到剪贴板。 | 复制 |
将所选规则复制到剪贴板并删除此规则。 | 剪切 |
将规则粘贴到所选的规则集版本中。 | 粘贴 |
删除所选规则。 | 删除 |
下表对规则的属性进行了说明:
属性 | 值 |
---|---|
Name | 规则的名称。 |
活动 | 指示规则已启用还是被禁用。 |
优先级 | 规则集中规则的优先级。 索引越高,规则优先级就越高。 优先级较高的规则的操作先运行。 默认值为 0,表示中等优先级。 可以将此值设为正值或负值。 有关详细信息,请参阅《规则引擎优化》。 |
启用或禁用规则
可以将规则设置为非活动状态,以便在规则集执行时不执行规则,或者可以重新激活已停用的规则。
在“规则集资源管理器”中,选择规则。
在“属性”窗口中,将“活动”属性设置为以下任一值:
- False:禁用
- True:启用
设置规则优先级
可以设置规则的优先级,以便操作在具有不同优先级的另一个规则的操作之前或之后运行。 优先级是相对的,因此,在优先级较低的规则中任何操作运行之前,具有特定优先级的规则中所有操作都按顺序运行。
在“规则集资源管理器”中,选择规则。
在“属性”窗口中,将“优先级”设置为所需的整数值。
创建或编辑条件
若要生成、编辑或查看触发规则的条件,请使用条件编辑器,该编辑器是 Rules Composer 的一部分。 若要生成条件,可以执行以下任务:
添加内置或用户定义的谓词(如果有)。
通过从“事实资源管理器”窗口拖动项目,在谓词中定义参数。
通过选择参数链接来内联输入参数值。
在条件中移动谓词和逻辑运算符。
注意
谓词和逻辑运算符出现的顺序不决定其计算顺序。
从条件中删除谓词和逻辑运算符。
向条件添加谓词
在“规则集资源管理器”中,选择规则。
在“IF”窗口(即条件编辑器)中,打开“条件”快捷菜单,然后选择下列选项之一:
选择一个逻辑运算符。 从运算符的快捷菜单中,添加要计算的谓词或嵌套逻辑运算符。
有关设置逻辑运算符的详细信息,请参阅《向规则添加算术和逻辑运算符》
从“谓词”快捷菜单中,选择内置谓词或用户定义的谓词(如果有)。
下表描述了可从“谓词”快捷菜单中选择的可用谓词表达式:
内置谓词 说明 之后 回答以下问题的时态谓词:“time1 是否按时间顺序排列在 time2 后?” 之前 回答以下问题的时态谓词:“time1 是否按时间顺序排列在 time2 前?” Between 回答以下问题的时态谓词:“time1 是否按时间顺序排列在 time2 和 time3 之间?” Equal 相等关系运算符。 Exists 回答以下问题的存在谓词:“指定的 XML 元素或属性是否存在?” GreaterThan 大于关系运算符。 大于或等于 表示大于或等于的关系运算符。 LessThan 小于关系运算符。 小于或等于 表示小于或等于的关系运算符。 匹配 确定正则表达式是否存在于指定的输入字符串中。 不等于 表示不等于的关系运算符。 范围 确定某个值是否存在于某个范围内。
在条件中指定谓词的参数
按照以下步骤,这些步骤与操作中的函数所用的相同。
在条件中移动逻辑运算符或谓词
在条件编辑器中,执行以下步骤之一:
将逻辑运算符或谓词拖到另一个逻辑运算符或“条件”节点上。
打开逻辑运算符或谓词的快捷菜单,并选择“上移”或“下移”以分别将项目移动一个位置或级别。
创建或编辑操作
若要生成、编辑或查看满足条件时运行的操作,请使用操作编辑器,该编辑器是规则编辑器的一部分。 若要生成操作,可以执行以下任务:
- 添加内置或用户定义的函数(如果有)。
- 通过从“事实资源管理器”窗口拖动项目来定义函数中的参数。
- 通过选择参数链接来内联输入参数值。
- 在操作中移动函数。
添加函数
在“规则集资源管理器”中,选择规则。
在“THEN”窗口(即操作编辑器)中,打开“操作”快捷菜单,然后选择一个内置函数来添加操作和参数。
下表描述了可从“操作”快捷菜单中选择的函数:
函数 说明 Assert 向规则引擎实例的工作内存添加新事实。 清除 重置规则引擎实例的工作内存和议程。 有关工作内存和议程的详细信息,请参阅《规则引擎优化》。 终止 终止规则处理。 取消 从规则引擎实例的工作内存中删除事实。 RetractByType 从规则引擎实例的工作内存中删除具有指定类型的事实。 更新 更新规则引擎实例工作内存中的事实。
有关详细信息,请参阅《使用控制函数优化规则》。
在操作中指定函数的参数
按照这些步骤操作,对于条件中的谓词,步骤相同。
在操作中移动函数
规则中的操作根据指定的顺序执行,但规则引擎控制函数除外,这些函数遵循其他操作执行。
- 在操作编辑器中,打开操作的快捷菜单,并选择“上移”或“下移”以分别将操作移动一个位置或级别。
在操作中为条件或函数中的谓词指定参数
在条件编辑器或操作编辑器中,执行以下步骤之一:
在谓词或函数中,选择默认参数,并在适当情况下输入所需值或从列表中选择值。
在“事实资源管理器”窗口中,选择包含要用作参数的术语的选项卡,并将该术语拖到相应编辑器中的谓词或函数中的参数上。
该术语的类型必须为谓词或功能所要求的类型。 否则会出错。
若要将参数替换为空字符串值,请打开参数的快捷菜单,然后选择“设置为空字符串”。
若要将参数替换为 null 常量定义,请打开参数的快捷菜单,然后选择“设置为 null”。
注意
如果参数类型不是可设置为 null 的类型,则可能不会显示此选项。
若要将算术或逻辑运算符添加到参数,请参阅《向规则添加算术和逻辑运算符》。
在条件或操作中查找项目源
在条件或操作编辑器中,执行以下步骤之一:
若要在用于在条件中创建谓词、在操作中创建函数或者在条件或操作中创建参数的事实资源管理器中找到词汇定义,请打开谓词、函数或参数的快捷菜单,然后选择“前往词汇”。
若要在用于在条件中创建谓词、在操作中创建函数或者在条件活操作中创建参数的事实资源管理器中找到 .NET 成员或 XML 元素,请打开谓词、函数或参数的快捷菜单,然后选择“前往源事实”。
删除谓词、逻辑运算符或操作
在条件编辑器中,执行以下步骤之一:
选择该项目,然后按删除键。
选择项,例如谓词、逻辑运算符或操作,然后选择“删除 <item-type>”。
若要删除参数以及任何嵌套参数并还原默认定义,请打开参数的快捷菜单,然后选择“重置参数”。
向规则添加事实
您可以指定能够保存在规则存储中以供随后用作规则和词汇中事实的数据源引用。 可以指定具有类和类成员的 .NET 程序集或具有 XML 文档元素和属性的 XSD 架构。
若要从 .NET 程序集、XSD 架构或词汇定义中浏览已添加的数据,请在“事实资源管理器”窗口中,根据所需数据的位置选择“词汇”选项卡、“XML 架构”选项卡或“.NET 类”选项卡。
将数据从相应的选项卡中拖动到条件编辑器中条件内所需位置或操作编辑器中操作内所需位置。
将 .NET 程序集添加为 .NET 事实的数据源
在“事实浏览器”窗口中,选择“.NET 类”选项卡。
打开“.NET 程序集”节点的快捷菜单,然后选择“浏览”。
查找并打开要使用的 .NET 程序集。
在“.NET 程序集”中,所选程序集及其类和成员一起显示,例如:
重要
如果在本地目录中更新 .NET 程序集,则 Microsoft Rules Composer 不会自动刷新 .NET 程序集。 有关刷新对已更新程序集的引用的步骤,请参阅《更新 .NET 程序集引用》。
更新 .NET 程序集引用
如果添加具有不同名称或版本的新 .NET 程序集,则必须更新规则集以引用新程序集。 对于此任务,在 Microsoft Rules Composer 中,必须创建新的规则集版本,并更新对新程序集(包括类、方法等)的引用。 若要加载更新的程序集,请确保重启 Microsoft Rules Composer。
如果更新后的 .NET 程序集使用相同的名称、版本号等,则只需将新程序集添加到 Azure 逻辑应用规则引擎函数项目。
删除用作数据源的 .NET 程序集
在“事实浏览器”窗口中,选择“.NET 类”选项卡。
在“.NET 程序集”中,打开程序集的快捷菜单,然后选择“删除”。
将 XML 架构添加为 XML 事实的数据源
在“事实浏览器”窗口中,选择“XML 架构”选项卡。
打开“架构”节点的快捷菜单,然后选择“浏览”。
在“架构文件”框中,找到并选择 XML 架构 (.xsd) 文件,然后选择“打开”。
在“架构”中,XML 架构及其 XML 元素一起显示,例如:
参数中使用的 XML 元素的绑定
在业务规则框架中,“TypedXmlDocument”类是一个符合 Microsoft .NET 的类库,表示 XML 文档类型,是实现“ITypedFact”接口的类之一。 这些类称为“类型化事实”。
在规则中使用 XML 文档中的节点作为参数时,系统会创建两个 XPath 表达式:一个“选择器绑定”和一个“字段绑定”,具体取决于你选择使用的节点:
如果节点具有子节点,则系统为节点创建一个“选择器绑定”(也称为“XmlDocument 绑定”),但没有创建字段绑定。
如果节点没有子节点,则系统为节点的父节点创建一个“选择器绑定”(也称为“XmlDocument 绑定”)。 字段绑定(也称为“XmlDocumentMember 绑定”)将为节点本身创建。 此字段绑定是相对于选择器绑定的。
在将 XML 节点拖动到规则参数中前,你可以更改 XML 节点的默认 XPath 表达式,新的绑定信息将放入规则集中。
注意
在 Microsoft Rules Composer 中重新加载架构时,必须重新输入对 Microsoft Rules Composer 中 XPath 表达式所做的任何编辑。
例如,假设有以下 XML 架构:
如果在参数中使用“Income”节点,则系统只会创建选择器绑定,因为节点具有子节点。
在“属性”窗口中,节点的“XPath 选择器”属性包含以下默认 XPath 表达式:
/*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']/*[local-name()='Income' and namespace-uri()='']
如果在参数中使用“Name”节点,则系统会同时创建选择器绑定和字段绑定。
在“属性”窗口中,节点的绑定信息如下所示:
属性 Value XPath 字段 *[local-name()='Name' and namespace-uri()='']
XPath 选择器 /*[local-name()='Root' and namespace-uri()='http://LoansProcessor.Case']