我们的Siebel 7.8应用程序中存在非常奇怪的问题。
在Application_Start
事件中,我们定义了一组配置文件属性,用于确定是否允许已登录用户执行某些操作。代码是这样的:
if (userHasSuperpowers) {
TheApplication().SetProfileAttr("CanFly", "Y");
} else {
// CanFly is not set, and GetProfileAttr("CanFly") returns ''
}
除了其中一个配置文件属性外,一切正常。条件不符合,所以我们没有设定它的价值。但是,当我们使用GetProfileAttr
进行检查时,它会返回'Y'
而不是''
。
我检查了代码。 很多。我在任何地方都放置了跟踪,并且我100%确定当Application_Start
事件的最后一行执行时,该属性仍为空。但是,在登录后的第一个Applet_Load
事件中(在HLS Salutation Applet (HLS Home)
小程序中),其值已更改为'Y'
。 为什么!!?我到处寻找,但我无法找到我们正在做SetProfileAttr
的其他任何地方。到目前为止,我已经排除了:
Personalization Profile
业务组件字段。SIS OM PMT Service
方法Set Profile Attribute
。但等等,还有更多,我最后留下了最好的部分:问题只发生在我们的开发环境中!
'Y'
。我还可以在哪里搜索正在设置的配置文件属性?我已经读过它们可以保存到数据库中,但为了做到这一点,你必须将它们定义为基于S_PARTY扩展表的BC中的字段,对吗?
有没有办法以某种方式跟踪配置文件属性更改?也许上升一些loglevel?
在加载第一个小程序之前,我怎样才能找到Application_Start
之后正在执行的内容?
还有其他想法吗?我也尝试检查SQL假脱机文件,但也没有发现任何可疑的内容(即,我们用来检查条件的任何查询,使用不同的参数运行两次)。
更新:根据Ranjith R的建议,我还检查过:
User Registration > SetProfileAttr
,SessionAccessService > SetProfileAttr
和ISS Promotion Agreement Manager > SetProfileAttributes
。仍然没有运气......
答案 0 :(得分:2)
好的......最后我们发现了正在发生的事情:
Application_Start
用户的第一个SADMIN
事件。SADMIN
是Siebel管理员用户,所以是的,hasSuperpowers
,因此我们TheApplication().SetProfileAttr("CanFly", "Y");
。Application_Start
活动结束。Application_Start
事件,这次是针对我们的用户。这是我用跟踪文件监视的那个。hasSuperpowers
,因此我们不会为CanFly
属性设置任何值。Application_Start
事件结束,CanFly
仍为空。SADMIN
设置的配置文件属性。我确定它是这样发生的,原因有两个。首先,我们更改了配置文件属性名称以包含用户名。第二,我们现在正在存储当前日期,而不是仅存储"Y"
:
var time = (new Date()).getTime();
TheApplication().SetProfileAttr("CanFly_" + TheApplication().LoginName(), time);
我们最终得到CanFly_SADMIN
,但没有CanFly_USER
,并且存储的时间值与我们在步骤2的日志文件中看到的相同... ...小于任何值*_USER
属性。
这就是发生了什么。我仍然不知道为什么Siebel会这样做,但这对另一个问题来说是个问题。根据{{3}}:
在客户端启动时调用Start事件,在首次显示用户界面时再次调用。
...但它并没有说任何关于它从两个不同的会话,不同的用户,然后将它们合并在一起的任何一个。它必须是我们的开发环境中的错误配置,考虑到它在其他环境中不会发生。
答案 1 :(得分:1)
Siebel 7.8是否有运行时事件?我不记得了。运行时事件具有setevent的操作集,可以设置/清除配置文件属性。
还有其他可以设置个人资料属性的vanilla业务服务,请尝试在*rofile*tt*
的业务服务方法下搜索工具。
也可以直接从RunM事件从DVM调用SIS OM服务,这也是一种可能性。
没有记录系统可以看到配置文件属性的值发生变化,测试是唯一的出路。