Недействительное свойство в расширенном приложении FIORI

Мы внедряем расширенное приложение My Quotations Fiori. По сути, мы добавили в пользовательский интерфейс новое поле «Заказ на продажу». Поле извлекает данные из серверной части, поэтому мы также расширили нашу службу OData. С первого взгляда мы можем успешно вызвать данные. Но всякий раз, когда мы переходим к следующему представлению, нажимая кнопку «Изменить», мы получаем эту ошибку.

Свойство SalesOrder недействительно. Выберите «Обновить», чтобы обновить информацию о ценах.

Кто-нибудь знает, как это решить?

Вот наш собственный код для контроллера представления S3. Мы использовали WEB IDE для создания расширения btw. Вторая функция предназначена для создания заказа на продажу, когда предложение не имеет привязанного к нему SO.

manageSalesOrderFields: function() {
    alert("manageSalesOrderFields");
    var salesOrderId = "";

    // hide all fields
    view.byId("salesOrderLabel").setVisible(false);
    view.byId("salesOrderText").setVisible(false);
    view.byId("triggerSalesOrderLabel").setVisible(false);
    view.byId("triggerSalesOrderButton").setVisible(false);

    $.getJSON("/sap/opu/odata/sap/zlord_my_quotation_srv/QuotationHeaderSet('" + quotationId + "')",
        function(data) {
            alert("enterHere");
            salesOrderId = data.d.SalesOrder;
            alert(salesOrderId);
            if (salesOrderId !== "" ){
                view.byId("salesOrderLabel").setVisible(true);
                view.byId("salesOrderText").setVisible(true);
            }else{
                view.byId("triggerSalesOrderLabel").setVisible(true);
                view.byId("triggerSalesOrderButton").setVisible(true);
                view.byId("triggerSalesOrderButton").detachPress(sap.ui.controller("...").createSalesOrder);
                view.byId("triggerSalesOrderButton").attachPress(sap.ui.controller("...").createSalesOrder);
            }
        });
},
createSalesOrder: function () {
    var createSalesOrderDialog = new sap.m.Dialog("createSoDialog", {
        title: "Create Sales Order",
        icon: "sap-icon://sales-order",
        content: [
            new sap.ui.core.HTML({content:"<p style='margin:0;padding: 16px;'>Do want to create a sales order?</p>"})
        ],
        buttons:[
            new sap.m.Button({
                text: "Yes",
                press : function() {
                    var oModel = new sap.ui.model.odata.ODataModel('/sap/opu/odata/sap/zlord_my_quotation_srv/');
                    var oParameter = {
                        "QuotationID" : quotationId
                    };
                    oModel.callFunction('/CreateSalesOrder', 'GET', oParameter, 'null',
                        function (oData, oResponse) {
                            var responseMessage = JSON.stringify(oResponse.body);
                            var responseMessageStart = responseMessage.search('<d:Message>');
                            var responseMessageEnd = responseMessage.search('</d:Message>');
                            responseMessage = responseMessage.substring(responseMessageStart + 11, responseMessageEnd);

                            //show MessageToast
                            sap.m.MessageToast.show(responseMessage);
                            view.byId("triggerSalesOrderLabel").setVisible(false);
                            view.byId("triggerSalesOrderButton").setVisible(false);

                            console.log(responseMessage);
                        },
                        function (oError) {
                            sap.m.MessageToast.show('Error - see log');
                            console.log(oError);
                        }
                    );
                    createSalesOrderDialog.close();
                    createSalesOrderDialog.destroy();
                }
            }),
            new sap.m.Button({
                text: "No",
                press : function() {
                    createSalesOrderDialog.close();
                    createSalesOrderDialog.destroy();
                }
            })
        ]
    });
    createSalesOrderDialog.open();
}

Мы ничего не редактировали на следующем контроллере представления (CreateQuotations.view.controller.js), так как нам неактуально показывать номер SO в этом представлении.


person melai    schedule 09.07.2015    source источник
comment
Можешь добавить код? вы устанавливаете SalesOrder как свойство любого элемента управления SAPUI5?   -  person Sunil B N    schedule 10.07.2015
comment
Привет Сунил! Я отредактировал свое сообщение, чтобы отразить наш код.   -  person melai    schedule 10.07.2015


Ответы (1)


Ошибка из-за этой строки:

salesOrderId = data.d.SalesOrder;

Как исправить?

Шаг 1. Сначала проверьте результаты вызова на вкладке сети:

/sap/opu/odata/sap/zlord_my_quotation_srv/QuotationHeaderSet('quotationIdId');

Образец:

введите описание изображения здесь

Шаг 2. Проверьте иерархию результатов. Как?

console.log(data); //in success call

Шаг 3. Затем измените структуру своего утверждения на что-то вроде этого

salesOrderId = data.d.results[0].SalesOrder;

Надеюсь это поможет!

person Sunil B N    schedule 13.07.2015
comment
Привет Сунил! Это не похоже на причину ошибки. salesOrderId в порядке. Мы могли бы легко получить данные для этого, используя наш код. У меня есть звонок, и он показывает правильный идентификатор заказа на продажу. Моя проблема возникает при следующем просмотре, когда мы нажимаем кнопку редактирования. - person melai; 14.07.2015