2016-08-08 46 views
2

我们在我们的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 > SetProfileAttrSessionAccessService > SetProfileAttrISS Promotion Agreement Manager > SetProfileAttributes
  • 运行时事件直接或使用业务服务设置配置文件属性(我们没有除香草之外的任何运行时事件)。
  • 商业服务从DVMs被调用(我们只有香草数据验证规则,并且它们都不适用于我们的buscomps)。

仍然没有运气...

回答

2

好吧......终于,我们发现发生的事情:

  1. 我们访问URL到我们的服务器,并获得了登录页面。这会触发第一个Application_Start事件,对于SADMIN用户。
  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设置的配置文件属性。

我确定它发生这种情况,原因有两个。首先,我们更改了配置文件属性名称以包含用户名。第二,而不是存储只是一个"Y",我们现在存储当前日期:

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

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

所以这就是发生了什么。我仍然不知道为什么Siebel会这样做,但这是另一个问题。按照Siebel bookshelf:当客户机启动时再被首先显示在用户界面

开始事件被调用。

...但它并没有说它从两个不同的会话,不同的用户也被调用,然后将它们合并在一起。在我们的开发环境中,它必须是错误配置的,因为在其他环境中不会发生这种情况。

+0

这真棒!那么每个用户登录都有一个SADMIN登录?奇怪。您是使用LDAP还是其他非数据库身份验证?也许是它的一部分。但是这些信息意味着我们需要更加小心地在应用程序启动事件中使用登录名。感谢您的跟进。 –

+0

但@AJPerez,你说问题只在DEV中。那么在其他环境中发生了什么? –

+0

现在你提到它了,是的,对于这种环境,身份验证是不同的 - 它使用数据库,而其他则依赖于Active Directory。我不知道在其他环境中会发生什么,我们以前从未启用跟踪App_Start。我知道的唯一的事情是配置文件属性只在dev中搞砸了。我认为它可能是错误的配置,但也许它只是认证方法。 – AJPerez

1

确实的Siebel 7.8具有运行时的活动?我不记得了。运行时事件有一个为setevent设置的操作,可以设置/清除配置文件属性。

还有其他可以设置配置文件属性的香草商业服务,请尝试在*rofile*tt*的商业服务方法下使用工具搜索。

SIS OM服务也可以从DVMs直接从RunTime事件中调用,所以这也是一种可能性。

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

+0

谢谢兰吉斯。是的,它确实有运行时事件,我现在正在检查它们,但我们只有香草事件和动作集。我会尝试你的其他建议 – AJPerez