通过一个实际例子,理解 SAP UI5 sap.ui.model
本教程前三篇文章,我们详细介绍了 sap.ui.model.odata.v2.ODataModel 这个 API 提供的 read 方法的使用细节。
-
SAP UI5 应用开发教程之一百六十四 - 通过 sap.ui.model.odata.v2.ODataModel 的 read 方法,读取 OData 数据的编程方式讲解
-
SAP UI5 应用开发教程之一百六十五 - SAP UI5 应用如何采取 JavaScript 代码调用 OData API 读取满足过滤条件的业务数据($filter 操作)
-
SAP UI5 应用开发教程之一百六十六 - SAP UI5 OData API 中针对 Edm.DateTime 日期时间类型的操作详解
有朋友提出疑问,说对 SAP UI5 官网 里介绍的这个 read 方法的可选参数 mParameters
的 context
字段有所疑问,想通过一个具体例子来学习其概念。
![](https://img.haomeiwen.com/i2085791/4b9b5e4092a78ed3.png)
本文咱们就来学习这个 context 概念。
本文之前我们展示了 OData 协议支持的过滤操作 $filter
在 SAP UI5 OData API 中是如何调用的:
那么假设我想查询 id 为 10248 这个订单的详细数据。首先根据这个 url https://services.odata.org/V2/Northwind/Northwind.svc/$metadata
拿到 NorthWind OData 服务的元数据:
![](https://img.haomeiwen.com/i2085791/5cadd986125e7b06.png)
从中观察到 Order 模型的 key 为 OrderID. 那么我们如果想根据 key 字段来读取 OData 节点的数据,除了使用 $filter
操作符之外,有一种更加简便的访问方式,即直接将 key 字段值拼接在 Orders 这个 EntitySet 后面,完整 url 如下:
https://services.odata.org/V2/Northwind/Northwind.svc/Orders(10248)
![](https://img.haomeiwen.com/i2085791/6f7e5a36b5f77cbc.png)
我们仔细查看这个订单数据,发现了 Order_Details
这个节点,其数据默认没有在当前读取请求内被返回,仅仅返回了如果想读取该数据,需要使用的 url 为 https://services.odata.org/V2/Northwind/Northwind.svc/Orders(10248)/Order_Details
:
![](https://img.haomeiwen.com/i2085791/f98798701800e9c5.png)
我们再访问 https://services.odata.org/V2/Northwind/Northwind.svc/Orders(10248)/Order_Details
,就能看到三条
Order 明细数据:
![](https://img.haomeiwen.com/i2085791/7d2b413f83affc5e.png)
每条明细数据包含行项目的产品 ID,即字段 ProductID
,还有该产品购买的数量 Quantity
以及单价 UnitPrice
.
在 metadata 里,Order 节点和 Order_Details
节点的导航关系,通过名叫 Order_Details
的 NavigationProperty
进行关联。
![](https://img.haomeiwen.com/i2085791/506de6b23fb51f82.png)
也就是说,我们要读取一个订单的明细数据,前提
是先获得该订单的抬头数据即获得 Order 节点的数据,然后再通过 Navigation Property,Order_Details
进行进一步读取。这里的 Order 抬头数据,相对于 Order_Details
数据而言就是后者的 上下文
即 Context.
我们下面就来学习如何使用 SAP UI5 OData API 进行编码来读取指定 ID 的 Order 以及 Order Details 数据。