OData 使用方法简介二关联和导航

作者:ABAP三叔 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, MM, SD, WM, 仓库管理, 开发, 数据工程, 物料管理, 销售分销
OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

前言

如以下URL所示

http://services.odata.org/OData/OData.svc/Categories(1)/Products?$format=json,将返回类别为1的所有产品,这种访问方式在SAP

OData中通过建立多个模型之间的关联和导航的方式来实现。

通过这种方式我们可以获取销售订单/采购订单这类含有抬头和明细的单据明细。

本文将在上文 [ OData使用方法简介(一)

](http://mp.weixin.qq.com/s?__biz=MzkwNzUxNDQ5Mg==&mid=2247484512&idx=1&sn=e464e5d11b2e9a28579d67ae620a902a&chksm=c0d94373f7aeca651e1cb0bad62b59129a2f8d5a88edd516ef4dbfb9f1ecc34adbee76573c50&scene=21#wechat_redirect)

的基础上,使用公司和工厂两个实体模型来介绍关联和导航的使用方法。

OData创建

一、修改OData

1. 修改ZSODATA_PLANT结构,增加公司代码字段

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

2. 进入SEGW选中ZTEST_ODATA服务,点击编辑,右键Plant,导入属性

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

3\. 勾选 ZSODATA_PLANT结构中新增的BUKRS字段

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

4.下一步中将BUKRS也选中为主键

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

5.创建关联,右键 Associations,点击Create

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

6.如下图所示,输入关联名称,Company 1对N个 Plant

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

7.选择Plant中的关联字段Bukrs

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

8.完成创建

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

9.OData服务各属性如下

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

10 . 点击生成按钮,重新生成OData服务

二、业务逻辑代码编写

1.进入OData业务类

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

2.修改PLANTSET_GET_ENTITY和PLANTSET_GET_ENTITYSET方法,

导航的属性在 it _navigation_path 入参中获取

METHOD plantset_get_entity. DATA: ls_filter LIKE LINE OF it_key_tab. DATA: lv_bukrs TYPE bukrs,          lv_werks TYPE werks_d. IF it_navigation_path[] IS NOT INITIAL. READ TABLE it_navigation_path[ 1 ]-key_tab WITH KEY name = 'Bukrs' INTO ls_filter. IF sy-subrc IS INITIAL. lv_bukrs = ls_filter-value. ENDIF. READ TABLE it_navigation_path[ 1 ]-key_tab WITH KEY name = 'Werks' INTO ls_filter. IF sy-subrc IS INITIAL. lv_werks = ls_filter-value. ENDIF. ELSE. READ TABLE it_key_tab WITH KEY name = 'Bukrs' INTO ls_filter. IF sy-subrc IS INITIAL. lv_bukrs = ls_filter-value. ENDIF. READ TABLE it_key_tab WITH KEY name = 'Werks' INTO ls_filter. IF sy-subrc IS INITIAL. lv_werks = ls_filter-value. ENDIF. ENDIF. SELECT SINGLE bukrs werks name1 INTO er_entity FROM t001w JOIN t001k ON t001k~bwkey = t001w~bwkey WHERE bukrs = lv_bukrs AND werks = lv_werks. ENDMETHOD.
METHOD plantset_get_entityset. DATA: ls_key_tab TYPE /iwbep/s_mgw_name_value_pair, lv_bukrs TYPE bukrs. DATA(lv_where) = io_tech_request_context->get_osql_where_clause_convert( ). READ TABLE it_key_tab WITH KEY name = 'Bukrs' INTO ls_key_tab. IF sy-subrc = 0. lv_bukrs = ls_key_tab-value. ENDIF. IF lv_bukrs IS NOT INITIAL. SELECT bukrs,werks,name1 FROM t001w JOIN t001k ON t001k~bwkey = t001w~bwkey WHERE bukrs = @lv_bukrs AND (lv_where) ORDER BY bukrs,werks INTO TABLE @et_entityset UP TO @is_paging-top ROWS OFFSET @is_paging-skip. ELSE. SELECT bukrs,werks,name1 FROM t001w JOIN t001k ON t001k~bwkey = t001w~bwkey WHERE (lv_where) ORDER BY bukrs,werks INTO TABLE @et_entityset UP TO @is_paging-top ROWS OFFSET @is_paging-skip. ENDIF. ENDMETHOD.

OData测试

1.从SEGW点击SAP Gateway Client,进入OData测试网管关

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

2.查询某公司代码下的所有工厂

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

3.查询某公司代码下的某个工厂

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

it _navigation_path 入参值如下

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

或者

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图

4 .过滤$filter依旧有效

OData 使用方法简介二关联和导航 - 封面图
OData 使用方法简介二关联和导航 - 封面图
ABAP三叔

关于作者:ABAP三叔

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「OData使用方法简介二关联和导航.md」整理生成,仅用于内部技术分享与学习交流。