我创建了一个 fiori 应用程序,并尝试使用控制器中的 odata 读取功能来获取数据。访问视图中的数据的正确方法是什么。 后端请求工作正常:/sap/opu/odata/sap/ZodatSRV/empSalesSet?$expand=set1,set2,set3,set4,set5&$filter=(category eq 'empSales')
查看不起作用的代码:
<Text text="{/category}"></Text>
<Text text="{empSalesSet/category}"></Text>
<Text text="{category}"></Text>
从视图中的结果集中访问数据的正确方法是什么?我需要对视图进行任何特定的绑定吗?请让我知道我错过了什么。
控制器代码:
onInit: function () {
var oDataModel = this.getView().getModel();
var aFilter = [];
var oFilter = {};
oFilter = new Filter("category", FilterOperator.EQ, "empSales");
aFilter = [oFilter];
oDataModel.read("/empSalesSet", {
urlParameters: {
"$expand": "set1,set2,set3,set4,set5"
},
filters: aFilter,
success: function (data, response) {},
error: function (oError) {}
});
}
在 Chrome 控制台中,我可以看到数据以 json 格式的嵌套数组形式出现
{
"d": {
"results": [{
"__metadata": {
"id": "",
"uri": "",
"type": "Znn"
},
"category": "empSales",
"set1": {
"results": []
},
"set2": {
"__metadata": {
"id": "",
"uri": "",
"type": "XXXXX"
},
"category": "todayTotal",
"salesTotal": "",
"marketingLineUpBestTotal": ""
},
"set3": {
"results": [{
"__metadata": {
"id": "vv",
"uri": "bb",
"type": "nn"
},
"category": "mtd",
"employeeName": "A Marc",
"sales": "1203.23",
"marketingLineUpBest": "5.000"
}, {
"__metadata": {
"id": "",
"uri": "",
"type": ""
},
"category": "cat",
"employeeName": "MUL2ECCDEV",
"sales": "0",
"marketingLine": "1"
}]
},
"set4": {
"__metadata": {
"id": "",
"uri": "",
"type": ""
},
"salesTotal": "1203.23",
"totalUnitsTotal": "5.000",
"usedUnitsTotal": "0",
"marketingLineUpBestTotal": "5.000"
},
"set5": {
"__metadata": {
"id": "",
"uri": "",
"type": ""
},
"category": "site",
"site": "1002",
"siteName": "106",
"empSales": {
"__deferred": {
"uri": ""
}
}
}
}]
}
}
在 xml 视图上应使用什么语法来显示第 3 组数组、第 4 组数组中的数据
您的结果是一个数组而不是一个对象,因此您的读取实际上是一个 OData 查询调用。
这种情况下直接/绝对绑定的匹配方式应该是:
<Text text="{empSalesSet/0/category}"></Text>
但你应该真正考虑一下你的真实场景。通常,查询调用(返回对象数组的 GET 方法 - 调用 OData 服务上的 _GET_ENTITY_SET 方法)应绑定到显示超过 1 个结果的列表控件(列表、表格等)。