在 Siebel 计算字段中使用 EXISTS 和 GetProfileAttrAsList
Using EXISTS and GetProfileAttrAsList in a Siebel calculated field
在我们的 Siebel 7.8 应用程序中,我们有三个实体:服务请求 (SR)、组和员工。每个员工可以是一个或多个组的成员,每个服务请求也可以分配给一个或多个组。
我有一个在服务请求 BC 上创建计算字段的要求,它将指示当前用户是否属于与服务请求关联的任何组。
我已经在服务请求 BC 上创建了一个名为 SR Groups
的多值字段。我还有另一个多值字段,Employee Groups
;这个在 Personalization Profile
业务组件上,这意味着 Siebel 将自动生成一个具有相同名称的多值配置文件属性。以上所有都按预期工作。
接下来我创建了这个计算字段:
IIf(InList([SR Groups], GetProfileAttrAsList("Employee Groups")), "Y", "N")
它有效,但它只检查 SR 的主要组是否是当前用户的组之一。我需要检查所有 SR 组,而不仅仅是主要组。所以,我创建了另一个计算字段:
IIf(EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups")), "Y", "N")
这个不行。它始终显示 "N"。然而,根据 this Bookshelf document:
a typical usage of the EXISTS operator in this scenario is EXISTS ([Targeted States] = GetProfileAttrAsList("State"))
. This does a many-to-many match of the MVG Business Component Field Targeted State against the MVG profile attribute State.
这正是我想要做的,但没有成功。我看不出我的表达方式与示例表达方式有任何区别。并且没有任何典型的 Bookshelf 警告,例如 "if you're going to use this function, you must activate the Link Specification property of the MVF" 或类似内容。
业务组件基于专门的 class、CSSBCServiceRequest,但我认为在这种情况下这应该不是问题 - 将其切换到 CSSBCBase也不能解决问题。唯一不起作用的似乎是 EXISTS
运算符,这在 Siebel 中是非常标准的。
此外,如果我使用表达式 EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups"))
在应用程序上执行查询,它不会按应有的方式过滤掉任何服务请求。
有什么线索吗?
经过大量测试,我找到了解决方法。我仍然想知道为什么我的第一次尝试没有成功,但无论如何...
考虑到我第一次尝试的问题似乎是匹配 MVF 和多值配置文件属性之间的多对多关系,我将其分为两个一对多匹配:
在 link 中,我建立了一个搜索规范 属性。这样,我的多值字段将只包含与用户关联的组:
InList([Group], GetProfileAttrAsList("Employee Groups"))
在BC中,只剩下检查MVF中是否有任何值:
IIf(EXISTS([Filtered SR Groups] IS NOT NULL), "Y", "N")
在我们的 Siebel 7.8 应用程序中,我们有三个实体:服务请求 (SR)、组和员工。每个员工可以是一个或多个组的成员,每个服务请求也可以分配给一个或多个组。
我有一个在服务请求 BC 上创建计算字段的要求,它将指示当前用户是否属于与服务请求关联的任何组。
我已经在服务请求 BC 上创建了一个名为 SR Groups
的多值字段。我还有另一个多值字段,Employee Groups
;这个在 Personalization Profile
业务组件上,这意味着 Siebel 将自动生成一个具有相同名称的多值配置文件属性。以上所有都按预期工作。
接下来我创建了这个计算字段:
IIf(InList([SR Groups], GetProfileAttrAsList("Employee Groups")), "Y", "N")
它有效,但它只检查 SR 的主要组是否是当前用户的组之一。我需要检查所有 SR 组,而不仅仅是主要组。所以,我创建了另一个计算字段:
IIf(EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups")), "Y", "N")
这个不行。它始终显示 "N"。然而,根据 this Bookshelf document:
a typical usage of the EXISTS operator in this scenario is
EXISTS ([Targeted States] = GetProfileAttrAsList("State"))
. This does a many-to-many match of the MVG Business Component Field Targeted State against the MVG profile attribute State.
这正是我想要做的,但没有成功。我看不出我的表达方式与示例表达方式有任何区别。并且没有任何典型的 Bookshelf 警告,例如 "if you're going to use this function, you must activate the Link Specification property of the MVF" 或类似内容。
业务组件基于专门的 class、CSSBCServiceRequest,但我认为在这种情况下这应该不是问题 - 将其切换到 CSSBCBase也不能解决问题。唯一不起作用的似乎是 EXISTS
运算符,这在 Siebel 中是非常标准的。
此外,如果我使用表达式 EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups"))
在应用程序上执行查询,它不会按应有的方式过滤掉任何服务请求。
有什么线索吗?
经过大量测试,我找到了解决方法。我仍然想知道为什么我的第一次尝试没有成功,但无论如何...
考虑到我第一次尝试的问题似乎是匹配 MVF 和多值配置文件属性之间的多对多关系,我将其分为两个一对多匹配:
在 link 中,我建立了一个搜索规范 属性。这样,我的多值字段将只包含与用户关联的组:
InList([Group], GetProfileAttrAsList("Employee Groups"))
在BC中,只剩下检查MVF中是否有任何值:
IIf(EXISTS([Filtered SR Groups] IS NOT NULL), "Y", "N")