我可以在格式化程序中使用oData调用吗?

时间:2018-05-24 11:34:25

标签: odata sapui5 formatter

我已经实现了一个函数导入,它接受来自实体A的合作伙伴代码,并从实体B返回合作伙伴描述。不能在这里使用关联,因为代码不是实体A键的一部分而且SEGW不允许我创造一个。从实体B开始加载数据也不是一个选项,包含超过150.000个条目。函数导入工作正常,我的问题是格式化程序似乎没有等待从oData调用返回的数据,即使我已经附加了一个promise和" batchrequestcompleted"事件。我在调试器中看到了所有指令以正确的顺序执行(并返回了预期的结果)但看起来似乎没有等待。是否有某种技术可以用来使视图等待结果,或者我是否必须在我的实体A中附加额外的字段以便将描述存储在后端,这显然是我不想要的原因去做。 (真的很短)下面附有代码,有什么想法吗?

干杯,

格雷格

PS:当观察代码时,有人会很容易注意到值被返回两次,一次是在成功函数中,一次是在promise之后。毕竟,它只是用于测试,它们都不起作用: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 :(得分:0)

解决方法是在SEGW中创建关联并使用expand函数,这里没有格式化程序