SAPUI5/Javascript间隔30秒,当数据库发生新更改时,将MessageBox显示为弹出菜单



我想为每个"102"状态显示一个错误消息Box。

onInit: function () {
var counter = {};
var sUrl = "/api/equipmentReport/getMachineOverview.xsjs";
var oModel = new JSONModel();
this.modelRefresh = setInterval(this.refreshModel.bind(this), 30000, sUrl, oModel);
oModel.attachRequestCompleted(function (oEvent) {
this.buildComboBox(oEvent.getSource().getData());
if (oEvent.getParameter("success") === true) {
var oModelData = oEvent.getSource().getData();
oModelData.equipments.forEach(function(o){
// o.iotTimestampDate = o.iotTimestamp !== null ? new Date(o.iotTimestamp) : "";
counter[o.registeredProductId] = o.telemetryStatus;
})
}
this.getPopupMessageForOfflineMachines(counter);
oEvent.getSource().updateBindings(true);
this.getView().setModel(oModel, "rootModel");
}.bind(this));
oModel.attachEventOnce('requestCompleted', {
oModel: oModel
}, this.restoreApplicationState.bind(this));
oModel.loadData(sUrl, false);

oModel.setSizeLimit(1000000);
sap.ui.getCore().setModel(oModel);
this.oRouter = sap.ui.core.UIComponent.getRouterFor(this);
this.oRouter.attachRouteMatched(this.handleRouteMatched, this);
var oHashChanger = sap.ui.core.routing.HashChanger.getInstance();
var sHash = oHashChanger.getHash();
if (sHash) {
var sAppStateKey = /(?:sap-iapp-state=)([^&=]+)/.exec(sHash)[1];
if (sAppStateKey) {
sap.ushell.Container
.getService("CrossApplicationNavigation")
.getAppState(this.getOwnerComponent(), sAppStateKey)
.done(this.restoreAppState.bind(this));
}
}
this.getView().setModel(oModel);

所以首先我要创建一个对象(registeredProductId->status(

40000000.H: "102"
40000001.H: "113"
40000002.H: "113"
40000003.H: "113"
40000004.H: "113"
40000005.H: "113"
40000006.H: "113"
40000007.H: "113"
40000008.H: "113"
40000009.H: "113"
40000010.H: "101"
40000011.H: "113"
40000012.H: "113"
40000015.H: "103"
40000023.H: "103"
40000026.H: "103"
40000027.H: "113"
40000028.H: "102"
40000029.H: "103"

之后,在我的函数中,我得到状态102,我需要以某种方式检查对象。如果registeredProductId已经存在,并且它具有状态!==102,它与警告相关,因此每个状态只有一次弹出菜单,并且只有在服务数据更改时才会出现。

getPopupMessageForOfflineMachines: function(counter) {
console.log(counter);
for (var key in counter) {
if(counter[key] == "102"){
MessageBox.warning(key);
}
}
},

如果是,则警告相关

问题是模型/服务每30秒刷新一次,而我的Popup每30秒出现一次。

如果能就这个问题提出任何建议,我将不胜感激。

您可以跟踪并与以前的值进行比较。具体来说,添加一个变量,例如previousCounter,然后在getPopupMessageForOfflineMachines函数中使用

if(counter[key] == "102" && counter[key] !== previousCounter[key]){
MessageBox.warning(key);
}

最新更新