云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

谷歌云_恒创虚拟主机_是什么

小七 141 0

欢迎来到我们的下一轮"SAP云平台SDK服务开发回合",公开OData v4服务,同时使用数据源API使用OData v2服务的数据。

上一轮我们学习了5个支持操作的基本实现。现在让我们继续介绍数据源API为odatav2消费提供的更多功能。我们将重点讨论查询操作,并使对用户的调用更复杂一些。

顺便说一句,这个博客是初学者系列教程的一部分。

让我们跳过前提条件和准备部分,它与以前的教程相同。相反,让我们直接讨论我们想做什么。

我们想开发一个ODataV4服务,它简化了对后端数据的访问在后端,我们有业务伙伴、联系人和产品(以及更多其他数据)我们只想揭露那些作为供应商的商业伙伴。我们只需要一些基本的信息和供应商一起,我们要揭露他们的产品从产品中,我们只公开基本信息此外,我们还公开了一些我们自己计算的数据此外,我们还想公开供应商的主要联系人,但只有基本信息

这是对我们任务的高级描述。技术上是如何实现的?我们拭目以待。

让我们跳过项目创建,它总是一样的。让我们跳过模型…?哦,不,我们需要一个新的模型:

模型

在本教程中,我们关注供应商:

实现

如上所述,我们希望关注查询操作,以便了解一些有趣的功能。

让我们浏览我们的任务列表。

简化模型

这在我们的edmx文件中表示。将3个后端实体合并为一个实体,并重命名属性名称

下表尝试总结修改:

注意:我们并没有列出我们跳过的所有后端服务属性

合并业务伙伴、联系人、产品实体的数据

我们的目的是只有一个实体提供对用户感兴趣的数据的简短概述。因此,我们希望将业务伙伴、主要联系人及其产品的数据片段放在一个实体中,而不是放在三个实体中。由于这3个实体是相关的,因此可以通过导航属性访问它们。意思是说,当使用后端服务时,淘客易,我们可以读取一个业务伙伴,然后从那里我们可以通过导航属性导航到相关产品

/sap/opu/odata/IWBEP/GWSAMPLE\u BASIC/BusinessPartnerSet('0100000010')/ToProducts

因为业务伙伴不是人,而是公司,云产品,我们可以通过以下URL导航到(人类)联系人:

/sap/opu/odata/IWBEP/GWSAMPLE\u BASIC/BusinessPartnerSet('0100000010')/ToContacts

现在,在odata中,不再单独调用以下导航属性,我们可以通过在URL

/IWBEP/GWSAMPLE\u BASIC/BusinessPartnerSet中添加参数$expand来合并相关实体的数据?$expand=ToProducts,ToContacts

注:调用此URL时,可能需要耐心等待,因为数据量可能很大。请记住,这是一项公共服务,每个人都可以创建额外的条目

注意:我们将GWSAMPLE\u BASIC服务用作后端v2服务,它允许对样本数据进行重置。这是名为"RegenerateAllData"的函数导入,参见这里的说明

通过编程,$扩展实现如下:

注意:在后端服务中,业务伙伴可以有多个联系人。在我们的v4服务中,我们只使用我们找到的第一个联系人。

减少数据量

在比较暴露模型和消耗模型的元数据时,很明显,我们正在通过减少属性的数量来显著减少信息量。

请参阅附录部分,以比较我们公开的v4服务和消耗的v2服务的结构。

我们在几个方面减少了数据量:实体更少,没有复杂类型更少的属性数将一对多导航聚合为一个属性

当涉及到减少属性数量时,这很容易,我们在以前的博客中做过:获取数据,只选择与我们相关的内容。

现在,有更好的方法:我们为什么要获取实际上不需要的数据?为了避免网络开销,我们应该只获取我们需要的数据。

这可以通过$select实现。

我们已经讨论了$select的公开/设置,但是现在我们在调用/使用后端服务时需要它。

我们希望如何调用后端服务的示例:

//BusinessPartnerSet?$select=BusinessPartnerID,CompanyName,Address

此外,在我们对后端的调用中,我们不仅要对业务伙伴应用$select语句,还要对扩展的联系人和产品应用$select语句这是可能的。我们必须指定扩展属性的限定名称,在导航属性名称前面加上斜杠

/

在我们的示例中:

…&$select=BusinessPartnerID,ToProducts/ProductID

这在下面的完整URL中考虑

https://sapes5.sapdevcenter.com/sap/opu/odata/IWBEP/GWSAMPLE\u BASIC/BusinessPartnerSet?$expand=ToProducts,ToContacts&$select=BusinessPartnerID,CompanyName,Address,ToProducts/ProductID,ToProducts/Price,ToProducts/TypeCode,软件企业条件,ToContacts/FirstName,ToContacts/LastName,ToContacts/ContactGuid,ToContacts/DateOfBirth

这么长的URL很难读?可以尝试以下可滚动格式:

注意:OData v2不支持将$select应用于ComplexType的嵌套属性

在我们的代码中,我们添加了$select语句如下:

在API中,它是一个字符串列表,表示属性的名称。