SAPUI5 Mock Server - 如何添加双向多对多关联

时间:2015-01-23 19:09:43

标签: odata sapui5

鉴于我有以下关系:一个项目可以有多个成员,一个成员可以分配给多个项目。

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的成员对象。

我希望有人可以帮助我:)。

2 个答案:

答案 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附带的购物车示例,您会发现他们还没有设法做到这一点。他们获得完整的实体集,然后只过滤所选项的数据。