
目录一、OData 是什么1、核心定义2、关键特性二、OData 在 SAP 生态中的角色1、架构位置2、与 SAP Fiori 的关系3、服务类型三、OData 核心知识1、服务端点与文档2、资源与操作3、查询常用选项四、如何创建 OData 服务五、创建 OData 案例方式一通过引用 DDIC Structure 的方式创建方式二手动创建六、总结 OData 的常用操作a. GET 请求查询符合条件的数据例如$filterb. POST 请求创建数据c. PUT/PATCH/MERGE 请求更新数据d. DELETE 请求删除数据一、OData 是什么ODataOpen Data Protocol开放数据协议是一种基于RESTRepresentational State Transfer的开放标准协议用于构建和使用可互操作的Web API。1、核心定义官方定义OData 是一个OASIS 标准用于创建基于 HTTP 的数据服务允许 Web 客户端使用简单的 HTTP 消息发布和编辑资源。通俗理解OData 为数据访问提供了一套统一的“语法”和“规则”让客户端如 Fiori 应用能够以标准化的方式查询、创建、更新和删除后端如 SAP S/4HANA的数据。2、关键特性基于 REST遵循 REST 架构原则如无状态、统一接口使用标准的 HTTP 方法GET、POST、PUT、PATCH、DELETE。资源导向将数据暴露为可通过URI统一资源标识符寻址的资源。标准化查询提供丰富的系统查询选项如$filter、$select、$top支持复杂的数据筛选和投影。元数据驱动通过服务元数据文档$metadata描述数据模型EDM客户端可动态发现服务结构。可扩张支持通过注释Annotations添加业务语义如 UI 标签、字段类型尤其与 SAP Fiori 深度集成。二、OData 在 SAP 生态中的角色在 SAP 技术栈中OData 是连接前端Fiori UI与后端S/4HANA的核心数据桥梁。1、架构位置[SAP Fiori UI] ←(OData协议)→ [SAP Gateway] ←(ABAP调用)→ [SAP S/4HANA 后端]SAP Gateway作为 OData 服务的运行时框架将 OData 请求转换为 ABAP 调用。后端服务在 ABAP 系统中通过ABAP RESTful 应用程序编程模型RAP或SEGW 事务开发并暴露 OData 服务2、与 SAP Fiori 的关系OData 是 SAP Fiori 的默认数据协议。Fiori 应用通过 OData 服务读取和操作业务数据。OData 服务的元数据注释如 sap:label, sap:semantics直接驱动 SAP Fiori 元素 的 UI 自动生成。3、服务类型在 SAP 中OData 服务可暴露为两种绑定类型UI 服务供 SAP Fiori UI 使用元数据中包含 UI 注释。Web API供任何 OData 客户端使用元数据中无 UI 信息。三、OData 核心知识1、服务端点与文档服务根 URIOData 服务的入口地址如https://your-system:port/sap/opu/odata/sap/Z_MY_SERVICE/服务文档在根 URI 执行 HTTP GET 获取列出所有可用的资源集合实体集。服务元数据文档通过$metadata获取如.../sap/ZTEST_FIORI_SRV/$metadata描述完整的数据模型实体类型、属性、关联等。2、资源与操作实体集EntitySet同类实体的集合如 MARA。实体Entity单个业务对象由键值唯一标识。导航属性Navigation Property实体间的关联如 MARA 到 ORDERS。标准操作对应 CRUD CreateReadUpdateDelete使用 HTTP 方法GET读取数据POST创建新实体PUT/PATCH更新实体DELETE删除实体3、查询常用选项选项示例说明$select?$selectName,Email只返回指定字段$filter?$filterCity eq Shanghai筛选符合条件的记录$orderby?$orderbyName desc按字段排序$top$skip?$top10$skip20分页查询$expand?$expandOrders展开关联的实体四、如何创建 OData 服务主要有两种开发模式1、基于 ABAP RESTful 应用程序编程模型RAP数据建模使用 ABAP CDSCore Data Services定义数据视图定义行为创建行为定义和实施。激活并发布在服务绑定编辑器中点击“发布”激活 SAP Gateway 服务端点。2、基于 SAP Gateway Service BuilderSEGW步骤执行事务码 SEGW 创建 OData 项目 → 导入数据源如数据库表、CDS视图、RFC模块 → 定义实体类型、关联和操作 → 生成运行对象并注册服务/IWFND/MAINT_SERVICE五、创建 OData 案例输入 TCode 事务代码SEGW。创建一个 OData 项目OData的创建方式有很多下面就介绍几种常见的创建方式方式一通过引用 DDIC Structure 的方式创建在创建好的项目下右击“数据模型”选择Import - DDIC Structure定义实体名称和一个自建表这里是我自定义的一个 CDS 视图点击 Next定义前后台通信接口的字段这里我全选并点击下一步 Next指定一个 Key点击完成此时 Entity Types 和 Entity Sets 就都已创建完成了点击“生成运行时对象”的图标会在 Runtime Artifacts 菜单栏下生成多个文件在 ZCL_ZTEST_FIORI_DPC_EXT 中编写业务逻辑代码即可。在 Service Implementation 菜单下也会有多个子栏目双击方法进入右击需要编写业务逻辑的方法点“重定义”Redefine重定义 zcontactset_get_entityset 编写业务逻辑METHOD zcontactset_get_entityset. **TRY. *CALL METHOD SUPER-ZCONTACTSET_GET_ENTITYSET * EXPORTING * IV_ENTITY_NAME * IV_ENTITY_SET_NAME * IV_SOURCE_NAME * IT_FILTER_SELECT_OPTIONS * IS_PAGING * IT_KEY_TAB * IT_NAVIGATION_PATH * IT_ORDER * IV_FILTER_STRING * IV_SEARCH_STRING ** io_tech_request_context ** IMPORTING ** et_entityset ** es_response_context * . ** CATCH /iwbep/cx_mgw_busi_exception. ** CATCH /iwbep/cx_mgw_tech_exception. **ENDTRY. DATA: lt_filter_ebeln TYPE /iwbep/t_cod_select_options. 获取过滤条件 使用 READ TABLE 并检查 SY-SUBRC避免直接访问导致的异常 READ TABLE it_filter_select_options INTO DATA(ls_filter) WITH KEY property Ebeln. IF sy-subrc 0 AND ls_filter-select_options IS NOT INITIAL. lt_filter_ebeln ls_filter-select_options. ENDIF. SELECT a~* FROM zmmv_ht AS a WHERE a~ebeln IN lt_filter_ebeln INTO CORRESPONDING FIELDS OF TABLE et_entityset. ENDMETHOD.点击 Service Maintenance 菜单栏进行测试选择 json 的格式使看起来会更加美观访问时也可以加上过滤条件的参数/sap/opu/odata/SAP/ZTEST_FIORI_SRV/zcontactSet?$filterEbeln eq 4600000013$formatjson方式二手动创建右击 Entity Types 点击 “创建”填写 Entity Types 和 Entity Sets点击 √ 后填写元素名称、主键、类型、描述等。在 Entity Sets 中双击创建好的行项目为实体配置参照类型。点击 “生成运行时对象”。后面的操作与“方式一”一致。在类“ZCL_ZTEST_FIORI_DPC_EXT”中编写业务逻辑。注意使用前需进入 SICF 的 /sap/opu/odata/sap/ 路径下检查服务是否正常激活如果 GUI 区分了不同的客户端则需要双击服务名-登陆数据中配置客户端。六、总结 OData 的常用操作a. GET 请求查询符合条件的数据例如$filter用于读取数据通常通过 URI 参数或查询选项传递筛选条件。步骤选择 HTTP 方法 GET - 在 Request URI 字段中输入完整的 OData 服务端点附加查询参数/sap/opu/odata/SAP/ZTEST_FIORI_SRV/zcontactSet?$filterEbeln eq 4600000013$formatjsonb. POST 请求创建数据用于创建新实体需要在请求体中传递数据。步骤选择 HTTP 方法 POST - 输入 Request URI指向实体集- 准备请求体点击 Add File 上传本地 xml/json 文件或直接在 HTTP Request 下方的编辑区域输入请求体的内容/sap/opu/odata/SAP/ZTEST_FIORI_SRV/zcontactSet设置请求头可选但重要在 HTTP Request 区域的 Header Name 和 Value 表格中确保包含· Content-Typeapplication/json 或 application/atomxml;typeentry· Acceptapplication/jsonc. PUT/PATCH/MERGE 请求更新数据用于更新现有实体。PUT替换整个实体PATCH/MERGE部分更新。步骤选择 HTTP 方法PUT、PATCH 或 MERGE - 输入 Request URI指向具体实体- 在请求体中提供要更新的字段格式同 POST- 执行并检查响应成功状态码为 200 OK 或 204 No Content。/sap/opu/odata/SAP/ZTEST_FIORI_SRV/zcontactSet(4600000013)d. DELETE 请求删除数据步骤选择方法 DELETE。输入 Request URI指向具体实体/sap/opu/odata/SAP/ZTEST_FIORI_SRV/zcontactSet(4600000013)