2015-08-28 25 views
0

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

我有一个请求,在服务请求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

在这种情况下,EXISTS运算符的典型用法是EXISTS ([Targeted States] = GetProfileAttrAsList("State"))。这会根据MVG配置文件属性状态进行MVG业务组件字段目标状态的多对多匹配。

这正是我想要做的,没有成功。我看不出我的表情和例子之间的区别。并且没有任何典型的书架警告,如“如果您要使用此功能,则必须激活MVF”或其他任何类似的链接规范属性。

业务组件是基于专业类,CSSBCServiceRequest,但 我不认为这应该是在这种情况下 一个问题 - 它切换到CSSBCBase没有任何解决问题。唯一不起作用的似乎是EXISTS操作员,这在Siebel中非常标准。另外,如果我使用表达式EXISTS([SR Groups] = GetProfileAttrAsList("Employee Groups"))在应用程序上执行查询,它不会过滤掉任何服务请求,因为它应该如此。

任何线索?

回答

0

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

鉴于我第一次尝试的问题似乎与MVF和多值之间的多对多关系匹配我已经将它分成两个一对多匹配:

  1. 在链接中,我创建了一个搜索规范属性。这样一来,我的多值字段将只包含与用户相关的组:

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

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