在本文中,我描述了创建ODATA服务和实现CRUD(Read)操作方法的逐步过程。在本文中,我尝试在编写业务逻辑的方法中尽可能多地使用ABAP7.4语法。试图展示如何使用ABAP7.4减少代码行。
转到SEGW创建项目:使用"创建项目"按钮创建ZEMP\模型\ ODATA。
右键单击数据模型节点,选择导入->DDIC结构来创建实体类型和实体集。
在下一个屏幕中输入以下输入来创建Soheaderdata entitytype和Soheaderdata entitysetentityset
选择下一个屏幕中的所有字段
选择下一个屏幕中的关键字段,在本例中为SO\U ID。
按Finish按钮创建entitytype和entityset。
重复上述步骤,使用结构为项目和产品创建实体类型和实体集:BAPI\U EPM\U SO\U item和BAPI\U EPM\U PRODUCT\U HEADER。
选择SO\U ID和因此
选择产品
ID作为产品实体类型的关键字段
现在我们已经创建了3个实体类型和实体集:
您还可以看到为3个实体集创建的服务实现
单击生成运行时对象按钮创建运行时工件以实现CRUD操作
分类生成:
现在展开服务维护文件夹,注册ODATA服务。然后保存项目。
或者您也可以使用tcode:/IWFND/MAINT\u service手动执行注册服务。
您会注意到屏幕截图下方的信号灯变为绿色
以测试ODATA服务,数据分析,单击同一屏幕上的维护按钮:
选择ODATA行并单击调用浏览器:
现在我们将在Soheaderdata和Soitemdata以及Soitemdata和ProductHeaderdata之间创建关联和导航属性。
指定关联名称、主体实体类型名称、从属实体类型名称,在下面的窗口中指定基数和导航属性。
在下面的窗口中指定Soheaderdata和Soitemdata之间的引用约束并指定键关系。
在下一个窗口中完成设置以创建关联和导航属性
现在在Soitemdata和ProductHeaderdata之间创建关联和导航属性类似的方法。
删除下面的引用约束,大数据 学习,因为没有键关系
现在我们完成了ODATA设置。在接下来的步骤中,我们将实现数据提供者类方法来检索数据。
在服务实现文件夹中,对于SoheaderdataSet实体集,我们将实现GetEntitySet(Query)方法来检索所有销售订单标题数据。
为此,转到SE24 tcode中的实现类:ZCL\u ZEPM\u MODEL\u ODATA\u DPC\u EXT并重新定义方法:SOHEADERDATASET\u GET\u ENTITYSET.
此方法将在下面的URL中调用以检索销售订单标题数据:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet
我们还将实现URI参数筛选,Skip,上面URL中的Top和Orderby.
要了解odata服务中URI参数的更多信息,请参阅下面的链接:
带有URI参数的URL示例:
对于CurrencyCode字段上的筛选器URI:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet?$filter=CurrencyCode eq'EUR'
对于Skip和Top URI参数:这将跳过2个条目并显示下一个前10个销售订单。
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet?$skip=2&$top=10
对于orderby URI参数:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet?$orderby=GrossAmount
在方法中复制下面的代码:SOHEADERDATASET\u GET\u ENTITYSET
数据声明:
GET Filter和orderby URI参数值。过滤或选择URI参数可以使用下面的方法进行检索。
建立动态where条件并选择销售订单标题数据
处理页面并跳过:
对结果数据集执行orderby并填充et实体集:
使用下面的URL检索特定的销售订单数据,我们将实现方法:SOHEADERDATASET\u GET\u ENTITY for GetEntity(Read)。
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('500000000')
在同一类中重新定义方法,云呢拿,并在方法中复制下面的代码:
现在我们将实现与SoitemdataSet相关的方法:
方法:SoitemdataSet\u GET ENTITYSET to GET all使用URL的销售订单的销售项目::hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('500000000')/SalesOrderItem
或者我们可以使用URL:$expand=SalesOrderItem(Soheaderdata的导航属性):hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('500000000')?$expand=SalesOrderItem
在类:ZCL\u ZEPM\u MODEL\u ODATA\u DPC\u EXT
中重新定义方法SOITEMDATASET\u GET\u ENTITYSET,并复制下面的代码:
下面的URL将在循环中调用方法SOHEADERDATASET\u GET\u ENTITYSET和SOITEMDATASET\u GET\u ENTITYSET,大数据是啥意思,以检索与所有销售相关的所有行项目订单
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet?$expand=SalesOrderItem
接下来我们将实现SOITEMDATASET\u GET\u实体来显示特定销售订单和销售项目的销售项目数据。我们可以使用以下网址:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoitemdataSet(SoId='500000000',SoItemPos='10')
或者,我们可以使用带有导航属性的URL:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('500000000')/SalesOrderItem(SoId='500000000',SoItemPos='10')
重新定义方法SOITEMDATASET\u GET\u ENTITY并复制下面的代码:
下面的URL还检索与单个销售订单"500000000"相关的所有项目:这将调用方法SOHEADERDATASET\u GET\u ENTITY和SOITEMDATASET\u GET\u ENTITYSET.
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('500000000')?$expand=SalesOrderItem
接下来我们将实现:PRODUCTHEADERDAT\u GET\u ENTITYSET方法来检索产品详细信息:
下面的URL检索与销售订单500000000和项目10相关的产品详细信息:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoitemdataSet(SoId='500000000',SoItemPos='10')/SalesOrderProduct
此URL调用方法SOITEMDATASET\u GET\u ENTITY,然后调用PRODUCTHEADERDAT\u GET\u ENTITYSET
或者我们也可以使用URL:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('5000000000')/SalesOrderItem(SoId='500000000',SoItemPos='10')/SalesOrderProduct
此URL调用SOHEADERDATASET\u GET\u ENTITY和SOITEMDATASET\u GET\u ENTITY,然后调用PRODUCTHEADERDAT\u GET\u ENTITYSET.
下面的URL将检索与订单相关的所有项目和产品信息:5000000000
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/SoheaderdataSet('500000000')?$expand=SalesOrderItem/SalesOrderProduct
此URL调用SOHEADERDATASET\u GET\u ENTITY和SOITEMDATASET\u GET\u ENTITYSET,然后调用PRODUCTHEADERDAT\u GET\u ENTITYSET。
下面的URL将检索所有产品信息:
:hostnumber/sap/opu/odata/sap/ZEPM\u MODEL\u odata\u SRV/ProductHeaderdataSet
此URL调用PRODUCTHEADERDAT\u GET\u ENTITYSET。
现在重定义方法:PRODUCTHEADERDAT获取实体设置并复制下面的代码: