在许多情况下,你将针对某个类型编写业务规则,并且期望被断言到引擎中的每个实例单独分析并按照规则采取行动。 但是,在某些情况下,需要在规则中同时分析给定类型的多个实例。
以使用 FamilyMember 类实例的规则为例。
IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)
该规则标识一个 FamilyMember 实例,该实例是 一个父亲 ,另一个实例是 Son。 如果实例按姓氏关联,Son 实例将被添加到 Father 实例的子集合中。 如果规则中单独分析了每个 FamilyMember 实例,则规则永远不会触发,因为在这种情况下, FamilyMember 只有一个角色(父亲 或 儿子)。
因此,必须向引擎指示应在规则中一起分析多个实例,并且需要一种方法来区分规则中每个实例的标识。 实例 ID 属性用于提供此功能。 在“事实资源管理器”中选择事实时,此字段在“属性”窗口中可用。 在将事实或成员拖动到规则之前,应更改字段值。
使用 实例 ID 属性,将重新生成规则。 对于使用 FamilyMemberSon 实例的规则参数,实例 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 仅在给定规则评估的上下文中使用。 它不会附加到策略执行中的对象实例,并且与断言对象的顺序无关。 将评估该类型的所有规则参数中的每个对象实例。