我正在尝试基于现有和工作的oData模型来模拟一些数据。模拟服务器工作,但我正在努力使$expand
做它的工作。我认为这主要是因为我不了解存储JSON的位置或方式。
元数据文件从工作服务逐字复制,包含所有实体,实体集,关联等。
以下是一些相关内容。来自Users
实体:
<NavigationProperty Name="Dealers" Relationship="Y_DP_CORE_SRV.User_Dealer" FromRole="FromRole_User_Dealer" ToRole="ToRole_User_Dealer" />
协会:
<Association Name="User_Dealer" sap:content-version="1">
<End Type="Y_DP_CORE_SRV.User" Multiplicity="1" Role="FromRole_User_Dealer" />
<End Type="Y_DP_CORE_SRV.Dealer" Multiplicity="*" Role="ToRole_User_Dealer" />
<ReferentialConstraint>
<Principal Role="FromRole_User_Dealer">
<PropertyRef Name="Id" />
</Principal>
<Dependent Role="ToRole_User_Dealer">
<PropertyRef Name="Id" />
</Dependent>
</ReferentialConstraint>
</Association>
我可以Users('PRX-00015')
。我无法获得Users('PRX-00015')/Dealers
或Users('PRX-00015')?$expand=Dealers
。没有错误,也没有数据。
这是Users.JSON
:
[{
"__metadata": {
"id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Users('PRX-00015')",
"uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Users('PRX-00015')",
"type": "Y_DP_CORE_SRV.User"
},
"Id": "PRX-00015",
"FullName": "Jorg",
"Email": "",
"Telephone": "",
"InternalUser": false,
"Enabled": true,
"Dealers": {
"results": [{
"__metadata": {
"id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
"uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
"type": "Y_DP_CORE_SRV.Dealer"
},
"Id": "AA2002"
}, {
"__metadata": {
"id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
"uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
"type": "Y_DP_CORE_SRV.Dealer"
},
"Id": "AA1046"
}]
},
}]
我还可以使用未扩展版本的Dealers
并将数组移动到它自己的Dealers.json
文件中,在这种情况下,该行看起来像
"Dealers": {
"__deferred": {
"uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Users('PRX-00015')/Dealers"
}
}
Dealers.json
[{
"__metadata": {
"id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
"uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA2002')",
"type": "Y_DP_CORE_SRV.Dealer"
},
"Id": "AA2002"
}, {
"__metadata": {
"id": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
"uri": "http://localhost/sap/opu/odata/sap/Y_DP_CORE_SRV/Dealers('AA1046')",
"type": "Y_DP_CORE_SRV.Dealer"
},
"Id": "AA1046"
}]
所有这些都导致空Dealers
数组(Dealers.length
为0)。有谁知道这是如何工作的?
答案 0 :(得分:0)
通常项目结构如下:
webapp/
- localService/
- mockdata/
- Y_DP_CORE_SRV.User
- Y_DP_CORE_SRV.Dealer.json
- metadata.json
但是文件的位置并不重要,重要的是你的MockServer是如何实现的。 MockServer应该模拟真实服务器的真实网址,并从您提供的文件中返回虚假数据。您是否已经看过这个例子 - https://sapui5.hana.ondemand.com/test-resources/sap/ui/templateapps/demokit/master-detail/webapp/localService/mockserver.js?
关于扩展。通常,在xml视图中,您可以通过定义expand参数来扩展具有绑定属性的相关实体。在JavaScript中它的工作方式类似。当我到达我的计算机时,我可以提供一些示例,但它与MockServer并不真正相关,因为所有扩展参数保持不变,无论它是来自真实后端的模拟数据还是真实数据......
更新:以下是如何从视图和访问属性中扩展模型的示例:
<QuickView
binding="{path: 'to_Supplier', parameters: { expand: 'to_Address,to_PrimaryContactPerson' }}">
<QuickViewPage
title="{CompanyName}"
description="{to_PrimaryContactPerson/FormattedContactName}">
<QuickViewGroup>
<QuickViewGroupElement value="{to_Address/FormattedAddress}"/>
</QuickViewGroup>
</QuickViewPage>
</QuickView>
答案 1 :(得分:0)
您为读取OData编写了哪些代码? OData在读操作时需要urlParameters:
oModel.read("/User", {
urlParameters:{
"$expand" : "Dealers"
},
success: function (oData) {
var oJson = new sap.ui.model.json.JSONModel();
oJson.setData(oData);
oVista.setModel(oJson);
}
});
您必须阅读用户集并使用经销商的导航属性进行扩展,因此您必须获得一个具有相应用户经销商的树,其来自用户JSON对象的经销商属性,类似于:
User: {
property1 : value1,
... : ...,
Dealers : [
{ dealer1Property1 : dealer1Value1,
.... : .... },
{ dealer2Property1 : dealer2Value2,
.... : .... },
... ]
}
之后,Skay的xml代码必须成功。