解释数据服务

学习目标

  • 解释 OData 协议。

  • 操作 OData 服务以处理数据。

  • 操作 SAP Gateway 以处理数据。

OData 标准

客户端对比:带应用的客户端通过 Web 基础设施连接到带业务逻辑的服务器;带 OData SDK 的客户端通过 OData 服务连接到带 SAP Gateway 的 SAP S/4HANA。

万维网(World Wide Web)架构的一个重要方面是使用抽象接口进行组件通信。这些抽象接口以连接器的形式呈现。客户端和服务器各自使用一个连接器组件。两个连接器之间存在一份定义应用协议的契约。它定义了文档、其格式以及行为。可以选择任何协议。通过使用连接器概念,客户端和服务器在很大程度上相互独立且可互换。每个连接器将在通信通道上交换的文档转换为服务器端和客户端两边的内部表示,反之亦然。

OData 协议通过指定一个具备必要品质的统一协议来定义这样的契约。例如,附加到 SAP 后端系统的连接器在 ABAP API 与 OData 实体之间进行转换。SAP Gateway 就是这样一个连接器。

另一方面,客户端连接器在 OData 实体与消费方平台的 API 之间进行转换。连接器在此处被规定。因此,任何拥有支持约定 OData 格式的库的客户端平台,都可以与支持同一契约的任何服务器通信。

OData 遵循表述性状态转移(REST)架构设计范式,即该协议传输资源状态的表述。术语"资源"指可寻址且可访问的数据。标准的地址表示或资源是统一资源标识符(URI)。客户端通过向 URI 发送请求来向服务器请求资源。服务器通过将 URI 转换为内部地址数据来处理请求,以访问或操作数据,然后组装响应。

开放数据协议(Open Data Protocol)

示意图解释 SAP 注解、OData、JSON、XML、HTTP(S),并用图标描绘其功能;右侧列出与数据传输和格式相关的组件。

OData 是一项开放标准,最初由 Microsoft 开发,现在由 Oasis 组织管理。它基于 Atom Publishing 和 Atom Syndication 标准,而这些标准又基于 XML(可扩展标记语言)和 HTTP(S)(超文本传输协议(安全))。JSON(JavaScript 对象表示法)是结构化数据时 XML 的一种替代方案。

OData 协议的目标是提供一个与厂商无关的、基于 Web 的 API,完全遵循表述性状态转移(REST)的设计原则。OData 提供对服务器端资源的类数据库访问。在此语境下,OData 也被称为 ODBC for the Web

注意

Open Database Connectivity (ODBC) 是一种广泛使用的数据库访问方法。

OData 也是可扩展的。这使 SAP 能够用 ABAP 数据字典中的额外信息来补充 OData 所用的数据类型。另一个例子是面向 Web 和移动端的元数据驱动开发,例如 SAP Fiori elements。

OData 有版本 2(V2)、版本 3(V3)和版本 4(V4)。这些版本层层构建,通过添加新特性来扩展前一个版本。大多数 OData 服务基于 V2。SAP Gateway 自 AS ABAP 7.00 起支持 OData V2,自 AS ABAP 7.50 起支持 OData V4。OData V3 在 SAP Gateway 中被跳过,因此不受支持。

OData 模型

XML(Atom)与 JSON 格式的产品数据对比截图,包含 ProductID、TypeCode、Category、Name、Description、Supplier、Price 等属性和其他规格。

在当前的现实应用中,结构化数据时使用 JSON(JavaScript 对象表示法)而不是 Atom 和 XML。它所需的元信息少得多,从而大幅减少了传输的数据量。相比之下,Atom 和 XML 之所以被使用,正是因为它们在开发时提供了丰富的元信息。

XML(Atom)与 JSON 结构对比截图,突出显示 BusinessPartnerSet。XML 显示服务标签和集合,而 JSON 显示带实体集的嵌套结构。

每个 OData 服务由一个 URI 表示,称为服务根 URI。URI 是统一资源标识符,即用于按名称和地址标识资源的字符串。这种标识方式使得可以通过 OData 等特定协议,在网络中与资源的表述进行交互。

注意

URL(统一资源定位符)是 URI 的一个子类型,仅通过地址来标识资源。

