Sapui5 应用程序在后端系统上部署时崩溃
我有一个与SAP Web IDE(个人版)配合使用的应用程序。我在后端系统中部署了该应用程序,当我开始测试时,在我试图保存一个错误条目(想看看错误消息是否如预期的那样出现)后,我得到了错误“无法读取未定义的属性'getParent'。“Undefined”是指我在我的基本控制器中使用的消息popover。异常不会发生在我的代码中,而是发生在MessagePopover-dbg.js中(快照附在下面,错误行1209) Web IDE上的SAPUI5版本:1.44.12 后端系统上的SAPUI5版本:1.44.23 基本控制器代码,以及调用下面附加的popover的例程。在其他情况下,我通常会向SAP发出通知,但由于我是SAPUI5的新手,我不能100%确定我没有遗漏任何东西。有什么想法吗Sapui5 应用程序在后端系统上部署时崩溃,sapui5,Sapui5,我有一个与SAP Web IDE(个人版)配合使用的应用程序。我在后端系统中部署了该应用程序,当我开始测试时,在我试图保存一个错误条目(想看看错误消息是否如预期的那样出现)后,我得到了错误“无法读取未定义的属性'getParent'。“Undefined”是指我在我的基本控制器中使用的消息popover。异常不会发生在我的代码中,而是发生在MessagePopover-dbg.js中(快照附在下面,错误行1209) Web IDE上的SAPUI5版本:1.44.12 后端系统上的SAPUI5版本
/*******基本控制器*************/
sap.ui.define([
“sap/ui/core/mvc/Controller”,
“sap/ui/model/json/JSONModel”,
“sap/m/MessagePopover”,
“sap/m/MessagePopoverItem”
],函数(控制器,JSONModel,MessagePopover,MessagePopoOverItem){
“严格使用”;
var oMessageTemplate=newmessagepopoveritem({
类型:“{type}”,
标题:“{title}”,
说明:“{description}”
});
var oMessagePopover=新消息Popover({
id:“actionEditMessagePopover”,
项目:{
路径:“/”,
模板:OmessaGetTemplate
}
});
var msgModel=new JSONModel(“testModel”);
返回Controller.extend(“kristal.apps.agreements.Controller.BaseController”{
/**
*访问路由器的便捷方法。
*@公众
*@返回{sap.ui.core.routing.Router}此组件的路由器
*/
getRouter:函数(){
返回sap.ui.core.UIComponent.getRouterFor(this);
},
/**
*按名称获取视图模型的方便方法。
*@公众
*@param{string}[sName]模型名
*@返回{sap.ui.model.model}模型实例
*/
getModel:函数(sName){
返回此.getView().getModel(sName);
},
/**
*设置视图模型的简便方法。
*@公众
*@param{sap.ui.model.model}建模模型实例
*@param{string}指定模型名称
*@returns{sap.ui.mvc.View}视图实例
*/
setModel:函数(oModel、sName){
返回这个.getView().setModel(oModel,sName);
},
/**
*资源包的Getter。
*@公众
*@返回{sap.ui.model.resource.ResourceModel}组件的ResourceModel
*/
getResourceBundle:函数(){
返回此.getOwnerComponent().getModel(“i18n”).getResourceBundle();
},
/**
*单击“通过电子邮件共享”按钮时的事件处理程序
*@公众
*/
onShareMailPress:函数(){
var oViewModel=(this.getModel(“objectView”)| | this.getModel(“worklistView”);
sap.m.URLHelper.triggerEmail(
无效的
oViewModel.getProperty(“/shareSendEmailSubject”),
oViewModel.getProperty(“/shareSendEmailMessage”)
);
},
_renderSAPMessages:函数(响应、sStart、oControl){
//提取消息
//当我们有多行时,Catch逻辑工作,重新初始化
//下一行处理
this.messageArray=[];
var消息;
var start=SSSTART+14;
var resultString=response.substring(开始);
var messageStart=resultString.indexOf(“代码”)-1;
var messageEnd=resultString.indexOf(“详细信息”)-2;
while(messageEnd>0){
message=“{”+resultString.substring(messageStart,messageEnd)+“}”;
message=message.replace(“严重性\”:“,“类型\”:”);
//message=message.replace(“message\”:“,“description\”:”);
message=message.replace(“message\”:“,“subtitle\”:”);
message=message.replace(“code\”:“,“title\”:”);
message=message.replace(“错误”、“错误”);
消息=消息。替换(“警告”、“警告”);
message=message.replace(“Z666Z”,“\”,“description\”:\”);
试一试{
message=JSON.parse(message);
message.title=message.title+“”+message.subtitle;
this.messageArray.push(message);
var streamEnd=resultString.indexOf(“}]}”)-1;
messageEnd+=1;
如果(流结束<消息结束){
//messageEnd=0;
start=resultString.indexOf(“sap消息:{”)+14;
如果(开始>0){
resultString=resultString.substring(开始);
messageStart=resultString.indexOf(“代码”)-1;
messageEnd=resultString.indexOf(“详细信息”)-2;
}否则{
messageEnd=0;
}
}否则{
resultString=resultString.substring(messageEnd);
messageStart=resultString.indexOf(“代码”)-1;
如果(messageStart>0){
messageEnd=resultString.indexOf(“}”);
}
否则{
打破
}
}
}
捕捉(错误){
start=resultString.indexOf(“sap-m
/********** Base Controller *************/
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"sap/m/MessagePopover",
"sap/m/MessagePopoverItem"
], function (Controller, JSONModel, MessagePopover, MessagePopoverItem) {
"use strict";
var oMessageTemplate = new MessagePopoverItem({
type: "{type}",
title: "{title}",
description: "{description}"
});
var oMessagePopover = new MessagePopover({
id: "actionEditMessagePopover",
items: {
path: '/',
template: oMessageTemplate
}
});
var msgModel = new JSONModel("testModel");
return Controller.extend("kristal.apps.agreements.controller.BaseController", {
/**
* Convenience method for accessing the router.
* @public
* @returns {sap.ui.core.routing.Router} the router for this component
*/
getRouter : function () {
return sap.ui.core.UIComponent.getRouterFor(this);
},
/**
* Convenience method for getting the view model by name.
* @public
* @param {string} [sName] the model name
* @returns {sap.ui.model.Model} the model instance
*/
getModel : function (sName) {
return this.getView().getModel(sName);
},
/**
* Convenience method for setting the view model.
* @public
* @param {sap.ui.model.Model} oModel the model instance
* @param {string} sName the model name
* @returns {sap.ui.mvc.View} the view instance
*/
setModel : function (oModel, sName) {
return this.getView().setModel(oModel, sName);
},
/**
* Getter for the resource bundle.
* @public
* @returns {sap.ui.model.resource.ResourceModel} the resourceModel of the component
*/
getResourceBundle : function () {
return this.getOwnerComponent().getModel("i18n").getResourceBundle();
},
/**
* Event handler when the share by E-Mail button has been clicked
* @public
*/
onShareEmailPress : function () {
var oViewModel = (this.getModel("objectView") || this.getModel("worklistView"));
sap.m.URLHelper.triggerEmail(
null,
oViewModel.getProperty("/shareSendEmailSubject"),
oViewModel.getProperty("/shareSendEmailMessage")
);
},
_renderSAPMessages: function(response, sStart, oControl) {
// Extract messages
// Catch logic works when we have multiple lines, re-initializes
// next line proccessing
this.messageArray = [];
var message;
var start = sStart + 14;
var resultString = response.substring(start);
var messageStart = resultString.indexOf("code") - 1;
var messageEnd = resultString.indexOf("details") - 2;
while (messageEnd > 0) {
message = "{" + resultString.substring(messageStart, messageEnd) + "}";
message = message.replace("severity\":", "type\": ");
//message = message.replace("message\":", "description\": ");
message = message.replace("message\":", "subtitle\": ");
message = message.replace("code\":", "title\": ");
message = message.replace("error", "Error");
message = message.replace("warning", "Warning");
message = message.replace("Z666Z", "\",\"description\": \"");
try {
message = JSON.parse(message);
message.title = message.title + " " + message.subtitle;
this.messageArray.push(message);
var streamEnd = resultString.indexOf("}]}") - 1;
messageEnd += 1;
if (streamEnd < messageEnd) {
// messageEnd = 0;
start = resultString.indexOf("sap-message: {") + 14;
if (start > 0) {
resultString = resultString.substring(start);
messageStart = resultString.indexOf("code") - 1;
messageEnd = resultString.indexOf("details") - 2;
} else {
messageEnd = 0;
}
} else {
resultString = resultString.substring(messageEnd);
messageStart = resultString.indexOf("code") - 1;
if (messageStart > 0) {
messageEnd = resultString.indexOf("}");
}
else {
break;
}
}
}
catch(err) {
start = resultString.indexOf("sap-message: {") + 14;
if (start > 0) {
resultString = resultString.substring(start);
messageStart = resultString.indexOf("code") - 1;
messageEnd = resultString.indexOf("details") - 2;
} else {
messageEnd = 0;
}
}
}
msgModel.setData(this.messageArray);
oMessagePopover.setModel(msgModel);
if (this.messageArray.length > 0) {
oMessagePopover.openBy(oControl);
}
},
_checkIfBatchRequestSucceeded: function(oEvent) {
var oParams = oEvent.getParameters();
var aRequests = oEvent.getParameters().requests;
var oRequest;
if (oEvent.getParameters().response.responseText.indexOf("sap-message: {") !== null) {
return true;
}
else
{
if (oParams.success) {
if (aRequests) {
for (var i = 0; i < aRequests.length; i++) {
oRequest = oEvent.getParameters().requests[i];
if (!oRequest.success) {
return false;
}
}
}
return true;
} else {
return false;
}
}
},
_checkMessagePopoverState: function() {
if (oMessagePopover.isOpen()) {
oMessagePopover.close();
}
}
});
}
/************ Call to Popover **************/
onHeaderSave: function() {
var that = this;
var oModelUpdateDeferred = jQuery.Deferred();
var bCheckSuccess;
var oModel = this.getView().getModel();
this._checkMessagePopoverState();
// abort if the model has not been changed
if (!oModel.hasPendingChanges()) {
MessageBox.information(
this.getResourceBundle().getText("noChangesMessage"), {
id: "noChangesInfoMessageBox",
styleClass: that.getOwnerComponent().getContentDensityClass()
}
);
return;
}
oModel.attachEventOnce("batchRequestCompleted", function(oEvent) {
// Get control to display message list next to
var oControl = sap.ui.getCore().byId("application-agreements-display-component---object--objectAgreementHeaderForm");
if (that._checkIfBatchRequestSucceeded(oEvent)) {
that._renderSAPMessages(oEvent.getParameters().response.responseText,
oEvent.getParameters().response.responseText.indexOf("sap-message: {"),
oControl);
if (oEvent.getParameters().response.responseText.indexOf("sap-message: {") < 0) {
bCheckSuccess = true;
} else {
bCheckSuccess = false;
}
oModelUpdateDeferred.resolve();
}
});
oModel.submitChanges({
success: function(oData, sResponse) {
},
error: function(oError) {
jQuery.sap.log.error("oData Failure", oError);
}
});
var readyToGo = function() {
if (bCheckSuccess === true) {
this.getView().byId("saveHeaderButton").setVisible(false);
this.getView().byId("cancelHeaderButton").setVisible(false);
this.getView().byId("editHeaderButton").setVisible(true);
this._bindHeaderReadOnly();
}
};
jQuery.when(oModelUpdateDeferred).done().then( jQuery.proxy(readyToGo, this) );
}