我们有一个Siebel 7.8应用程序,并且当用户保存满足特定条件的记录时显示一条消息的要求。事情是这样的:如何在Siebel中显示来自服务器脚本的警报?
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");
}
}
浏览器的脚本(在applet它总是在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广播消息不是一种选择。
或者,或者,如果我必须坚持使用警报/ SWAlert:是否有任何其他方式在服务器脚本和浏览器脚本之间进行通信,而无需进行无限轮询?
这可以工作,但我将不得不在每一个基于这个BC的小程序上复制相同的代码,并且*有很多* ... – AJPerez 2014-10-20 07:13:00
嗯..你现有的解决方案还有用户applet浏览器脚本,但更多的线。您可以用较少的线路尝试此解决方案。我注意到的另一件事,你现有的脚本是在BusComp_WriteRecord中,在记录提交到db之后触发。因此,在这里使用RaiseErrorText不应该回滚任何更改。记录保存后会出现该信息。 – 2014-10-21 05:51:39
是的,但我的浏览器脚本只能写入一个小程序中,因为一旦“侦听程序”已设置好,它就可以在任何地方使用。有了你的解决方案(这比我的解决方案更好,至少你的工作原理......),我必须在10-15个小程序上复制相同的代码。 – AJPerez 2014-10-21 06:30:50