我们有一个Siebel 7.8应用程序,并且要求在用户保存满足特定条件的记录时显示消息。像这样:
function BusComp_WriteRecord () {
if (conditions) {
TheApplication().RaiseErrorText("Terribly important message");
}
}
问题在于我无法使用RaiseErrorText
,因为它会阻止进一步的事件执行。这留给我alert
或SWEAlert
(除非有其他选项,我不知道)。
仅在浏览器脚本中支持它们,并且BusComp_WriteRecord
事件没有浏览器版本。所有这些意味着我必须在服务器脚本事件中保留我的验证,并以某种方式调用显示消息的浏览器脚本函数。我提出的唯一方法就是:
服务器脚本(在业务组件中):
function BusComp_WriteRecord () {
if (conditions) {
TheApplication().SetProfileAttr("MyMessage", "Terribly important message");
}
}
浏览器脚本(在始终在BC之前加载的applet中):
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广播消息不是一种选择。
或者,如果我必须坚持使用alert / SWEAlert:服务器脚本和浏览器脚本之间是否还有其他方式进行通信,而无需进行无休止的轮询?
答案 0 :(得分:3)
如果您仍然可以使用浏览器脚本,则可以在applet级别编写代码。 <小程序
function Applet_PreInvokeMethod(name,inputPropSet)
您可以查看姓名==&#34; WriteRecord&#34; ,在那里进行验证,并弹出Alert()提示。
请告诉我们是否有效。
答案 1 :(得分:1)
如果您的应用程序有CTI客户端,这是您的最佳选择。这就是我使用的应用程序处理服务器脚本警报的方式。文档对于这个文档来说非常好,所以我不会在这里详细介绍。如果您有任何问题,请发表评论,我非常精通我们的CTI警报功能。
基本上,您可以添加一个命令(@InvokeSWECommand),您可以从服务器脚本执行该命令,然后执行自定义浏览器脚本方法。
我唯一能想到的缺点就是这个命令很难忘了(服务器脚本会继续执行)。因此,不要在浏览器脚本中等待从confirm()或其他任何内容返回值。
https://docs.oracle.com/cd/E14004_01/books/SiebCTIAdm/SiebCTIAdm_AdvConfig29.html
答案 2 :(得分:0)
还有另一种解决方案是创建一个新的BS,在该BS( BS显示警报)上写一个浏览器脚本来发出警报(确保这个BS从Input参数中读取消息以重用它)。
触发/调用此BS( BS显示警报),并在您要显示警报的服务器脚本中将消息作为输入参数(Inputs.SetProperty("BrowserMsg","Terribly important message")
)...
当这个BS呼叫时,它将显示一条消息&#34; OK&#34;按钮。单击确定按钮后,所有后续事件将恢复...
答案 3 :(得分:0)
在下面用于在siebel中显示来自服务器端的警报
BS名称:LS Pharma签名UI服务
MethodName:ShowConfirmDialog