Скрыть кнопки "Подтвердить / Отклонить" на главной странице Fiori

Я хочу скрыть кнопки "Подтвердить / Отклонить" на странице сведений о приложении Fiori на основе определенных условий фильтрации. Фильтры добавляются в представление Master List (вид слева) через расширение вида / контроллера. Теперь, если пользователь выбирает определенный тип фильтра (допустим, прошлые заказы), тогда кнопка подтверждения / отклонения не должна отображаться на странице сведений о заказе. Вот как я определил кнопки в представлении "Заголовок / Детали"

 this.oHeaderFooterOptions = {
                       oPositiveAction: {                       
                        sI18nBtnTxt: that.resourceBundle.getText("XBUT_APPROVE"),
                        id :"btn_approve",
                        onBtnPressed: jQuery.proxy(that.handleApprove, that)
                       },

                   oNegativeAction: {                   
                    sI18nBtnTxt: that.resourceBundle.getText("XBUT_REJECT"),
                    id :"btn_reject",
                    onBtnPressed: jQuery.proxy(that.handleReject, that)
                   },

Однако во время выполнения этим кнопкам не присваиваются идентификаторы, которые я упомянул, вместо этого они создаются с идентификаторами __button0 и __button1.

Есть ли способ скрыть эти кнопки в режиме просмотра основного списка?

Спасибо.

3 ответа

Рекомендуется: принципы проектирования SAP Fiori говорят только об отключении кнопок нижнего колонтитула вместо изменения видимости Button, Узнайте больше здесь о Руководящих принципах

Основываясь на условиях фильтра, вы можете отключить следующим образом:

this.setBtnEnabled("btn_approve", false);

чтобы снова включить: this.setBtnEnabled("btn_approve", true);

Точно так же вы можете изменить текст кнопки, используя this.setBtnText("btn_approve", "buttonText");

Другой способ: как сказал TobiasOetzel, используйте

this.setHeaderFooterOptions(yourModifiedHeaderFooterOptions);

Вы можете вызывать setHeaderFooterOptions на вашем контроллере несколько раз, например:

//Code inside of the controller
_myHeaderFooterOptions = {
    oPositiveAction: {                       
        sI18nBtnTxt: that.resourceBundle.getText("XBUT_APPROVE"),
        id :"btn_approve",
            onBtnPressed: jQuery.proxy(that.handleApprove, that)
        },
    oNegativeAction: {                   
        sI18nBtnTxt: that.resourceBundle.getText("XBUT_REJECT"),
        id :"btn_reject",
        onBtnPressed: jQuery.proxy(that.handleReject, that)
    }
},

//set the initial options
onInit: function () {
    this.setHeaderFooterOptions(this._myHeaderFooterOptions);
},

//modify the options in an event
onFilter : function () {
    //remove the negative action to hide it
    this._myHeaderFooterOptions.oNegativeAction = undefined;
    this.setHeaderFooterOptions(this._myHeaderFooterOptions);
},

//further code

поэтому, манипулируя _myHeaderFooterOptions, вы можете влиять на отображаемые кнопки.

Во-первых, вы должны использовать sId вместо id при определении HeaderFooterOptions вы можете получить кнопки нижнего колонтитула sId Например, кнопка "Подтвердить".

this._oControlStore.oButtonListHelper.mButtons["btn_approve"]

Пожалуйста, проверьте следующий фрагмент кода:

S2.view.controller: у вас есть обработчик события фильтра, определенный ниже, и вы используете EventBus для публикации события OrderTypeChanged в S3.view.controller,

onFilterChanged: function(oEvent) {
    // Set the filter value, here i use hard code
    var sFilter = "Past Orders";
    sap.ui.getCore().getEventBus().publish("app", "OrderTypeChanged", {
         filter: sFilter
    });
}

S3.view.controller: Подписаться на событие OrderTypeChanged от S2.view.controller,

onInit: function() {
    ///
    var bus = sap.ui.getCore().getEventBus();
    bus.subscribe("app", "OrderTypeChanged", this.handleOrderTypeChanged, this);

},

getHeaderFooterOptions: function() {

    var oOptions = {

        oPositiveAction: {
            sI18nBtnTxt: that.resourceBundle.getText("XBUT_APPROVE"),
            sId: "btn_approve",
            onBtnPressed: jQuery.proxy(that.handleApprove, that)
        },

        oNegativeAction: {
            sI18nBtnTxt: that.resourceBundle.getText("XBUT_REJECT"),
            sId: "btn_reject",
            onBtnPressed: jQuery.proxy(that.handleReject, that)
        }
    };
    return oOptions;

},
handleOrderTypeChanged: function(channelId, eventId, data) {
    if (data && data.filter) {
        var sFilter = data.filter;
        if (sFilter == "Past Orders") {
            this._oControlStore.oButtonListHelper.mButtons["btn_approve"].setVisible(false);
        }
        //set Approve/Reject button visible/invisible based on other values 
        //else if(sFilter == "Other Filter") 
    }
}
Другие вопросы по тегам