如何从SmartTable的视图设置中删除列?

时间:2018-10-16 13:51:29

标签: sapui5

收到数据后,我想从SmartTable的视图设置中删除几列。

例如:

enter image description here

红色边框内的字段在视图设置上不可用。 我尝试了以下操作,但是不起作用。

var appMode = null;

sap.ui.controller("MA_Reporting.ext.controller.ListReportExt", {

    onInit: function () {

        //Model-Instanz holen       
        var oModel = this.getOwnerComponent().getModel();

        var oSmartTable = this.getView().byId("listReport");
        oSmartTable.setIgnoredFields("Lo,Lo100,Lo13");

        //var oSmartTable = this.getView().byId("listReport");
        var that = this;

        this._getAppParameters()
            .then(function (oData) {

                appMode = oData.getAppParameters.Appmode;

                var hostname = window.location.hostname;

                var oSmartTable = that.getView().byId("listReport");

                var orgsichtFilter = that.getView().byId("listReportFilter").getAllFilterItems().find(function (oElement) {
                    return oElement.getProperty("name") === "Orgsicht";
                }).getControl();

                if (hostname != "example.com") {

                    // Ausblenden Flag "öffentlich" bei Anlegen von Filter-Varianten
                    that.getView().byId("listReportFilter")._oSmartVariantManagement.setShowShare(false);

                    // Ausblenden Flag "öffentlich" bei Anlegen von Tabellen-Varianten
                    that.getView().byId("listReport")._oVariantManagement.setShowShare(false);

                }

                var variantManagement = that.getView().byId("listReport")._oVariantManagement;

                //Model-Instanz holen       
                var oModel = that.getOwnerComponent().getModel();

                variantManagement.getVariantItems().forEach(function (varItem) {

                    if (varItem.getText() == "liste" && appMode == "FI_ASSI") {
                        variantManagement.removeVariantItem(varItem);
                    }
                });

                // Default-Wert von Dropdown-Liste "Orgsicht" auf "Alle Mitarbeiter" setzen für ASSI-Rolle
                if (appMode == "FI_ASSI") {
                    orgsichtFilter.setSelectedKey("TEST_ASSI_01_");
                    oSmartTable.setIgnoredFields("Lo,Lo100,Lo13");
                }
            }, function (oError) {
                console.log(oError);
            });

    },

    _getAppParameters: function () {
        var oModel = this.getOwnerComponent().getModel();

        return new Promise(function (resolve, reject) {
            oModel.callFunction("/getAppParameters", {
                method: "GET",
                urlParameters: null,
                context: null,
                success: function (oData) {
                    resolve(oData);
                },
                error: function (oError) {
                    reject(oError);
                },
            });

        });
    },

    onExit: function () {},

    onBeforeRendering: function () {},

    onAfterRendering: function () {
    }
}); 

如您在上面的代码中看到的,oSmartTable.setIgnoredFields("Lo,Lo100,Lo13");行我试图隐藏该列,但是它不起作用。我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

在smartTable的XML定义中,使用属性ignoreFromPersonalisation并添加不应显示的字段名称。 这是一个示例:

<smartTable:SmartTable
                    id="SmartTableID"
   ignoreFromPersonalisation="Lo,Lo100,Lo13"> 

答案 1 :(得分:0)

您可能想看一下API:

  

setIgnoredFields:

     

为属性ignoreFields设置一个新值。   SmartTable控件必须在OData元数据中忽略的字段的CSV。   注意:   没有完成验证。请确保您不添加空格或特殊字符。   当使用null值或未定义的值调用该属性时,将恢复该属性的默认值。

     

setIgnoreFromPersonalisation:

     

为属性ignoreFromPersonalisation设置一个新值。   个性化对话框中未显示的字段的CSV。   注意:   没有完成验证。请确保您不添加空格或特殊字符。   当使用null值或未定义的值调用该属性时,将恢复该属性的默认值。

您可以看到setIgnoreFromPersonalisation确实完成了您要做的事情,其中​​setIgnoredFields方法与OData服务有关。

您应该始终使用新的方法或属性来查看API 之前https://sapui5.hana.ondemand.com/1.54.8/#/api/sap.ui.comp.smarttable.SmartTable