我们在我们的Siebel 7.8应用程序中有一个很奇怪的问题。在Siebel中魔法设置的配置文件属性
在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
。到目前为止,我已经排除了:
- 每一个浏览器和服务器脚本所有我们的小应用程序,应用程序,BC和商务服务。
- 所有运行时业务服务(直接在应用程序中定义的服务而不是SRF)。
Personalization Profile
业务组件字段。- SmartScripts(不是他们在这个特定的情况下,我只是提到他们承认你也可以在那里设置配置文件属性)。
- 工作流程:每一步调用
SIS OM PMT Service
方法Set Profile Attribute
。 - Siebel神奇地设置它的价值。配置文件属性名称是用西班牙语自定义的,它包含我们的项目名称和row_id。我真的不认为Siebel使用它自己的配置文件属性相同的名称:)。
别急,还有更多的,我留下了最美好的一部分最后:问题只发生在我们的开发环境!
- 这不是一个SRF问题:如果我们将相同的SRF提升到我们的测试或生产环境,它将起作用并返回预期值。
- 这不是一个数据问题:仍然使用相同的SRF,我可以使用本地胖客户端,使用相同的登录名和密码连接到我们的开发数据库,并且它也可以正常工作。
- 这不是一个并发问题:我们正在测试只有一个用户登录。即使我们有更多,他们也不会共享会话。即使他们这样做,价值也不会总是
'Y'
。 - 这不是一个暂时的小故障,或者是由于错误的增量编译或SRF损坏导致的:我们已经经历了至少6个月(显然,在那段时间内,我们已经有了几十个不同的SRF文件。 ..他们都有同样的问题,但只在开发中,并且只有当你使用服务器而不是专用客户端... 认真 ...)。
我还可以在哪里搜索正在设置的配置文件属性?我读过它们可以被保存到数据库中,但为了这样做,您必须将它们定义为基于S_PARTY扩展表的BC中的字段,对吧?
有没有办法跟踪配置文件属性的变化?也许提升一些loglevel?
在加载第一个小程序之前,我如何才能知道在Application_Start
之后至少执行了什么?
还有其他想法吗?我也尝试检查SQL假脱机文件,但没有发现任何可疑的事情(即,我们用来检查条件的任何查询,使用不同参数运行两次)。
更新:以下兰芝斯的r的建议,我也查:
- 其他香草商务服务,可以从工作流程还援引情景模式设置为ATTR:
User Registration > SetProfileAttr
,SessionAccessService > SetProfileAttr
和ISS Promotion Agreement Manager > SetProfileAttributes
。 - 运行时事件直接或使用业务服务设置配置文件属性(我们没有除香草之外的任何运行时事件)。
- 商业服务从DVMs被调用(我们只有香草数据验证规则,并且它们都不适用于我们的buscomps)。
仍然没有运气...
这真棒!那么每个用户登录都有一个SADMIN登录?奇怪。您是使用LDAP还是其他非数据库身份验证?也许是它的一部分。但是这些信息意味着我们需要更加小心地在应用程序启动事件中使用登录名。感谢您的跟进。 –
但@AJPerez,你说问题只在DEV中。那么在其他环境中发生了什么? –
现在你提到它了,是的,对于这种环境,身份验证是不同的 - 它使用数据库,而其他则依赖于Active Directory。我不知道在其他环境中会发生什么,我们以前从未启用跟踪App_Start。我知道的唯一的事情是配置文件属性只在dev中搞砸了。我认为它可能是错误的配置,但也许它只是认证方法。 – AJPerez