如何在业务规则中分析多个相同类型的对象
在许多情况下,您会根据某个类型编写业务规则,希望单独分析添加到引擎的该类型的每个实例,并按规则对每个实例进行操作。 然而,在某些情况下,您可能希望使用一个规则同时分析给定类型的多个实例。
以使用 FamilyMember 类实例的规则为例。
IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)
规则标识一个 FamilyMember 实例,该实例是 一个 Father ,另一个实例是 Son。 如果实例与姓氏相关,则 Son 实例将添加到 Father 实例上的子级集合中。 如果在规则中单独分析每个 FamilyMember 实例,则永远不会触发该规则,因为在此方案中, FamilyMember 只有一个角色 - 父亲 或 儿子。
因此,必须向引擎指示应使用该规则同时分析多个实例,并需要在规则中区分每个实例标识的方法。 实例 ID 属性用于提供此功能。 在事实浏览器中选择事实后,即可在“属性”窗口中使用此字段。 您应在将事实或成员拖入规则中之前更改此字段的值。
使用 实例 ID 属性,将重新生成规则。 对于使用 FamilyMember的 Son 实例的规则参数,实例 ID 字段从默认值 0 更改为 1。 当实例 ID 从 0 更改为并将事实或成员拖动到规则编辑器中时,实例 ID 的值将显示在类后面的规则中。
IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))
现在,假设在引擎中断言 了一个 Father 实例和 一个 Son 实例。 引擎将根据这些实例的不同组合来评估规则。 假设 Father 和 Son 实例具有相同的姓氏,则 Son 实例将按预期添加到 Father 实例。
注意
实例 ID 仅在给定规则评估的上下文中使用。 “实例 ID”不会在执行策略时附加到对象实例,并且与对象的添加顺序无关。 每个对象实例均将使用该类型的所有规则参数进行评估。