要以读取方式使用 OData 服务,你只需要一个浏览器和 OData 服务基础 URI。服务文档是 SAP Gateway 服务的最高层级描述。它显示有关可用数据的基本信息。从这里出发,可以通过添加 URI 参数来调用有关该服务的更多信息,当然也可以调用数据本身。

要从服务获取数据,请将服务的实体集名称添加到基础 URI。你会得到该类型的实体列表,它可能是某个数据库表的内容。

示意图展示 BusinessPartner、Contact、Product、SalesOrder 和 SalesOrderItem 之间的实体关系,其中 BusinessPartner 作为中心节点以基数标注连接到其他节点。

OData 服务的实体在实体数据模型(EDM)中定义。实体类型定义属性以及到其他实体类型的导航。这些关联基于实体类型的键属性定义关系约束。随后,导航属性用于在运行时在实体之间主动导航。对于每个实体类型,至少定义一个实体集。这些实体集显示在服务文档中,并用于向 OData 服务请求数据。

XML 代码截图,为实体类型 Product 指定元数据,包含 ProductID、Name、Description 等各种属性,用于 SAP OData 服务。

通过将 OData 选项 $metadata 添加到服务根 URI,会显示该服务的元数据文档。整个 EDM 都在此定义,并在运行时可用。应用开发人员和开发环境中的所有向导都基于这些信息创建其应用。

注意

元数据文档仅以 XML 形式提供。

如何检查 OData 服务的数据模型

业务示例

你想在 Web 浏览器中检查 OData 服务的数据模型。

观看视频,了解如何检查 OData 服务的数据模型。

视频:本节含 SAP 官方视频(视频 ID 1_wraxqs5f),需在 learning.sap.com 在线观看。

OData 操作

表格显示对资源的操作及对应的 HTTP 动词:Create-POST、Read-GET、Update-PUT、Delete-DELETE。

OData 的主要特性之一是,它在 URI 中标识的可寻址资源上使用现有的 HTTP 动词 GET、PUT、POST 和 DELETE。从概念上讲,OData 是一种通过 HTTP 动词对资源执行数据库风格的创建、读取、更新和删除操作的方式。

通过基于 OData 规则构建 URI,可以执行各种各样的数据请求。这些请求通常可以直接映射到访问数据库中数据的 SQL 请求。

该图说明 OData URL 结构,包含服务器地址、服务 URI、实体集、实体键和导航属性等元素,并给出一个 XML 数据条目示例。

在 GET 请求中调用 OData 服务的服务 URI,会得到服务文档。将实体集名称添加到基础 URI,会得到所有实体的列表或集合。这称为查询请求。

将实体的唯一键放在括号中添加到查询请求,会得到具有该键的单个实体。基于字符的键必须放在单引号中。这称为读取请求。

以斜杠分隔,将实体类型的导航属性添加到读取请求,会得到单个实体或一组实体,具体取决于关联的重数。这称为导航请求。

OData 查询语言

对比表展示 OData 版本 2 和 4 的查询操作:格式化:filter;投影:orderby;分页:skip;内联:inlinecount 和 search;计算:- 和 $compute。

OData 规定了一种简单但强大的查询语言,允许客户端请求任意筛选、排序、分页等。客户端能够通过查询字符串参数,表达 OData 服务针对 URI 所标识资源返回的数据量和顺序。OData 定义的所有查询字符串参数名称都以 "$" 字符为前缀。

首先,从服务器传输到客户端的数据结构可以格式化,例如格式化为 JSON 或 XML。通过筛选数据集以及仅选择相关的数据属性,可以减少数据量。分页是减少数据流量的另一种方式。排序保证所请求实体集中实体的正确顺序。客户端还可以指示服务器在响应中包含关联的数据条目,这称为内联。该技术避免了后续的读取操作。

OData 的各版本是累加式的。新版本以当时相同的方式包含先前版本的特性。但它们通过附加特性得到增强。这一点也适用于查询选项。这里的一个例外是"计数",因为 OData V2 中的两种计数方式在 OData V4 中被合并为一种。

在 OData V4 中,数据还可以被搜索和计算。两者都需要根据应用场景进行特定实现。

该图说明 OData URL 结构,包含服务器地址、服务 URI、实体集和查询选项等元素,并给出一个 JSON 数据条目示例。

