在Siebel

时间:2016-08-08 06:52:06

标签: siebel

我们的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的其他任何地方。到目前为止,我已经排除了:

  • 所有我们的applet,应用程序,BC和商业服务的每个浏览器和服务器脚本。
  • 所有运行时业务服务(直接在应用程序中定义的服务而不是SRF)。
  • Personalization Profile业务组件字段。
  • SmartScripts(并不是说它们在这个特定场景中很重要,我只是提到它们以承认你也可以在那里设置配置文件属性。)
  • 工作流程:每一步都调用SIS OM PMT Service方法Set Profile Attribute
  • Siebel神奇地设定了它的价值。配置文件属性名称是自定义的,使用西班牙语,它包含我们的项目名称和row_id。我确实认为Siebel没有为自己的个人资料属性使用相同的名称:)。

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

  • 这不是SRF问题:如果我们将相同的SRF推广到我们的测试或生产环境,它会起作用并返回预期值。
  • 这不是数据问题:仍然使用相同的SRF,我可以使用我的本地胖客户端,使用相同的登录名和密码连接到我们的开发数据库,​​它也可以正常工作。
  • 这不是一个并发问题:我们正在测试只有一个用户登录。即使我们有更多,他们也不会共享会话。即使他们这样做了,价值也不会总是'Y'
  • 这不是暂时的故障,或者由于错误的增量编译或SRF损坏而导致的事情:我们已经经历了至少6个月(显然​​,在那段时间内,我们已经有了几十个不同的SRF文件......所有这些文件都有相同的问题,但仅限于开发,只有当您使用服务器而不是专用客户端时...... 认真地 ...)。< / LI>

我还可以在哪里搜索正在设置的配置文件属性?我已经读过它们可以保存到数据库中,但为了做到这一点,你必须将它们定义为基于S_PARTY扩展表的BC中的字段,对吗?

有没有办法以某种方式跟踪配置文件属性更改?也许上升一些loglevel?

在加载第一个小程序之前,我怎样才能找到Application_Start之后正在执行的内容?

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

更新:根据Ranjith R的建议,我还检查过:

  • 其他可以从工作流程调用的vanilla业务服务,以设置个人资料attr:User Registration > SetProfileAttrSessionAccessService > SetProfileAttrISS Promotion Agreement Manager > SetProfileAttributes
  • 运行时事件直接设置配置文件属性或使用业务服务(除了vanilla之外,我们没有任何运行时事件)。
  • DVMs调用业务服务(我们只有vanilla数据验证规则,并且它们都不适用于我们的buscomp)。

仍然没有运气......

2 个答案:

答案 0 :(得分: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设置的配置文件属性。
  8. 我确定它是这样发生的,原因有两个。首先,我们更改了配置文件属性名称以包含用户名。第二,我们现在正在存储当前日期,而不是仅存储"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服务,这也是一种可能性。

没有记录系统可以看到配置文件属性的值发生变化,测试是唯一的出路。