将 $expand 参数传递给 OData 函数

Passing $expand parameter to an OData function

所以我使用 NW Gateway 实现了函数导入,我惊喜地发现我可以添加 oData 查询选项 $expand 并且它起作用了!

现在我想通过从我的 SAPUI5 应用程序传递一个 $expand 参数来利用它。但是我找不到使这项工作正常进行的方法。我的电话看起来像这样...

oModel.callFunction("/VehicleSearch", {
  method: 'GET',
  urlParameters: {"$expand": "Owner", "SearchString": searchString},
  success: function(oData, response) { },
  failure: $.proxy(function(oError) { } 
});

传递了 SearchString 参数,但未传递 $expand。

我在当前项目中没有使用 OData,因此我的知识可能不是最新的。据我所知 $expand 参数不适用于函数调用。如果您检查 callFunction 的实现,您会明白为什么只有搜索参数到达后端:函数中未定义的参数不会被传递。

我认为你不能扩展一个函数Import。当实体具有关联并且您正在查询与一种或多种其他类型关联的实体时,将使用 Expand。除非您将依赖实体放入展开列表中,否则它们不会自动获取。函数导入更像是函数调用。事实上,他们的能力有限 return.

您 运行 成为 "currently" 缺失的功能。 UI5 版本 1.38 为 oModel.callFunction.

添加 $expand

解决方法是使用 read 而不是 callFunction(将 $expand 添加到 url)。

updateData: function() {
    var oVizFrame = this.getView().byId("idVizFrame");
    var url = "QueryLogAnalysis?viewVariant=myFavorites&$expand=Values&$format=json";
    var parameters = {
        success: function(oData, response) {
            var resultData = JSON.parse(response.body);
            var dataModel = new sap.ui.model.json.JSONModel(resultData.d.results[0]);
            oVizFrame.setModel(dataModel,"expandWorkaround");
        },
        error: function(oError) {
            console.log(oError);    // i.e.
        }
    };
    var serviceUrl = this.getView().getModel().sServiceUrl;
    var oJsonModel = new sap.ui.model.odata.ODataModel(serviceUrl);
    oJsonModel.read( url, parameters );
}

UI5 版本 1.38 将为 oModel.callFunction

添加 $expand