在 Siebel 中神奇地设置配置文件属性

Profile attribute being magically set in Siebel

我们的 Siebel 7.8 应用程序中有一个非常 奇怪的问题。

Application_Start事件中我们定义了一堆配置文件属性,这些属性决定了是否允许登录用户执行某些操作。代码是这样的:

if (userHasSuperpowers) {
    TheApplication().SetProfileAttr("CanFly", "Y");
} else {
    // CanFly is not set, and GetProfileAttr("CanFly") returns ''
}

一切正常,除了这些配置文件属性之一。条件不满足,所以我们不设置它的值。但是当我们使用 GetProfileAttr 检查它时...它 returns 'Y' 而不是 ''.

我检查了代码。 很多。我到处都留下痕迹,我 100% 确定当 Application_Start 事件的最后一行执行时,该属性仍然是空的。但是,在登录后的第一个Applet_Load事件中(在HLS Salutation Applet (HLS Home)小程序中),它的值已经变成了'Y'为什么!!? 我找遍了所有地方,但我找不到其他任何我们可以做 SetProfileAttr 的地方。到目前为止,我已经排除了:

等等,还有更多,我把最好的部分留到最后:问题只发生在我们的开发环境

我还能在哪里搜索正在设置的配置文件属性?我读过它们可以持久保存到数据库中,但是为了这样做,您必须定义它们是基于 S_PARTY 扩展 table 的 BC 中的一个字段,对吗?

有没有办法以某种方式跟踪配置文件属性的更改?也许提高一些日志级别?

在加载第一个小程序之前,我如何才能至少找出 Application_Start 之后正在执行的内容?

还有其他想法吗?我也尝试检查 SQL 假脱机文件,但也没有发现任何可疑的东西(即,我们用来检查条件的任何查询,两次使用不同的参数 运行)。


更新:按照 Ranjith R 的建议,我还检查了:

仍然没有运气...

Siebel 7.8 是否有运行时事件?我不记得了。运行时事件有一个为 setevent 设置的操作,它可以 set/clear 配置文件属性。

还有其他普通业务服务可以设置配置文件属性,请尝试在业务服务方法下的工具平面中搜索 *rofile*tt*

SIS OM 服务也可以直接从 DVM 调用运行时事件,所以这也是一种可能性。

没有日志系统可以查看配置文件属性值的变化,测试是唯一的出路。

好的...终于我们找到了发生了什么:

  1. 我们访问 URL 到我们的服务器并进入登录页面。这会为 SADMIN 用户触发第一个 Application_Start 事件。
  2. 我们在该会话中设置了配置文件属性。 SADMIN 是 Siebel 管理员用户,所以是的,他 hasSuperpowers 因此我们 TheApplication().SetProfileAttr("CanFly", "Y");.
  3. Application_Start 活动结束。
  4. 我们在登录屏幕中输入用户名和密码以访问 Siebel。这会触发第二个 Application_Start 事件,这次是针对我们的用户。这是我用跟踪文件监视的文件。
  5. 我们在新会话中再次设置配置文件属性。我们的用户没有 hasSuperpowers,所以我们没有为 CanFly 属性设置任何值。
  6. Application_Start 事件结束,CanFly 仍然是空的。
  7. Siebel 在加载第一个屏幕之前将两个会话合并为一个!!或者至少,它传输了我们为 SADMIN.
  8. 设置的配置文件属性

我确信它会那样发生,原因有二。首先,我们更改了配置文件属性名称以包含用户名。其次,我们现在存储的不是 "Y",而是当前日期:

var time = (new Date()).getTime();
TheApplication().SetProfileAttr("CanFly_" + TheApplication().LoginName(), time);

我们最终得到 CanFly_SADMIN,但没有 CanFly_USER,并且存储的时间值与我们在步骤 2 的日志文件中看到的相同... *_USER 属性的值。

事情就是这样。我仍然不知道为什么 Siebel 会这样,但这对另一个问题很重要。根据 Siebel bookshelf:

The Start event is called when the client starts and again when the user interface is first displayed.

...但它并没有说明它是从两个不同的会话、不同的用户调用,然后将它们合并在一起的。考虑到它不会发生在其他环境中,这一定是我们开发环境中的配置错误。