一个 OData 请求由服务器地址、服务 URI、实体集和附加查询选项组成。查询选项可能存在许多组合。完整文档可在 http://www.odata.org 获取。

如何查询 OData 服务的数据

业务示例

你想在 Web 浏览器中使用查询选项查询 OData 服务的数据。

观看视频,了解如何查询 OData 服务的数据。

视频:本节含 SAP 官方视频(视频 ID 1_w1y3jygf),需在 learning.sap.com 在线观看。

SAP Gateway Foundation

示意图展示社交平台、移动设备、Web 浏览器、企业软件和企业云通过 OData 连接到 AS ABAP 的 SAP Gateway 以及 SAP HANA 的 SAP HANA XS。

SAP 提供多种 OData 提供者。SAP Gateway(直到 2014 年底被称为 SAP NetWeaver Gateway)提供单一入口点,用于访问基于 ABAP 的系统(例如 SAP Business Suite 或 SAP S/4HANA)的业务数据。SAP HANA 扩展应用服务(XS)在 SAP HANA 中承担相同角色——这里只是再举一个重要的 OData 提供者为例。

警告

切勿将 SAP Gateway 与内核中用于通过 RFC 通信的 gateway 进程混淆。

通过使用 OData,业务数据可以在多种环境和平台之间共享。使用这些数据不需要具备 SAP 知识。通常,基于客户端的应用使用 SAP Gateway 服务并直接与用户交互。Web 浏览器中的应用就是一个常见例子。

不过,SAP Gateway 服务也可以被基于服务器的应用用作 API(应用程序编程接口)。可以在通信路径中添加额外的服务器,以增强客户端和服务器的可能性。对于移动设备,SAP Mobile Services 为应用带来附加价值。

对于 AS ABAP 7.00 到 7.31,SAP Gateway 由提供 OData 功能的各个附加组件组成。这些附加组件可以分为以下领域:

运行时

通过 URI 向外部提供

OData

并因此提供

SAP Gateway

服务。

设计时

包含开发环境以及用于处理对服务的请求的程序。

所有附加组件在 AS ABAP 7.40 中首次引入、并在 AS ABAP 7.51 中定型,它们合并到软件组件 SAP_GWFND(SAP Gateway Foundation)中。这提供了 OData 运行时和设计时所需的一切。

注意

升级后,某些 SAP Gateway 附加组件可能仍存在于 AS ABAP 7.51 中。这些附加组件已被弃用,应当卸载。它们的功能要么现在属于软件组件 SAP_GWFND 的一部分,要么不再受支持。

SAP Gateway 部署选项

示意图展示 SAP Gateway 的三种部署选项:Hub 部署 1、Hub 部署 2 和嵌入式部署,均包含连接到 OData 的 SAP Gateway 运行时以及位于 hub 或后端的设计时。

SAP Gateway 有三种可能的部署选项(hub 是前端服务器(FES)的同义词):

在后端服务器(BES)中开发的 Hub 部署

Hub 部署提供了对多个后端系统进行路由和组合的可能性。在使用

OData

时,它是访问后端系统的单一入口点。这提升了运行中的安全性和灵活性。

这是

SAP Business Suite

的推荐设置。

在前端服务器(FES)中开发的 Hub 部署

在前端服务器(FES)中开发时,数据仅通过启用 RFC 的函数模块从 BES 读取,这使得可以访问自身无法提供

OData

服务的 BES 的数据。这在选择系统作为数据源时提供了更大的自由度。

这是集成多个不同版本的 BES 的推荐设置。

嵌入式部署

在 BES 中开发时,应用源代码可以直接访问数据定义和其他仓库对象。这提升了开发中的性能和效率。

这是

SAP S/4HANA

的推荐设置。

SAP Gateway 工具

SAP Gateway Service Maintenance 的截图,显示注册服务、测试服务、添加系统和服务目录条目等选项。

SAP Gateway Service Maintenance(事务 /IWFND/MAINT_SERVICE)提供系统中已注册的所有 OData V2 服务的列表。对 SAP Gateway 服务的完整管理在此进行。该事务分为三个区域:

  • 服务目录 (服务名称、描述以及许多其他设置)

  • ICF 节点 (ICF 服务的维护以及服务的测试)

