鉴于我有以下关系:一个项目可以有多个成员,一个成员可以分配给多个项目。
Project(*)-------(*)Member
我第一次只想检索分配给特定项目的成员。这是我当前的oData元数据和json模型配置:
项目的JSON模型:
[
{
"Id": 1,
"Title": "Project 0",
"MemberIds": [1,2]
},
{
"Id": 2,
"Title": "Project 1",
"MemberIds": [3,4]
}
]
会员的JSON模型
[
{
"Id": 1,
"FirstName": "Robyn"
},
{
"Id": 2,
"FirstName": "Romero"
}
{
"Id": 3,
"FirstName": "Hattie",
},
{
"Id": 4,
"FirstName": "Chandra"
}
]
oData元数据
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0"
xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:DataServices m:DataServiceVersion="2.0"
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<Schema Namespace="NAMESPACE" xml:lang="en"
xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
xmlns:sap="http://www.sap.com/Protocols/SAPData">
<EntityType Name="Member" sap:content-version="1">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="Edm.Int32" Nullable="false" sap:label="Member Id"/>
<Property Name="FirstName" Type="Edm.String" Nullable="false"
MaxLength="255" sap:label="Member First Name" />
</EntityType>
<EntityType Name="Project" sap:content-version="1">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="Edm.Int32" Nullable="false" sap:label="Project Id"/>
<Property Name="Title" Type="Edm.String" Nullable="false"
MaxLength="255" sap:label="Project Title" />
<Property Name="MemberIds" Type="Collection(Edm.Int32)" sap:label="Project Member Ids" />
<NavigationProperty
FromRole="Project_toMembers"
Name="Members"
Relationship="NAMESPACE.ProjectToMembers"
ToRole="Member_toProjects" />
</EntityType>
<Association Name="ProjectToMembers" sap:content-version="1">
<End Role="Project_toMembers" Multiplicity="*" Type="NAMESPACE.Project"/>
<End Role="Member_toProjects" Multiplicity="*" Type="NAMESPACE.Member"/>
<ReferentialConstraint>
<Principal Role="Project_toMembers">
<PropertyRef Name="MemberIds"/>
</Principal>
<Dependent Role="Member_toProjects">
<PropertyRef Name="Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<EntityContainer Name="NAMESPACE"
m:IsDefaultEntityContainer="true">
<EntitySet Name="Projects" EntityType="NAMESPACE.Project"
sap:pageable="false" sap:content-version="1" />
<EntitySet Name="Members" EntityType="NAMESPACE.Member"
sap:pageable="false" sap:content-version="1" />
<AssociationSet
Name="Project_Member"
Association="NAMESPACE.ProjectToMembers">
<End Role="Project_toMembers" EntitySet="Members" />
<End Role="Member_toProjects" EntitySet="Projects" />
</AssociationSet>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
请求http://mymockserver/Projects(1)?$expand=Members
返回具有给定id的项目,但属性members
为空,并且不包含 - 如预期的那样 - 具有关联id&1;和1的成员对象。
我希望有人可以帮助我:)。
答案 0 :(得分:1)
我的猜测以下不是支持的类型
Type="Collection(Edm.Int32)"
查看MockServer来源,&#34;收集&#34;似乎没有引用作为一种类型。
它并未被列为允许的OData type,我快速搜索了该库,只能找到&#39; Collection&#39;在DataJS中引用。
如果你Add Your Own Requests to SAPUI5 MockServer,你仍然可以在MockServer中为它服务。还有一件我还没见过的东西&#34;收藏&#34;作为SAP Gateway或HANA XS中的类型,但Apache Olingo客户端和生产者支持猜测它。
答案 1 :(得分:-1)
我也在尝试做类似的事情,但是没有设法做到这一点。如果您查看UI5 SDK附带的购物车示例,您会发现他们还没有设法做到这一点。他们获得完整的实体集,然后只过滤所选项的数据。