在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
這是 Jerry 2021 年的第 59 篇文章,也是汪子熙公眾號總共第 336 篇原創(chuàng)文章。
Jerry 之前曾經(jīng)給大家分享過,如何使用各種工具和編程語言,消費 SAP API Business Hub 上羅列的 API.
在 SAP API Business Hub 網(wǎng)站上,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 的開發(fā)與消費:
-
SAP OData 編程指南
-
在 SAP BTP CloudFoundry 環(huán)境下消費 ABAP On-Premise OData API
-
使用 SAP Cloud Application Programming 模型開發(fā) OData API 的一個實際例子
-
SAP C/4HANA Sales Cloud 使用 OData 服務和第三方系統(tǒng)集成的一個具體例子
OData 協(xié)議基于 HTTP,在使用 OData 服務進行業(yè)務數(shù)據(jù)的創(chuàng)建或者修改時,需要開發(fā)人員在 HTTP 層面操作 POST 請求的 body 內(nèi)容,步驟繁瑣且容易出錯。
比如下圖是 Jerry 2019 年一個項目中使用 Java 消費 SAP C4C OData 服務創(chuàng)建銷售訂單的測試代碼片段,其中第88行變量 body,包含的就是手動拼接 HTTP Post 請求的負載內(nèi)容,代碼可讀性很差且不易維護。
為了避免這些缺點,提高開發(fā)人員使用 SAP S/4HANA OData 進行集成的開發(fā)效率,SAP 發(fā)布了 SAP S/4HANA Cloud SDK.
借助 SAP S/4HANA Cloud SDK,開發(fā)人員無需了解 S/4HANA OData 服務的設計細節(jié),可以采用類似自然語言的代碼風格,調(diào)用 S/4HANA OData 服務,實現(xiàn)數(shù)據(jù)的增刪改查。
下圖的例子使用 S/4HANA Cloud SDK 讀取BusinessPartnerCategory 字段值為 2 的前20條 BusinessPartner 數(shù)據(jù),并且只返回這些數(shù)據(jù)的 Partner Name, FullName 和 Customer 等字段。代碼采用 Declarative 即聲明式的方式編寫,可讀性大大優(yōu)于直接操作 HTTP Post 負載的做法。
關于 SAP Cloud SDK 的更多細節(jié),請參考我的文章:SAP S/4HANA Cloud SDK 入門介紹。
而另一大類 SAP SOAP API 的消費方式,請參考 Jerry 之前的文章:如何在 SAP BTP 平臺 ABAP 編程環(huán)境里消費基于 SOAP 的 Web Service.
除了 SAP API Business Hub 上提到的這三種 API 之外,Jerry 之前的文章:在 SAP BTP 上體驗 SAP HANA Cloud 試用版本,還提到過使用 HANA Client 工具庫,直接把待執(zhí)行的 SQL 語句發(fā)送給 SAP HANA Cloud 實例;后者執(zhí)行完畢后,將結果返回給 HANA Client:
這種方式類似 ADBC 和 JDBC,細節(jié)可以參考 Jerry 這篇文章:在 SAP BTP 上體驗 SAP HANA Cloud 試用版本。
本文介紹一種類似的數(shù)據(jù)消費方式:Open Database Connectivity 即 ODBC,開放數(shù)據(jù)庫互連。
ODBC 提供了一種標準的 API 方法來訪問數(shù)據(jù)庫管理系統(tǒng)即 DBMS. ODBC API 利用 SQL 來完成絕大多數(shù)數(shù)據(jù)庫操作。
下面我們通過一個實際的例子來了解 ODBC 的用法。這個例子的場景是,在 SAP BTP 平臺 ABAP 運行環(huán)境里,創(chuàng)建數(shù)據(jù)庫表和對應的 CDS view,然后使用本地的 Excel 文件,通過 ODBC 訪問 CDS view 的內(nèi)容。
首先在 SAP BTP ABAP 運行環(huán)境里創(chuàng)建兩個簡單的數(shù)據(jù)庫表,存放訂單抬頭和行項目信息:
插入一些測試數(shù)據(jù):
然后創(chuàng)建對應的 CDS view:
下面我們需要通過 Service Definition 將這兩個 CDS view 的數(shù)據(jù)暴露給外部消費者。
Jerry 之前的文章?30分鐘用 Restful ABAP Programming 模型開發(fā)一個支持增刪改查的 Fiori應用,曾經(jīng)介紹過如何基于 RAP 模型,快速基于 CDS view 創(chuàng)建出一個 Fiori 應用出來。
- Service Definition
- Service Binding
- Communication Scenario
- Communication Arrangement
而通過 ODBC 將 CDS view 暴露給外部消費者,仍然需要按照上述順序創(chuàng)建對應的開發(fā)對象。
首先創(chuàng)建 Service Definition,將之前創(chuàng)建的兩個 CDS view 通過關鍵字 expose 暴露出去,通過 as 關鍵字設置別名為 Orders 和 OrderItems:
基于這個 Service Definition 創(chuàng)建一個新的 Service Binding:
Binding 類型,從下拉菜單里選擇 SQL1,以支持 ODBC:
Service Binding 的名稱起名為 ZORDERS,在文章最后通過 Excel 消費這個 Service 時,能在 Excel 里看到同名的節(jié)點,其下包含了通過 Service Definition 暴露出來的 OrderItems 和 Orders 兩個視圖:
創(chuàng)建新的 Communication Scenario:
在該 Scenario 的 Inbound 標簽頁里,分配標準的 Inbound Service S_PRIVILEGED_SQL1,用于支持對 CDS view 的 SQL 訪問操作。
切換到 Authorization 標簽頁,添加新的 Authorization 對象 S_SQL_VIEW,并分別維護其三個字段的值:
- SQL_SCHEMA: ZORDERS,即我們要授予訪問權限的 Service Binding 名稱。
- SQL_VIEW: *. 這個值意味著允許訪問 Service Binding ZORDERS 關聯(lián)的 Service Definition 中,通過 expose 關鍵字暴露的所有 CDS view.
- SQL_VIEWOP: SELECT,只讀訪問。
點擊 Publish Locally:
創(chuàng)建一個新的 Communication System,取名 SQL_ACCESS:
給其分配一個新建的 Communication User. 稍后我們在 Excel 里使用 ODBC 讀取 CDS View 數(shù)據(jù)時,會要求輸入該用戶的訪問密碼。
最后,創(chuàng)建 Communication Arrangement,把生成的 Service URL 即下圖黃色高亮區(qū)域的字段抄下來,后續(xù)創(chuàng)建 Data Source 時,會填寫該值。
在本地安裝 ABAP ODBC Driver,訪問 SAP Support Portal,輸入關鍵字 ODBC DRIVER FOR ABAP 進行搜索:
https://launchpad.support.sap.com/#/softwarecenter
根據(jù)操作系統(tǒng)的類型下載對應版本的驅(qū)動:
同時下載 SAPCRYPTOLIB:
安裝完下載的驅(qū)動后,啟動操作系統(tǒng)的 ODBC Data Source Administrator 應用,添加一條新的 User Data Source Name(簡稱為 User DSN):
ABAP ODBC 驅(qū)動安裝成功后,在新建向?qū)Ю锬芸吹叫碌尿?qū)動類型:ODBC driver for ABAP.
在 DSN 創(chuàng)建向?qū)е芯S護 Data Source 的明細。其中 Hostname 字段,來自 Communication Arrangement 的 Service Url 字段值。Crypto Library 字段,為前文從 SAP Support Portal 下載的 SAPCRYPTOLIB 解壓到本地后的絕對路徑:
Data Source 創(chuàng)建好之后,新建 Excel 文件,選擇 From ODBC 進行導入:
選擇剛剛建好的名為 Jerry-ABAP 的 Data Source,輸入 Communication Scenario 里維護的用戶名和密碼:
點擊 Connect,即可預覽 SAP BTP ABAP 環(huán)境里 Service Definition 暴露出來的 CDS view 的數(shù)據(jù):
點擊 Load 按鈕,將這些數(shù)據(jù)導入到 Excel 中。
在 Advanced options 里,我們可以自由編寫 SQL 語句,將 Excel 當成一個簡單的 SQL 控制臺使用:
上圖編寫的 SQL 語句,將訂單行項目的數(shù)量進行求和,并顯示結果到 Excel 里:
相信通過本文的例子,大家能對如何通過 ODBC 消費 SAP BTP 平臺 ABAP 環(huán)境的 CDS view 數(shù)據(jù)有了一個直觀的認識,感謝閱讀。
更多閱讀
-
SAP Cloud for Customer 如何直接消費S/4HANA API
-
SAP OData 編程指南
-
在 SAP BTP CloudFoundry 環(huán)境下消費 ABAP On-Premise OData API
-
使用 SAP Cloud Application Programming 模型開發(fā) OData API 的一個實際例子
-
SAP C/4HANA Sales Cloud使用 OData 服務和第三方系統(tǒng)集成的一個具體例子
-
SAP S/4HANA Cloud SDK 入門介紹
-
如何在 SAP BTP 平臺 ABAP 編程環(huán)境里消費基于 SOAP 的 Web Service
-
在 SAP BTP 上體驗 SAP HANA Cloud 試用版本
-
30分鐘用 Restful ABAP Programming 模型開發(fā)一個支持增刪改查的 Fiori應用
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 签名设计一笔签步骤「建议收藏」(在邮件中
- 下一篇: 迎着风向前冲是什么歌名 迎着风向前冲是什