OData 使用方法简介一

作者:ABAP三叔 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, WM, 仓库管理, 开发, 数据工程
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

# OData使用方法简介(一)

原创 ABAP三叔 [ ABAP三叔 ](javascript:void\(0\);)

__ _ _ _ _

前言

以下来自百度百科

开放数据协议(Open Data Protocol,简称OData)是一种描述如何创建和访问 Restful 服务的 OASIS 标准。该标准由

微软 发起 [1] ,前三个版本1.0、2.0、3.0都是微软开放标准,遵循微软开放规范承诺书(Microsoft Open

Specification Promise)。第四个版本4.0于2014年3月17日在 OASIS 投票通过成为开放工业标准 [2] 。

OData创建

本文示例创建一个OData服务,提供返回SAP中所有的公司信息和工厂信息两种服务。

事务代码: SEGW

一、进入SEGW,新建OData服务

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

二、创建公司实体模型

创建实体模型可以引用ABAP DDIC字典类型,也可以不引用,先以不引用DDIC的方式创建

1\. 展开Data Model,右键Entity Types,点击Create新建

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

2.输入实体名,并勾选Create Related Entity Set创建实体集

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

3.展开Comany,双击Properties,添加Bukrs,Butxt两个字段,选择字段类型、输入最大字段长度、输入字段描述、并将Bukrs设置为主键

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

4.点击生成按钮,生成OData服务,会生成ABAP处理类

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

三、创建工厂实体模型

创建实体模型可以引用ABAP DDIC字典类型,也可以不引用,以引用DDIC的方式创建工厂实体模型

1\. SE11创建ZSODATA_PLANT结构

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

2\. 右键Data Model,点击Import->DDIC Structure

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

3.在ABAP Structure处填入前面创建的

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

4.全选字段

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

5.将Werks字段设置为主键

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

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

四、业务逻辑代码编写

1.进入OData业务类

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

2.重定义数据获取方法

GET_ENTITY:表示获取单条数据

GET_ENTITYSET:表示获取多条数据集合

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

3.代码

• * * * * * *

METHOD companyset_get_entity. DATA: ls_filter LIKE LINE OF it_key_tab. READ TABLE it_key_tab WITH KEY name = 'Bukrs' INTO ls_filter. IF sy-subrc IS INITIAL. SELECT SINGLE bukrs butxt INTO er_entity FROM t001 WHERE bukrs = ls_filter-value. ENDIF. ENDMETHOD.

• * *

METHOD companyset_get_entityset. SELECT bukrs butxt INTO TABLE et_entityset FROM t001. ENDMETHOD.

• * * * * * *

METHOD plantset_get_entity. DATA: ls_filter LIKE LINE OF it_key_tab. READ TABLE it_key_tab WITH KEY name = 'Bukrs' INTO ls_filter. IF sy-subrc IS INITIAL. SELECT SINGLE werks name1 INTO er_entity FROM t001w WHERE werks = ls_filter-value. ENDIF. ENDMETHOD.

• * *

METHOD plantset_get_entityset. SELECT werks name1 INTO TABLE et_entityset FROM t001w. ENDMETHOD.

五、注册服务

1.注册服务

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

2.这里我们使用本地系统作为网关,输入“LOCAL”,

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

3.输入包分配,点确认

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

OData测试

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

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

2.点击EntitySets,选择需要测试的实体名

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

3\. 点击执行或者按回车,出现如下界面表示服务正常

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

4.点击Data Explorer,可以看到返回的所有数据集合

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

5.将数据以json,格式返回,如下图所示

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

右下方的数据如果看不清晰,可以点击"Response Browser"查看

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

6.查询单条结果

在查询的URI的实体名后面使用括号里加主键值就可以了,如果是多个字段的组合主键,使用(key1= '',key2 = '').

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

7.使用过滤$filter

7.1 修改 companyset_get_entityset和plantset_get_entityset方法

• * * *

METHOD companyset_get_entityset. DATA(lv_where) = io_tech_request_context->get_osql_where_clause_convert( ). SELECT bukrs butxt INTO TABLE et_entityset FROM t001 WHERE (lv_where). ENDMETHOD.

• * * *

METHOD plantset_get_entityset. DATA(lv_where) = io_tech_request_context->get_osql_where_clause_convert( ).    SELECT werks name1 INTO TABLE et_entityset FROM t001w WHERE (lv_where).ENDMETHOD.

7.2重新测试,URI后面加?$filter=Bukrs eq '2000',最后只返回了一条数据

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

8.分页查询

8.1 修改 companyset_get_entityset和plantset_get_entityset方法

注意 is_paging 入参的使用,配合ABAP "UP TO n ROW OFFSET"语法

• * * *

METHOD companyset_get_entityset. DATA(lv_where) = io_tech_request_context->get_osql_where_clause_convert( ). SELECT bukrs,butxt FROM t001 WHERE (lv_where) ORDER BY bukrs INTO TABLE @et_entityset UP TO @is_paging-top ROWS OFFSET @is_paging-skip . ENDMETHOD.

• * * *

METHOD plantset_get_entityset. DATA(lv_where) = io_tech_request_context->get_osql_where_clause_convert( ).    SELECT werks,name1 FROM t001w WHERE (lv_where) ORDER BY werks INTO TABLE @et_entityset UP TO @is_paging-top ROWS OFFSET @is_paging-skip.ENDMETHOD.

8 .2重新测试,URI后面加?$top=2&skip=2,返回两条结果

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

9.可以将URL复制到POSTMAN中进行测试,在认证中选择Basic Auth,输入SAP账号和密码

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

总结

整体来看,使用OData来提供RESTFUL风格的接口,支持增删改查,开发也比较简单、且有错误日志监控,所以使用OData提供接口服务也是一个非常不错的方法。

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

— END —

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

**温馨提示**

如果你喜欢本文,请分享给有需要的朋友,想要获得更多信息,请关注我。

OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图
OData 使用方法简介一 - 封面图

扫码关注我们

以便获取最新更新内容 。

OData 使用方法简介一 - 封面图.textContent = new Date().getFullYear();