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

Can I use oData calls within a formatter?

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

干杯,

格雷格

PS:有人在观察代码时很容易注意到值返回了两次,一次在成功函数中,一次在承诺之后。这只是为了测试,毕竟,none 有效 :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) ); 
        }

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