如何从OData服务的导航属性获取数据

如何从OData服务的导航属性获取数据,odata,sapui5,Odata,Sapui5,我们正在创建主详细信息UI5应用程序。我正在调用OData服务,并且能够显示来自主列表中的实体集的数据。在细节部分,我们正在创建一个表单,我想显示来自导航实体集的数据。正如我所知道的,我们不能在一次调用中调用导航实体集,如何才能做到呢 <EntityType Name="Product" sap:content-version="1"> <Key> <PropertyRef Name="ProductID"/> </Key

我们正在创建主详细信息UI5应用程序。我正在调用OData服务,并且能够显示来自主列表中的实体集的数据。在细节部分,我们正在创建一个表单,我想显示来自导航实体集的数据。正如我所知道的,我们不能在一次调用中调用导航实体集,如何才能做到呢

<EntityType Name="Product" sap:content-version="1">
    <Key>
        <PropertyRef Name="ProductID"/>
    </Key>
    <Property Name="ProductID" Type="Edm.String" Nullable="false" MaxLength="10" sap:label="Product ID" sap:updatable="false"/>
    <Property Name="TypeCode" Type="Edm.String" Nullable="false" MaxLength="2" sap:label="Type Code"/>
    <NavigationProperty Name="ToSalesOrderLineItems" Relationship="GWSAMPLE_BASIC.Assoc_Product_SalesOrderLineItems" FromRole="FromRole_Assoc_Product_SalesOrderLineItems" ToRole="ToRole_Assoc_Product_SalesOrderLineItems"/>
    <NavigationProperty Name="ToSupplier" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_Products" FromRole="ToRole_Assoc_BusinessPartner_Products" ToRole="FromRole_Assoc_BusinessPartner_Products"/>
</EntityType> 


我想向供应商展示
的数据

好吧,实际上,您可以在一次请求中获得它

假设您的“业务伙伴”实体有一个名称字段,您希望显示如下内容:


您可以做的是使用常规绑定语法(使用相对绑定),这通常在详细信息视图中完成:


如果您直接尝试此操作,您将无法在“供应商名称”文本控件中获得任何内容。这是因为,默认情况下,您没有请求扩展
ToSupplier
导航(请参阅第4.6章)

您应该在调用细节视图的地方执行此操作(在默认模板中,这是在细节控制器的名为
\u bindView
的方法中完成的)。expand可以作为参数传递给自身,如下所示:

oView.bindElement({
路径:sMyPathToAProduct,
参数:{
扩展:“ToSupplier”
}
});

可以展开任意多个导航,也可以展开任意深的导航(可以在该参数中以逗号分隔的列表形式传递导航)。这里唯一的限制是您的后端应该支持Expans/对于扩展的深度可能有一些限制。

实际上,您可以在一个请求中获得它

假设您的“业务伙伴”实体有一个名称字段,您希望显示如下内容:


您可以做的是使用常规绑定语法(使用相对绑定),这通常在详细信息视图中完成:


如果您直接尝试此操作,您将无法在“供应商名称”文本控件中获得任何内容。这是因为,默认情况下,您没有请求扩展
ToSupplier
导航(请参阅第4.6章)

您应该在调用细节视图的地方执行此操作(在默认模板中,这是在细节控制器的名为
\u bindView
的方法中完成的)。expand可以作为参数传递给自身,如下所示:

oView.bindElement({
路径:sMyPathToAProduct,
参数:{
扩展:“ToSupplier”
}
});

可以展开任意多个导航,也可以展开任意深的导航(可以在该参数中以逗号分隔的列表形式传递导航)。这里唯一的限制是您的后端应该支持扩展/可能对扩展的深度有一些限制。

另一个问题:如果我想在我的主控制器中从ToSupplier获取值,并想在控制台中打印该值,该怎么办?您有两个选项:要么将
扩展到Supplier
主列表中所有项目的导航(在绑定项目时,您可以直接在XML中执行此操作,例如,
items=“{path:'/ProductSet',parameters:{expand:'ToSupplier'}}”
)。然后可以从项目的绑定上下文中获取数据本身。或者,您可以在需要数据时进行编程读取(查看)。另一个问题:如果我希望从我的主控制器中的ToSupplier获取值,并希望在控制台中打印该值,该怎么办?您有两个选项:或者展开主列表中所有项的
ToSupplier
导航(当您绑定项时,您可以直接在XML中执行此操作,例如,
items=“{path:'/ProductSet',parameters:{expand:'ToSupplier'}}”
)。然后您可以从项的绑定上下文中获取数据本身。或者,您可以在需要数据时执行编程读取(查看)。可能的重复可能的重复