在Siebel计算字段中使用EXISTS和GetProfileAttrAsList

时间:2015-08-28 10:17:57

标签: siebel

在我们的Siebel 7.8应用程序中,我们有三个实体:服务请求(SR),组和员工。每个员工都可以是一个或多个组的成员,每个服务请求也可以分配给一个或多个组。

我有一个要求在服务请求BC上创建一个计算字段的requeriment,它将指示当前用户是否属于与服务请求相关联的任何组。

我已经在服务请求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

  

此场景中EXISTS运算符的典型用法是EXISTS ([Targeted States] = GetProfileAttrAsList("State"))。这将MVG业务组件字段目标状态与MVG配置文件属性状态进行多对多匹配。

这正是我想要做的,没有成功。我看不出我的表情和例子之间有什么区别。并且没有任何典型的Bookshelf警告,例如“如果你打算使用这个功能,你必须激活MVF的链接规范属性”,或类似的东西。

业务组件基于专门的类CSSBCServiceRequest,但我不认为在这种情况下应该是一个问题 - 将其切换到CSSBCBase也不能解决问题。唯一不起作用的似乎是EXISTS运算符,这在Siebel中非常标准。

此外,如果我使用表达式EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups"))对应用程序执行查询,它不会过滤掉任何服务请求。

任何线索?

1 个答案:

答案 0 :(得分:0)

经过大量测试,我已经找到了解决方法。我仍然想知道为什么我的第一次尝试不起作用,但无论如何......

鉴于我的第一次尝试的问题似乎是匹配MVF和多值配置文件属性之间的多对多关系,我将它分成两个一对多的匹配:

  1. 在链接中,我已经建立了搜索规范属性。这样,我的多值字段将仅包含与用户关联的组:

    InList([Group], GetProfileAttrAsList("Employee Groups"))
  2. 在BC中,只检查MVF中是否有任何值:

    IIf(EXISTS([Filtered SR Groups] IS NOT NULL), "Y", "N")