提示

自 SAP_GWFND 7.58 起,调用 SAP Gateway 服务时 ICF 节点是可选的。此时 OData V2 服务会直接链接到节点 /sap/opu/odata。

  • 系统别名 (维护到后端的连接)

提示

对于不连接到其他系统的服务,Processing Mode 设置为 Co-deployed only 并且不分配系统别名。

SAP Gateway Service Administration 和 SAP Gateway Backend Service Administration 的截图,展示服务注册和发布的步骤:创建服务组、注册服务、将服务添加到组、发布、测试服务。

OData V4 服务不作为单个实例注册。取而代之的是发布由多个服务组成的服务组。这些服务组使用 SAP Backend Service Administration(事务 /IWBEP/V4_ADMIN)创建,并由 SAP 交付或由开发人员创建。

SAP Gateway Service Administration(事务 /IWFND/V4_ADMIN)用于发布服务组,以便其中的服务可以在应用中使用。

提示

默认服务组 /IWBEP/ALL 由 BES 中的所有 SAP Gateway 服务组成。这使开发人员更容易在开发系统中测试他们的服务。绝不应在生产系统上发布它。

SAP Gateway Client 的截图,显示带 URI 输入、请求正文和控件的 HTTP 请求。响应正文显示状态码为 200、状态原因为 OK 的 XML。

使用 SAP Gateway Client(事务 /IWFND/GW_CLIENT),可以测试 OData 服务的所有功能。对于读取请求,只需输入请求 URI 并执行即可。对于创建、更新和删除请求,必须做更多调整,例如必须创建填充了数据的请求正文。所有调整都可以保存为测试用例,供以后使用。

SAP Gateway Client 可以处理 XML(Atom)和 JSON 等数据格式,适用于 OData V2 和 V4 服务。

除这些事务之外,SAP Gateway 还有若干其他事务。所有事务通过按钮和菜单项相互连接。因此,你可以从服务维护跳转到客户端,再跳转回来。

测试基于 OData V2 的 SAP Gateway 服务

业务示例

你想使用 SAP Gateway Service Maintenance 和 SAP Gateway Client 检查并测试基于 OData V2 的 SAP Gateway 服务。

注意

本练习需要 SAP Learning 系统。登录信息由你的系统设置指南提供。

任务 1:检查 OData V2 服务在 SAP Gateway 中的注册

ExerciseStart Exercise(SAP 官方交互式练习)

步骤

  1. 使用 SAP GUI 登录你的 SAP S/4HANA (S4H) 系统。

  2. SAP Business ClientSAP Logon 中,选择你 S4H 的 SAP GUI SNC 系统条目。

  3. 选择 Log On

  4. 在你 S4H 的 SAP Gateway Service Maintenance 中,检查 OData V2 服务 ZEPM_REF_APPS_SHOP_SRV 的注册。

  5. SAP Easy Access 屏幕上,搜索 Activate and Maintain Services,或启动事务 /IWFND/MAINT_SERVICE

  6. 选择 Filter

  7. Technical Service Name 字段中,输入 *epm_ref* 并选择 Continue

  8. 选择 Technical Service Name**ZEPM_REF_APPS_SHOP_SRV**。

  9. 确认 ICF 节点 ODATA 的状态为初始。

  10. 确认 Processing ModeCo-deployed only 且未分配系统别名。

任务 2:在 SAP Gateway Client 中测试 OData V2 服务

ExerciseStart Exercise(SAP 官方交互式练习)

步骤

  1. 在你 S4H 的 SAP Gateway Client 中,调用 OData V2 服务 ZEPM_REF_APPS_SHOP_SRV 的服务文档。

  2. ICF Nodes 面板中,选择 SAP Gateway Client

  3. SAP Gateway Client 中,选择 HTTPS 作为 Protocol

  4. 选择 Execute

结果

在 HTTP Response 中,服务文档以 XML 形式显示。 2. 调用 OData V2 服务 ZEPM_REF_APPS_SHOP_SRV 的服务元数据文档。

  1. SAP Gateway Client 中,选择 Add URI Option

  2. Add URI Option 弹出窗口中,双击 $metadata

  3. 选择 Execute

