其他分享
首页 > 其他分享> > 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据

在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据

作者:互联网

这是 Jerry 2021 年的第 59 篇文章,也是汪子熙公众号总共第 336 篇原创文章。

Jerry 之前曾经给大家分享过,如何使用各种工具和编程语言,消费 SAP API Business Hub 上罗列的 API.


在 SAP API Business Hub 网站上,SAP 这些 API,分为 SOAP,OData 和 REST 三类。


Jerry 的文章 SAP Cloud for Customer 如何直接消费 S/4HANA API 介绍了如何在 SAP Cloud for Customer 里通过 Restful API 工具库,消费 SAP S/4HANA 暴露的 Restful API:

而下面这几篇文章,介绍了 SAP OData API 的开发与消费:

OData 协议基于 HTTP,在使用 OData 服务进行业务数据的创建或者修改时,需要开发人员在 HTTP 层面操作 POST 请求的 body 内容,步骤繁琐且容易出错。

比如下图是 Jerry 2019 年一个项目中使用 Java 消费 SAP C4C OData 服务创建销售订单的测试代码片段,其中第88行变量 body,包含的就是手动拼接 HTTP Post 请求的负载内容,代码可读性很差且不易维护。


为了避免这些缺点,提高开发人员使用 SAP S/4HANA OData 进行集成的开发效率,SAP 发布了 SAP S/4HANA Cloud SDK.

借助 SAP S/4HANA Cloud SDK,开发人员无需了解 S/4HANA OData 服务的设计细节,可以采用类似自然语言的代码风格,调用 S/4HANA OData 服务,实现数据的增删改查。

下图的例子使用 S/4HANA Cloud SDK 读取BusinessPartnerCategory 字段值为 2 的前20条 BusinessPartner 数据,并且只返回这些数据的 Partner Name, FullName 和 Customer 等字段。代码采用 Declarative 即声明式的方式编写,可读性大大优于直接操作 HTTP Post 负载的做法。

关于 SAP Cloud SDK 的更多细节,请参考我的文章:SAP S/4HANA Cloud SDK 入门介绍

而另一大类 SAP SOAP API 的消费方式,请参考 Jerry 之前的文章:如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service.

除了 SAP API Business Hub 上提到的这三种 API 之外,Jerry 之前的文章:在 SAP BTP 上体验 SAP HANA Cloud 试用版本,还提到过使用 HANA Client 工具库,直接把待执行的 SQL 语句发送给 SAP HANA Cloud 实例;后者执行完毕后,将结果返回给 HANA Client:

这种方式类似 ADBC 和 JDBC,细节可以参考 Jerry 这篇文章:在 SAP BTP 上体验 SAP HANA Cloud 试用版本


本文介绍一种类似的数据消费方式:Open Database Connectivity 即 ODBC,开放数据库互连。

ODBC 提供了一种标准的 API 方法来访问数据库管理系统即 DBMS. ODBC API 利用 SQL 来完成绝大多数数据库操作。

下面我们通过一个实际的例子来了解 ODBC 的用法。这个例子的场景是,在 SAP BTP 平台 ABAP 运行环境里,创建数据库表和对应的 CDS view,然后使用本地的 Excel 文件,通过 ODBC 访问 CDS view 的内容。

首先在 SAP BTP ABAP 运行环境里创建两个简单的数据库表,存放订单抬头和行项目信息:


插入一些测试数据:

然后创建对应的 CDS view:

下面我们需要通过 Service Definition 将这两个 CDS view 的数据暴露给外部消费者。

Jerry 之前的文章 30分钟用 Restful ABAP Programming 模型开发一个支持增删改查的 Fiori应用,曾经介绍过如何基于 RAP 模型,快速基于 CDS view 创建出一个 Fiori 应用出来。

而通过 ODBC 将 CDS view 暴露给外部消费者,仍然需要按照上述顺序创建对应的开发对象。

首先创建 Service Definition,将之前创建的两个 CDS view 通过关键字 expose 暴露出去,通过 as 关键字设置别名为 Orders 和 OrderItems:

基于这个 Service Definition 创建一个新的 Service Binding:

Binding 类型,从下拉菜单里选择 SQL1,以支持 ODBC:

Service Binding 的名称起名为 ZORDERS,在文章最后通过 Excel 消费这个 Service 时,能在 Excel 里看到同名的节点,其下包含了通过 Service Definition 暴露出来的 OrderItems 和 Orders 两个视图:

创建新的 Communication Scenario:

在该 Scenario 的 Inbound 标签页里,分配标准的 Inbound Service S_PRIVILEGED_SQL1,用于支持对 CDS view 的 SQL 访问操作。

切换到 Authorization 标签页,添加新的 Authorization 对象 S_SQL_VIEW,并分别维护其三个字段的值:

点击 Publish Locally:

创建一个新的 Communication System,取名 SQL_ACCESS:

给其分配一个新建的 Communication User. 稍后我们在 Excel 里使用 ODBC 读取 CDS View 数据时,会要求输入该用户的访问密码。

最后,创建 Communication Arrangement,把生成的 Service URL 即下图黄色高亮区域的字段抄下来,后续创建 Data Source 时,会填写该值。

在本地安装 ABAP ODBC Driver,访问 SAP Support Portal,输入关键字 ODBC DRIVER FOR ABAP 进行搜索:

https://launchpad.support.sap.com/#/softwarecenter

根据操作系统的类型下载对应版本的驱动:

同时下载 SAPCRYPTOLIB:

安装完下载的驱动后,启动操作系统的 ODBC Data Source Administrator 应用,添加一条新的 User Data Source Name(简称为 User DSN):

ABAP ODBC 驱动安装成功后,在新建向导里能看到新的驱动类型:ODBC driver for ABAP.

在 DSN 创建向导中维护 Data Source 的明细。其中 Hostname 字段,来自 Communication Arrangement 的 Service Url 字段值。Crypto Library 字段,为前文从 SAP Support Portal 下载的 SAPCRYPTOLIB 解压到本地后的绝对路径:

Data Source 创建好之后,新建 Excel 文件,选择 From ODBC 进行导入:

选择刚刚建好的名为 Jerry-ABAP 的 Data Source,输入 Communication Scenario 里维护的用户名和密码:

点击 Connect,即可预览 SAP BTP ABAP 环境里 Service Definition 暴露出来的 CDS view 的数据:

点击 Load 按钮,将这些数据导入到 Excel 中。

在 Advanced options 里,我们可以自由编写 SQL 语句,将 Excel 当成一个简单的 SQL 控制台使用:

上图编写的 SQL 语句,将订单行项目的数量进行求和,并显示结果到 Excel 里:

相信通过本文的例子,大家能对如何通过 ODBC 消费 SAP BTP 平台 ABAP 环境的 CDS view 数据有了一个直观的认识,感谢阅读。

更多阅读

更多Jerry的原创文章,尽在:"汪子熙":

标签:BTP,Service,ODBC,OData,Excel,API,CDS,SAP,Cloud
来源: https://www.cnblogs.com/sap-jerry/p/15245628.html