本博客是OData V4基于代码的开发系列博客的一部分
OData V4基于代码的实现–概述
OData V4基于代码的实现I(基本接口,读访问)
OData V4基于代码的实现I(基本接口,创建和更新)
为了访问下面的源代码,您必须在新的ES5演示系统中注册
在这里注册ES5演示帐户
有关ES5演示系统的更多详细信息,您可以在我下面的博客中找到
新的SAP网关演示系统可用
如果您有ES5用户,云服务器那个好,您可以通过以下链接:
数据提供程序类–zcl\ U e2e001\ U odata\ U v4\ U so\ U数据
模型提供程序类–zcl\ U e2e001\ U odata\ U v4\ U so\ U模型
异常类–zcx\ U e2e001\ U odata\ U v4\ U so
接口–zif\ U e2e001\ U odata\ U v4\ U so\ U类型
消费视图–销售订单–ze2e001\ U c\ U销售订单
消费视图–销售订单项目–ze2e001\U c\U salesorderitem
界面视图–ze2e001\U i\U salesorderitem\U e
在关于OData V4基于代码的实现的第二个博客中,我想展示如何在演示服务中启用创建和更新功能,以便可以执行以下操作。
创建销售订单更新销售订单删除销售订单创建销售订单项目更新销售订单项目删除销售订单项目
数据提供程序类
数据提供程序类包含创建、更新和删除数据的基本接口方法的通用实现。以下方法:
/iwbep/if\u v4\u dp\u basic~创建\u实体/iwbep/if\u v4\u dp\u basic~更新\u实体/iwbep/if\u v4\u dp\u basic~删除必须重新定义的实体
。
完整代码可在ES5中找到:
https://sapes5.sapdevcenter.com/sap/bc/adt/oo/classes/zcl\u e2e001\u odata\u v4\u so\u data/source/main?version=active&sap client=002
如何创建这些有用的链接在Thomas Fiedlers的博客中进行了描述。
此外,还为实体集salesforder和salesforderitems添加了特定的实体集推进。以下方法:
创建销售订单创建\u salesorderitem更新销售订单更新\u salesorderitem删除销售订单删除
我将在下面解释这些方法的功能。完整的代码显示在下面的部分中。
我们从方法/iwbep/if\u v4\u dp\u basic~ create\u entity开始,例如,如果客户访问带有Post请求的实体集,则调用该方法,例如Post…./salesord。
因为我们可以看到,与读取操作相比,编码的通用部分相当小。这个编码基本上是通过io\ U请求->get\ U实体\ U类型的方法来检查访问了哪个实体集。我们服务的实体集的名称已经在接口zifèe2e001èodataèv4èsoètypes中定义。
实体类型指定的方法createèsalesorder和createèsalesorderitem都从实体类型特定的数据类型定义开始,购物返利平台,这些数据类型将保存新创建的实体返回的数据和已创建的数据由客户端通过http有效负载提供。
我们首先必须通过io_请求对象检索todo列表。
通过这个todo列表,我们可以检查我们的服务实现是否必须从请求的有效负载检索业务数据。
下一步是检查有效负载是否包含创建新请求所需的所有属性整体性。如果有效负载不包含实体类型的所有属性,计算机大数据,SAP网关框架将在todo列表中设置标志ls\ U todo\ U list-process-partial\ U busi\ U data。
由于销售订单实体类型包含在创建销售订单(例如创建日期)后计算的属性,因此partial\ U busi\ U data标志将始终为空设置。因此,在单独调用我们的BAPI时,我们必须检查强制属性。
如果强制属性丢失,则会引发异常,告诉客户缺少属性Customer或TransactionCurrency。
现在,我们可以调用BAPI BAPI EPM SU CREATE来创建新的销售订单。如果发生错误,我们的Bapi返回消息将添加到消息容器中,并通过引发异常发送回SAP网关框架。
如果一切正常,我们可以从我们创建的CDS视图读取新创建的销售订单的数据,并使用方法将其发送回框架io\ U response->set\ u busi\ u data.
作为最后一步,我们必须通知框架我们的实现已经处理了哪些任务。
对于创建salesorder项目,我们必须使用Bapi Bapi\ U EPM\ U SO\ U CHANGE.
完整的编码可以在ES5中找到:
https://sapes5.sapdevcenter.com/sap/bc/adt/oo/classes/zcl\u e2e001\u odata\u v4\u so\u data/source/main?version=active&sap client=002
方法/iwbep/if\u v4\u dp\u basic~update\u实体的通用实现部分类似于基本创建方法。检查访问了哪个实体集后,将调用实体集特定的更新方法。
首先,必须定义实体类型特定的和genric数据类型。除了基于CDS视图的数据类型之外,我们还必须定义数据类型,以便将请求有效负载发送到Bapi,以及用于告诉Bapi调用方提供了哪些字段的结构。
todo列表可以包含以下标志:process-busi\ U data、process-key\ U data和process-process-partial\ U busi\ U data以及返回业务数据。由于OData V4中更新数据的推荐方法是Patch方法,因此大多数情况下不会设置process-partial\u busi\u data标志。
业务数据从结构ls\u salesorder移动到Bapi特定的数据结构ls\u salesorder\u rfc以及相应x结构中的相应字段ls\u salesorder\u x\u rfc.