在我们的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"。然而,根据这个Bookshelf文档:
EXISTS操作符在此场景中的典型用法是
EXISTS ([Targeted States] = GetProfileAttrAsList("State"))
。这将对MVG业务组件字段目标状态与MVG配置文件属性状态进行多对多匹配。
这正是我想做的,但没有成功。我看不出我的表情和例子有什么不同。也没有任何典型的Bookshelf警告,比如"如果你要使用这个函数,你必须激活MVF的Link Specification属性",或者类似的东西。
业务组件是基于一个专门的类,CSSBCServiceRequest,但我不认为这应该是一个问题,在这种情况下 -切换到CSSBCBase也不能解决问题。唯一不工作的似乎是EXISTS
操作符,这在Siebel中是相当标准的。
同样,如果我用表达式EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups"))
在应用程序上执行查询,它不会过滤掉任何服务请求,因为它应该。
什么线索吗?
经过大量的测试,我已经能够找到一个解决方案。我还是想知道为什么我的第一次尝试没有成功,但无论如何…
考虑到我第一次尝试的问题似乎是匹配MVF和多值配置文件属性之间的多对多关系,我将其分为两个一对多匹配:
-
在链接中,我建立了一个搜索规范属性。这样,我的多值字段将只包含与用户相关的组:
InList([Group], GetProfileAttrAsList("Employee Groups"))
-
在BC中,只需要检查MVF中是否有值:
IIf(EXISTS([Filtered SR Groups] IS NOT NULL), "Y", "N")