Sapui5 应用程序在后端系统上部署时崩溃

Sapui5 应用程序在后端系统上部署时崩溃,sapui5,Sapui5,我有一个与SAP Web IDE(个人版)配合使用的应用程序。我在后端系统中部署了该应用程序,当我开始测试时,在我试图保存一个错误条目(想看看错误消息是否如预期的那样出现)后,我得到了错误“无法读取未定义的属性'getParent'。“Undefined”是指我在我的基本控制器中使用的消息popover。异常不会发生在我的代码中,而是发生在MessagePopover-dbg.js中(快照附在下面,错误行1209) Web IDE上的SAPUI5版本:1.44.12 后端系统上的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%确定我没有遗漏任何东西。有什么想法吗

/*******基本控制器*************/
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) );             
        }