Могу ли я использовать вызовы oData в форматере? - PullRequest
0 голосов
/ 24 мая 2018

Я реализовал функцию импорта, которая принимает код партнера от объекта A и возвращает описание партнера от объекта B. Здесь нельзя использовать ассоциации, так как код не является частью ключа объекта A, а SEGW не позволяет мне создаватьодин.Загрузка данных из объекта B в начале тоже не вариант, содержит более 150 000 записей.Импорт функций работает просто отлично, моя проблема в том, что средство форматирования, похоже, не ожидает данных, возвращающихся из вызова oData, даже если я прикрепил и обещание, и событие «batchrequestcompleted».Я смотрел все инструкции, выполненные в правильном порядке внутри отладчика (и возвращал ожидаемый результат), но кажется, что представление не ждет.Есть ли какая-то техника, которую я могу использовать, чтобы заставить представление ждать результата, или мне нужно прикрепить дополнительные поля в моей сущности А, чтобы сохранить описание в бэкэнде, что по понятным причинам я не хочу делать,(Действительно короткий) код, прикрепленный ниже, есть идеи?

Приветствия,

Грег

PS: кто-то легко заметит, наблюдая за кодом, что значение возвращается дважды, один разв функции успеха и один раз после обещания.Это просто для тестирования, в конце концов, ни один из них не работает: D

        textPartner : function (sValue) {
            if (!sValue) {
                return "";
            }
            var that = this.getParent().getParent().getParent().getParent().getParent().getParent().getParent().getParent().getController();
            var oModel = this.getModel();
            var oModelUpdateDeferred = jQuery.Deferred();

            oModel.attachEventOnce("batchRequestCompleted", function(oEvent) {
                if (that._checkIfBatchRequestSucceeded(oEvent)) {
                    oModelUpdateDeferred.resolve(); 
                }
            });

            oModel.callFunction("/Get_Partner_Name", { urlParameters: { Partner_Code: sValue },
                success: function(oData, sResponse) {
                    sValue = oData.ReturnValue;
                    return sValue;
                },
                error: function(oError) {
                    jQuery.sap.log.error("oData Failure", oError);
                }
            }); 
            var readyToGo = function() {
                return sValue;
            };
            jQuery.when(oModelUpdateDeferred).done().then( jQuery.proxy(readyToGo, this) ); 
        }

1 Ответ

0 голосов
/ 25 мая 2018

Обходной путь - создание ассоциации в SEGW и использование функции расширения, здесь нет форматера

...