天天看點

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

這是 Jerry 2021 年的第 59 篇文章,也是汪子熙公衆号總共第 336 篇原創文章。

Jerry 之前曾經給大家分享過,如何使用各種工具和程式設計語言,消費 SAP API Business Hub 上羅列的 API.

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

在 SAP API Business Hub 網站上,SAP 這些 API,分為 SOAP,OData 和 REST 三類。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

Jerry 的文章 SAP Cloud for Customer 如何直接消費 S/4HANA API 介紹了如何在 SAP Cloud for Customer 裡通過 Restful API 工具庫,消費 SAP S/4HANA 暴露的 Restful API:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

而下面這幾篇文章,介紹了 SAP OData API 的開發與消費:

SAP OData 程式設計指南

在 SAP BTP CloudFoundry 環境下消費 ABAP On-Premise OData API

使用 SAP Cloud Application Programming 模型開發 OData API 的一個實際例子

SAP C/4HANA Sales Cloud 使用 OData 服務和第三方系統內建的一個具體例子

OData 協定基于 HTTP,在使用 OData 服務進行業務資料的建立或者修改時,需要開發人員在 HTTP 層面操作 POST 請求的 body 内容,步驟繁瑣且容易出錯。

比如下圖是 Jerry 2019 年一個項目中使用 Java 消費 SAP C4C OData 服務建立銷售訂單的測試代碼片段,其中第88行變量 body,包含的就是手動拼接 HTTP Post 請求的負載内容,代碼可讀性很差且不易維護。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

為了避免這些缺點,提高開發人員使用 SAP S/4HANA OData 進行內建的開發效率,SAP 釋出了 SAP S/4HANA Cloud SDK.

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

借助 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 負載的做法。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

關于 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:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

這種方式類似 ADBC 和 JDBC,細節可以參考 Jerry 這篇文章:在 SAP BTP 上體驗 SAP HANA Cloud 試用版本。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

本文介紹一種類似的資料消費方式:Open Database Connectivity 即 ODBC,開放資料庫互連。

ODBC 提供了一種标準的 API 方法來通路資料庫管理系統即 DBMS. ODBC API 利用 SQL 來完成絕大多數資料庫操作。

下面我們通過一個實際的例子來了解 ODBC 的用法。這個例子的場景是,在 SAP BTP 平台 ABAP 運作環境裡,建立資料庫表和對應的 CDS view,然後使用本地的 Excel 檔案,通過 ODBC 通路 CDS view 的内容。

首先在 SAP BTP ABAP 運作環境裡建立兩個簡單的資料庫表,存放訂單擡頭和行項目資訊:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

插入一些測試資料:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

然後建立對應的 CDS view:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

下面我們需要通過 Service Definition 将這兩個 CDS view 的資料暴露給外部消費者。

Jerry 之前的文章 30分鐘用 Restful ABAP Programming 模型開發一個支援增删改查的 Fiori應用,曾經介紹過如何基于 RAP 模型,快速基于 CDS view 建立出一個 Fiori 應用出來。

Service Definition

Service Binding

Communication Scenario

Communication Arrangement

而通過 ODBC 将 CDS view 暴露給外部消費者,仍然需要按照上述順序建立對應的開發對象。

首先建立 Service Definition,将之前建立的兩個 CDS view 通過關鍵字 expose 暴露出去,通過 as 關鍵字設定别名為 Orders 和 OrderItems:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

基于這個 Service Definition 建立一個新的 Service Binding:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

Binding 類型,從下拉菜單裡選擇 SQL1,以支援 ODBC:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

Service Binding 的名稱起名為 ZORDERS,在文章最後通過 Excel 消費這個 Service 時,能在 Excel 裡看到同名的節點,其下包含了通過 Service Definition 暴露出來的 OrderItems 和 Orders 兩個視圖:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

建立新的 Communication Scenario:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

在該 Scenario 的 Inbound 标簽頁裡,配置設定标準的 Inbound Service S_PRIVILEGED_SQL1,用于支援對 CDS view 的 SQL 通路操作。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

切換到 Authorization 标簽頁,添加新的 Authorization 對象 S_SQL_VIEW,并分别維護其三個字段的值:

SQL_SCHEMA: ZORDERS,即我們要授予通路權限的 Service Binding 名稱。

SQL_VIEW: *. 這個值意味着允許通路 Service Binding ZORDERS 關聯的 Service Definition 中,通過 expose 關鍵字暴露的所有 CDS view.

SQL_VIEWOP: SELECT,隻讀通路。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

點選 Publish Locally:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

建立一個新的 Communication System,取名 SQL_ACCESS:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

給其配置設定一個建立的 Communication User. 稍後我們在 Excel 裡使用 ODBC 讀取 CDS View 資料時,會要求輸入該使用者的通路密碼。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

最後,建立 Communication Arrangement,把生成的 Service URL 即下圖黃色高亮區域的字段抄下來,後續建立 Data Source 時,會填寫該值。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

在本地安裝 ABAP ODBC Driver,通路 SAP Support Portal,輸入關鍵字 ODBC DRIVER FOR ABAP 進行搜尋:

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

根據作業系統的類型下載下傳對應版本的驅動:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

同時下載下傳 SAPCRYPTOLIB:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

安裝完下載下傳的驅動後,啟動作業系統的 ODBC Data Source Administrator 應用,添加一條新的 User Data Source Name(簡稱為 User DSN):

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

ABAP ODBC 驅動安裝成功後,在建立向導裡能看到新的驅動類型:ODBC driver for ABAP.

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

在 DSN 建立向導中維護 Data Source 的明細。其中 Hostname 字段,來自 Communication Arrangement 的 Service Url 字段值。Crypto Library 字段,為前文從 SAP Support Portal 下載下傳的 SAPCRYPTOLIB 解壓到本地後的絕對路徑:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

Data Source 建立好之後,建立 Excel 檔案,選擇 From ODBC 進行導入:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

選擇剛剛建好的名為 Jerry-ABAP 的 Data Source,輸入 Communication Scenario 裡維護的使用者名和密碼:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

點選 Connect,即可預覽 SAP BTP ABAP 環境裡 Service Definition 暴露出來的 CDS view 的資料:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

點選 Load 按鈕,将這些資料導入到 Excel 中。

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

在 Advanced options 裡,我們可以自由編寫 SQL 語句,将 Excel 當成一個簡單的 SQL 控制台使用:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

上圖編寫的 SQL 語句,将訂單行項目的數量進行求和,并顯示結果到 Excel 裡:

在 Excel 裡使用 ODBC 讀取 SAP BTP 平台上 CDS view 的資料

相信通過本文的例子,大家能對如何通過 ODBC 消費 SAP BTP 平台 ABAP 環境的 CDS view 資料有了一個直覺的認識,感謝閱讀。