【问题标题】:How to display an alert from server script in Siebel?如何在 Siebel 中显示来自服务器脚本的警报?
【发布时间】:2014-12-13 05:18:32
【问题描述】:

我们有一个 Siebel 7.8 应用程序,并且要求在用户保存满足特定条件的记录时显示一条消息。像这样的:

function BusComp_WriteRecord () {
  if (conditions) {
    TheApplication().RaiseErrorText("Terribly important message");
  }
}

问题是我不能使用RaiseErrorText,因为它会阻止进一步的事件执行。这让我只能选择alertSWEAlert(除非有我不知道的其他选项)。

两者都只在浏览器脚本中受支持,BusComp_WriteRecord 事件没有浏览器版本。所有这一切意味着我必须在服务器脚本事件中保留我的验证,并以某种方式调用显示消息的浏览器脚本函数。我想出的唯一方法是这样的:

服务器脚本(在业务组件中):

function BusComp_WriteRecord () {
  if (conditions) {
    TheApplication().SetProfileAttr("MyMessage", "Terribly important message");
  }
}

浏览器脚本(在一个总是在 BC 之前加载的小程序中):

function Applet_Load () {
  listenerAlert();
}

function listenerAlert () {
  var message = TheApplication().GetProfileAttr("MyMessage");
  if ((message != null) && (message != "")) {
    TheApplication().SetProfileAttr("MyMessage", "");
    alert(message);
  }
  // Keep checking for messages each 0,5 seconds, forever...
  setTimeout("listenerAlert()", 500);
}

它确实有效,但它对服务器性能的影响过大。我们每台服务器大约有 60 个用户,显然,为每个用户每秒检查两次配置文件属性太多了(CPU 使用率上升到 100%)。

那么,在 Siebel 7.8 中是否有任何其他方式向用户显示警报?它必须是警报或类似的,即 Siebel 广播消息不是一个选项。

或者,如果我必须坚持使用警报/SWEAlert:是否有任何其他方式可以在服务器脚本和浏览器脚本之间进行通信,而无需无休止的轮询?

【问题讨论】:

    标签: siebel


    【解决方案1】:

    如果您仍然可以使用浏览器脚本,则可以在小程序级别编写代码。小程序有

    函数Applet_PreInvokeMethod(名称,inputPropSet)

    您可以检查 name=="WriteRecord" ,在那里进行验证,然后弹出 Alert() 提示符。

    请让我们知道它是否有效。

    【讨论】:

    • 这可行,但我必须在每个基于此 BC 的小程序上复制相同的代码,并且其中有 很多...
    • 嗯..您现有的解决方案也是用户小程序浏览器脚本,但更多行。您可以尝试使用更少行的此解决方案。我注意到的另一件事是,您现有的脚本位于 BusComp_WriteRecord 中,该脚本在记录提交到数据库后触发。所以在这里使用 RaiseErrorText 不应该回滚任何更改。记录保存后会出现消息。
    • 是的,但是我的浏览器脚本只写在一个小程序中,因为一旦设置了“监听器”,它就可以在任何地方使用。使用您的解决方案(这比我的更好,至少您的解决方案有效......),我必须在 10-15 个小程序上复制相同的代码。
    • 你是对的,WriteRecord 在提交后被触发,但我们已经有很多代码(主要是与外部系统的 Web 服务集成),它们有自己的 RaiseErrorTexts...不管在我放置代码的地方,它会破坏或被某些东西破坏。
    【解决方案2】:

    如果您的应用程序有 CTI 客户端,这是您的最佳选择。这就是我使用的应用程序处理服务器脚本警报的方式。文档对于这个来说非常好,所以我不会在这里详细介绍。如果您有任何问题,请发表评论,我非常精通我们的 CTI 警报功能。

    基本上,您可以添加一个命令 (@InvokeSWECommand),您可以从服务器脚本执行该命令,然后执行自定义浏览器脚本方法。

    我能想到的唯一缺点是这个命令是一劳永逸的(服务器脚本将继续执行)。因此,无需在浏览器脚本中等待从 confirm() 或任何东西返回值。

    https://docs.oracle.com/cd/E14004_01/books/SiebCTIAdm/SiebCTIAdm_AdvConfig29.html

    【讨论】:

      【解决方案3】:

      还有另一种解决方案是创建一个新的 BS,在该 BS(BS Display Alert) 上编写一个浏览器脚本来发出警报(确保这个 BS 从输入参数中读取消息以重用相同的)。 使用您的消息作为输入参数 (Inputs.SetProperty("BrowserMsg","Terribly important message")) 从要显示警报的服务器脚本触发/调用此 BS(BS 显示警报)...

      当这个BS呼叫时,它会显示一个带有“OK”按钮的消息。单击“确定”按钮后,您的所有后续事件都将恢复...

      【讨论】:

        【解决方案4】:

        在下面用于在 siebel 中显示来自服务器端的警报

        BS 名称:LS Pharma 签名 UI 服务

        方法名:ShowConfirmDialog

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-18
          • 2020-09-28
          • 1970-01-01
          • 2016-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多