将$ expand参数传递给OData函数

时间:2016-03-18 06:04:37

标签: odata sapui5

所以我使用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。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您遇到了“当前”缺失的功能。 UI5版本1.38为oModel.callFunction添加 $ expand

解决方法是使用读取而不是 callFunction (将$ expand添加到网址)。

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 );
}

答案 2 :(得分:0)

我认为你无法扩展导入功能。当实体具有关联并且您正在查询与一个或多个另一个类型相关联的实体时,将使用展开。除非您将它们放在展开列表中,否则不会自动提取相关实体。函数导入更像是函数调用。事实上,他们只能限制你的回报。

答案 3 :(得分:0)

UI5版本1.38将为oModel.callFunction

添加$ expand