筆者前一篇文章,介紹了下圖所示的技術(shù)解決方案,適用于那些雖然后臺 ABAP 系統(tǒng)版本低于 NetWeaver 7.0, 無法使用 OData,但仍計劃使用 Angular,React 和 Vue 等主流前端開發(fā)框架,消費 ABAP 后臺 BAPI 的客戶們。 如果不用 OData,Web 應(yīng)用如何消費 ABAP 系統(tǒng)的 BAPI 等業(yè)務(wù)邏輯? SAP 官方對主流的編程語言和工具,比如 C#,Java,Python 和 Node.js,都提供了完備的 SDK,開箱即用。 應(yīng)用開發(fā)人員運用這些 SDK,能很容易地選擇自己熟悉的技術(shù)棧,通過 RFC 調(diào)用的方式,消費 ABAP 后臺的 API. 本文介紹如何使用 JavaScript 這門編程語言,連接 ABAP 系統(tǒng)。 JavaScript 包含瀏覽器端和服務(wù)器端執(zhí)行兩種場景。瀏覽器端運行的 JavaScript,可以使用 HTTP 協(xié)議,消費 ABAP 系統(tǒng)通過 ICM(Internet Communication Manager) 暴露出來的后臺服務(wù)。 筆者之前工作中的很多原型開發(fā),均采取了這種方案。因為不需要額外的 OData 建模和實現(xiàn),開發(fā)速度非常快。 一些具體的例子: 運行在服務(wù)器端的 JavaScript,即 Node.js. SAP 提供了連接 SAP ABAP 系統(tǒng)的 Node.js SDK,名叫 node-rfc. https://github.com/SAP/node-rfc 使用這個庫之前,需要按照上述文檔介紹的步驟,先下載 SAP NW RFC SDK zip 包,解壓后,將 lib 文件夾的路徑,配置到操作系統(tǒng)的 PATH 環(huán)境變量中。 下面通過一個實際的例子來介紹這個 SDK 的用法。測試用的 Function Module 是 SAP 標(biāo)準發(fā)布的 STFC_STRUCTURE. 這個 Function Module 專門用來演示,在 RFC 過程中如何傳遞 ABAP Structure和 Table 這種結(jié)構(gòu)的參數(shù)。 其參數(shù)定義如下,接受一個輸入?yún)?shù) IMPORTSTRUCT 和 TABLE 參數(shù) RFCTABLE. 其內(nèi)部邏輯只是把調(diào)用方通過這兩個參數(shù)傳遞進來的數(shù)據(jù),再直接返回給調(diào)用方。 Node.js 完整代碼如下:
代碼第一行,通過 require 導(dǎo)入 node-rfc, 因此需要在 package.json 的 dependencies 區(qū)域?qū)胍蕾?,然后使?npm install 安裝依賴。 代碼第二行,通過 Destination 拿到連接 ABAP 系統(tǒng) MME 的客戶端實例。在 ABAP On-Premise 和 SAP BTP 上都有這個 Destination 的概念。 ABAP On-Premise 系統(tǒng)通過事務(wù)碼 SM59 創(chuàng)建指向遠端 ABAP 或者第三方系統(tǒng)的 Destination. 在基于 node-rfc 的應(yīng)用里,通過文件來定義 Destination. 在項目文件夾里新建一個 sapnwrfc.ini 文件,維護如下內(nèi)容,就定義了一個指向 ABAP 系統(tǒng) MME 的 Destination.
這個 ini 文件里的值,都可以從 SAPGUI 登錄系統(tǒng)的選項里獲得。 代碼中的兩個 JavaScript 變量,abap_structure 和 abap_table, 分別用來維護準備傳遞到 ABAP Function Module Importing 和 Table 參數(shù)的內(nèi)容。最后調(diào)用 client 實例方法 call,就能通過 RFC 方式,向名為 MME 的 Destination 指向的 ABAP 系統(tǒng),發(fā)起 RFC 調(diào)用了。 將上面的代碼保存成一個 .js 文件,用命令行 node 執(zhí)行,看到下列從 ABAP 后臺系統(tǒng)返回的輸出: 執(zhí)行之后,在當(dāng)前項目文件夾內(nèi),自動生成了一個 log 文件:dev_rfc.log,其中提到了一個名叫 CPIC library 的庫及其版本。 ABAP 應(yīng)用開發(fā)人員不會直接和這個庫打交道。CPIC 是 Common Programming Interface for Communication 的縮寫。ABAP RFC 基于 CPIC,但提供了更高級別的抽象,使得 ABAP 開發(fā)人員可以更方便地實現(xiàn)遠程調(diào)用。 換言之,CPIC 是底層的通信接口,而 RFC 則是在 CPIC 之上構(gòu)建的更高級的通信機制。 筆者后續(xù)的文章,會介紹更多使用這些 SDK 去調(diào)用 ABAP RFC 的相關(guān)開發(fā)細節(jié)。 |
|