Sapui5 如何解决错误:“[object]”对于ManagedObject表个性化的聚合“persoService”无效

Sapui5 如何解决错误:“[object]”对于ManagedObject表个性化的聚合“persoService”无效,sapui5,sap-fiori,Sapui5,Sap Fiori,我正在实施表个性化sap.m.TablePersoController,它在Fiori Launchpad的ushell服务上保留用户特定的表设置 但当我在Fiori Launchpad中运行应用程序时,我看到以下错误 错误:[对象对象]对于ManagedObject sap.m.TablePersoControllerRotablePerso的聚合persoService无效 你能告诉我是什么问题以及如何解决吗 以下是相同的代码: var oPersonalizationService= wi

我正在实施表个性化sap.m.TablePersoController,它在Fiori Launchpad的ushell服务上保留用户特定的表设置

但当我在Fiori Launchpad中运行应用程序时,我看到以下错误

错误:[对象对象]对于ManagedObject sap.m.TablePersoControllerRotablePerso的聚合persoService无效

你能告诉我是什么问题以及如何解决吗

以下是相同的代码:

var oPersonalizationService= window.parent.sap.ushell.Container.getService("Personalization"); 

var oPersId = {
container : "AppPersSample2",
item : "mobiletable"
}; 

var oMobileTable = sap.ui.getCore().byId("idTable"); 

var oStartPersButton = sap.ui.getCore().byId("idButton");

var oPersonalizer = oPersonalizationService.getPersonalizer(oPersId);

console.log("oPersonalizer is:"+oPersonalizer);

// Create a table personalization controller

jQuery.sap.require("sap.m.TablePersoController");

jQuery.sap.require("sap.m.TablePersoDialog");

var oTablePersoController = new sap.m.TablePersoController("oTablePerso",{
table : oMobileTable,
persoService : oPersonalizer
});

// Use the personalization data to configure the table accordingly

oTablePersoController.activate();

我真的不知道错误是从哪里来的,但是为了调试,您可以拆分这行:

var oTablePersoController = new sap.m.TablePersoController("oTablePerso",{ table : oMobileTable, persoService : oPersonalizer });
进入:

试着设置断点

举个例子,下面是我的完整功能,即1.60.5版的ui.table

        createPersonalization: function (viewName) {
        var oTable = this.table;
        // Create a persistence key
        var oPersId = {
            container: viewName,
            item: viewName
        };

        // Get a personalization service provider from the shell (or create your own)
        this.oPersonalizationService = sap.ushell.Container.getService("Personalization");
        var oProvider = sap.ushell.Container.getService("Personalization").getPersonalizer(oPersId);

        this._oTPC = new sap.ui.table.TablePersoController({
            // table: oTable,
            // persoService: oProvider
        });
        this._oTPC.setPersoService(oProvider);
        this._oTPC.setTable(oTable);
    },

嗨,玛丽安,我试过你的建议了。此行抛出错误:this.\u oTPC.setPersoServiceProvider;我之前得到的错误仍然存在。好的,要么是来自oPersoId,要么是我的声明是var oPersId={container:viewName,item:viewName};也许你有一个不同的版本,试着看看文档,有一个样本太高玛丽安,我没有使用视图或组件等。只有一个index.html文件,我已经创建了表,并想做个性化。你能给我提个建议吗。持久化键部分中的名称是否应为视图名称?或者可能是什么?谢谢。viewName只是我函数中的一个变量,我使用字符串,就像你一样。您是否在api参考或此处的示例中尝试过该示例:?嗨,Marian,问题似乎也出在这一行:var oPersonalizationService=window.parent.sap.ushell.Container.getServicePersonalization。实际上,我的index.html文件存在于iFrame中,无法访问ushell服务。所以,如果我不使用window.parent,我会在正常窗口中运行应用程序时看到错误。如果我在Fiori launchpad中运行相同的应用程序,我会在table persocontroller部分中得到错误,因为我认为是同一个window.parent。欢迎提出任何建议。
        createPersonalization: function (viewName) {
        var oTable = this.table;
        // Create a persistence key
        var oPersId = {
            container: viewName,
            item: viewName
        };

        // Get a personalization service provider from the shell (or create your own)
        this.oPersonalizationService = sap.ushell.Container.getService("Personalization");
        var oProvider = sap.ushell.Container.getService("Personalization").getPersonalizer(oPersId);

        this._oTPC = new sap.ui.table.TablePersoController({
            // table: oTable,
            // persoService: oProvider
        });
        this._oTPC.setPersoService(oProvider);
        this._oTPC.setTable(oTable);
    },