# 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服务,提供返回SAP中所有的公司信息和工厂信息两种服务。
事务代码: SEGW
创建实体模型可以引用ABAP DDIC字典类型,也可以不引用,先以不引用DDIC的方式创建
1\. 展开Data Model,右键Entity Types,点击Create新建
2.输入实体名,并勾选Create Related Entity Set创建实体集
3.展开Comany,双击Properties,添加Bukrs,Butxt两个字段,选择字段类型、输入最大字段长度、输入字段描述、并将Bukrs设置为主键
4.点击生成按钮,生成OData服务,会生成ABAP处理类
创建实体模型可以引用ABAP DDIC字典类型,也可以不引用,以引用DDIC的方式创建工厂实体模型
1\. SE11创建ZSODATA_PLANT结构
2\. 右键Data Model,点击Import->DDIC Structure
6\. 点击生成按钮,重新生成OData服务
GET_ENTITY:表示获取单条数据
GET_ENTITYSET:表示获取多条数据集合
• * * * * * *
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.2.这里我们使用本地系统作为网关,输入“LOCAL”,
3\. 点击执行或者按回车,出现如下界面表示服务正常
5.将数据以json,格式返回,如下图所示
右下方的数据如果看不清晰,可以点击"Response Browser"查看
在查询的URI的实体名后面使用括号里加主键值就可以了,如果是多个字段的组合主键,使用(key1= '',key2 = '').
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',最后只返回了一条数据
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,返回两条结果
9.可以将URL复制到POSTMAN中进行测试,在认证中选择Basic Auth,输入SAP账号和密码
整体来看,使用OData来提供RESTFUL风格的接口,支持增删改查,开发也比较简单、且有错误日志监控,所以使用OData提供接口服务也是一个非常不错的方法。
— END —
**温馨提示**
如果你喜欢本文,请分享给有需要的朋友,想要获得更多信息,请关注我。
扫码关注我们
以便获取最新更新内容 。
.textContent = new Date().getFullYear();