结果

在 HTTP Response 中,服务元数据文档以 XML 形式显示。 3. 显示 OData V2 服务 ZEPM_REF_APPS_SHOP_SRV 的所有产品。

  1. SAP Gateway Client 中,选择 Entity Set

  2. Entity Sets 弹出窗口中,双击 Products

  3. 选择 Execute

结果

在 HTTP Response 中,产品列表以 XML 形式显示。 4. 以 JSON 格式显示 OData V2 服务 ZEPM_REF_APPS_SHOP_SRV 的前两个产品。

  1. SAP Gateway Client 中,选择 Add URI Option

  2. Add URI Option 弹出窗口中,双击 $format=json

  3. 选择 Add URI Option

  4. Add URI Option 弹出窗口中,双击 $top=2

  5. 选择 Execute

结果

在 HTTP Response 中,前两个产品以 JSON 形式显示。

测试基于 OData V4 的 SAP Gateway 服务

业务示例

你想使用 SAP Gateway Service Administration 和 SAP Gateway Client 检查并测试基于 OData V4 的 SAP Gateway 服务。

注意

本练习需要 SAP Learning 系统。登录信息由你的系统设置指南提供。

任务 1:检查 OData V4 服务组在 SAP Gateway 中的发布

ExerciseStart Exercise(SAP 官方交互式练习)

步骤

  1. 使用 SAP GUI 登录你的 SAP S/4HANA (S4H) 系统。

  2. SAP Business ClientSAP Logon 中,选择你 S4H 的 SAP GUI SNC 系统条目。

  3. 选择 Log On

  4. 在你 S4H 的 SAP Gateway Service Administration 中,检查 OData V4 服务组 /IWNGW/NOTIFICATION 的发布。

  5. SAP Easy Access 屏幕上,搜索 SAP Gateway Service Administration,或启动事务 /IWFND/V4_ADMIN

  6. 在左侧展开 Service Groups

  7. 双击服务组 /IWNGW/NOTIFICATION

  8. 确认唯一的系统别名是 LOCAL

  9. 确认组中唯一的服务是 /IWNGW/NOTIFICATION_SRV

任务 2:在 SAP Gateway Client 中测试 OData V4 服务

ExerciseStart Exercise(SAP 官方交互式练习)

步骤

  1. 在你 S4H 的 SAP Gateway Client 中,调用 OData V4 服务 /IWNGW/NOTIFICATION_SRV 的服务元数据文档。

  2. 在服务表格中,选择 /IWNGW/NOTIFICATION_SRV

  3. 选择 Service Test

  4. SAP Gateway Client 中,选择 HTTPS 作为 Protocol

结果

在 HTTP Response 中,服务元数据文档以 XML 形式显示。 2. 调用 OData V4 服务 /IWNGW/NOTIFICATION_SRV 的服务文档。

  1. SAP Gateway ClientRequest URI 字段中,删除 $metadata?sap-statistics=true

  2. 选择 Execute

结果

在 HTTP Response 中,服务文档以 JSON 形式显示。 3. 显示 OData V4 服务 /IWNGW/NOTIFICATION_SRV 的所有通知。

提示

你可以通过在 Shop 参考应用中订购或评价产品来创建通知,该应用位于 SAP Fiori launchpad 中。

  1. SAP Gateway Client 中,选择 Entity Set

  2. Entity Sets 弹出窗口中,双击 Notifications

  3. 选择 Execute

结果

在 HTTP Response 中,通知列表以 JSON 形式显示。 4. 显示 OData V4 服务 /IWNGW/NOTIFICATION_SRV 前两个通知的 CreatedAtSensitiveTextActor

  1. SAP Gateway Client 中,选择 Add URI Option

  2. Add URI Option 弹出窗口中,双击 $top=2

  3. Request URI 字段中,将 &$select=CreatedAt,SensitiveText,Actor 添加到 URI。

示例

/sap/opu/odata4/iwngw/notification/default/iwngw/notification_srv/0001/Notifications?\(top=2&\)select=CreatedAt,SensitiveText,Actor 4. 选择 Execute

结果

在 HTTP Response 中,前两个通知的 Id 、 CreatedAt 、 SensitiveText 以及 Actor 以 JSON 形式显示。