在SAP Cloud Platform ABAP环境中调用SAP S/4 HANA Cloud中的OData服务时,您可能会遇到这样的问题:生成的服务消耗模型不支持度量单位的转换。
另一个问题或挑战可能是您希望转换出口在某个度量单位字段的数据时变为活动状态读取已消费的服务。
让我们看一下下面的OData服务销售订单(A2X),它允许外部应用程序与SAP s/4HANA云中的销售订单处理集成。
服务规范可以在SAP API Business Hub上找到
https://api.sap.com/api/api\销售\订单\ SRV/overview
如果你想消费该服务在SAP云平台、ABAP环境中使用ABAP RESTful编程模型(RAP)您首先要创建一个服务消费模型,医疗物联网,如下所述。
从众多实体集合中,我们只选择以下四个
a\U SalesOrder销售订单项目销售订单文本因此,该框架将为我们生成多个业务对象,云服务器价格比较,即
服务消费模型ZSC\U AFI\U SALESORDER\U A2X服务定义ZSC\U AFI\U SALESORDER\U A2X
和四个抽象实体
ZA\U SALESORDERITEMZA\ U销售订单项目文本Zau销售订单zau SALESORDERTEXT
使用OData客户端代理使用OData服务时,如何调用转换出口?
生成的抽象实体使用数据元素或内置类型,远程OData服务的EDM数据类型可以映射到这些数据元素或内置类型。基础SAP网关框架现在使用这些数据元素所基于的域引用的转换出口。
当查看抽象实体的源代码时,我们发现,例如,包含字段RequestedQuantity度量单位的字段RequestQuantityUnit的数据元素是基本类型abap单位(3) 不提供任何转换出口。
在以前版本的SAP Cloud Platform、ABAP环境中,这是一个问题,因为与服务消费模型一起生成的抽象实体无法编辑。
从2005版开始,这已发生更改。
在导入我们的EDMX文件之后我们可以使用OData代理来调用远程OData服务,前提是通信设置已就绪。
因此,我们可以创建一个调用我们服务的ABAP类zsalesorderread(代码见本博客末尾)。
源代码非常简单。
运行此类时,我们会发现在尝试时发生转换错误读取字段RequestedQuantity
数据,但度量单位的值未转换为正确的值,并引发异常。作为回退,云主机服务器,淘客社区,因为无法使用或找不到转换出口,将为字段RequestedQuantity返回未更改的数据。
这是因为内置类型abap单位(3) 不提供任何转换出口。
现在证明有用的是编辑已生成的抽象实体的可能性,以便可以更改使用具有适当转换出口的已发布数据元素或提供适当转换出口的自定义数据元素的代码。
为了解决上述问题,构建云服务器,我们可以更改生成的抽象实体的源代码,以代替abap单位(3) 白名单(公布的)数据使用元素MSEHI。MSEHI基于域MEINS,它为度量单位提供了适当的转换出口。
类可以调用OData服务而没有任何错误。