共計 3088 個字符,預計需要花費 8 分鐘才能閱讀完成。
如何在 SAP 云平臺 ABAP 編程環境上編寫第一段 ABAP 程序,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Jerry 最近會做一系列關于如何在 SAP Cloud Platform 上的 ABAP 編程環境上做開發的分享。
其實對于一個已經能夠熟練使用 ABAP Development Tools 連接 On-Premises ABAP Netweaver 服務器做開發的傳統開發人員而言,遷移到從 On-Premises 遷移到 SAP 云平臺上的難度不大,只是需要注意一些開發理念上的轉變,這個轉變我們在后續具體做開發時會提到。
這種相對平緩的遷移和學習曲線,對于 SAP 全球龐大生態圈的企業和開發人員來說,無疑是一個好消息——這意味著 SAP 正在進行中的向云端數字化轉型的旅程里,這些企業和個人也能夠加入其中,并且他們以前在 On-Premises 時代積累的寶貴的技術和業務領域知識,能夠繼續在云時代發光發熱。
我曾經在網絡上了解到,很多自學 SAP ABAP 的朋友們,面臨的第一道關卡就是在自己本地搭一臺 Netweaver 服務器出來。作為一個寫了 12 年代碼的老開發人員,Jerry 也搭過各種本地開發環境,深知這里面的水有多深。我以前的老板,也給我們分享過他當年來 SAP 成都研究院面試的時候,自己本地也搭過 Netweaver,并且短短幾天啃完幾百頁的 Netweaver 英文文檔的經歷。
相信每一位在本地搭建 Netweaver 的 ABAP 學習者,當成功看到 Hello World 輸出的那一刻,成就感一定爆棚。
然而,當 Jerry 第一次在 SAP Cloud Platform 的 ABAP 編程環境上看到 Hello World 時,卻沒有多少成就感,因為直接按照 ABAP Development Tool 里的項目創建向導一步步操作就可以了,過程比較簡單易懂——這也體現了云時代到來后,對傳統應用開發人員工作方式的影響:無需費神去關心底層硬件或者操作系統等資源,可以把精力集中于應用程序邏輯的編寫上。換言之,SAP 負責管理和維護底層 HANA 數據庫和中層的 ABAP runtime,用戶只需管理頂層的 ABAP 應用代碼。
使用 ABAP Development Tools 的項目創建向導:
New- ABAP Cloud Project:
Service Instance Connection,選擇 SAP Cloud Platform CloudFoundry environment:
選擇 Region,輸入用戶名密碼,前提是你得在這個 region 下有一個 global Account。
下圖是我在 SAP Cloud Platform 的 CloudFoundry 環境里的 Global Account:
這個 Global Account 所屬的 space 下面我創建了一個 ABAP 系統實例,ID 為 ME1:
這個 ABAP 運行實例具有 16GB 運行內存,64GB 的 HANA 內存。
再回到 ABAP Development Tools, 在項目創建向導里使用 Cockpit 里維護的上述屬性:
點 Next,在 ABAP Development Tools 里會看到一個嵌入的登錄窗口。因為 Jerry 使用的是 SAP 社區 Mentor 的賬號,所以登錄窗口顯示的標題是:Welcome to Mentors!
在向導里點 Finish 按鈕:
點擊之后,在 ABAP Development Tools 左側的項目列表里就能看見創建好的 ABAP Cloud 項目了,接下來在這個項目里編寫 ABAP 代碼進行開發的方式,和我們用 ADT 連接 On-Premises 系統基本一致。大家可以看到下圖創建好的高亮的 ABAP Cloud 項目 (系統 ID 為 ME1), 和其他 On-Premises 上的 ABAP 項目外觀上沒有區別。
這兩種 ABAP 項目的差異在于,ABAP Cloud 項目里能夠使用的 ABAP 語言特性,只是傳統 ABAP 語言的一個子集,比如傳統 ABAP 語言里和 Dynpro 相關的關鍵字,即只能工作在 SAPGUI 中的那些關鍵字,因為在 Cloud 環境下不再適用了,所以在 ABAP Development Tools 的 ABAP Cloud 項目里禁止使用。
現在就可以進行第一行 ABAP 程序的編寫了。
和 On-Premises 環境下一樣,首先創建一個本地包 ZJERRY(local package):
然后彈出提示要求創建 Transport Request(傳輸請求):
Package 和 Transport Request 都有了之后,就可以開始編碼了。
在 On-Premises 時代,我們想用 ABAP 打印 Hello World,直接 SE38 創建一個報表 (Program,如下圖所示),然后 WRITE: Hello World 就可以了。
在 SAP Cloud Platform 上,新建列表的選項里已經沒有了 ABAP Program 這一項。
所以我們只能選擇新建一個 ABAP Class:
指定把這個類存儲到剛剛新建的 Transport Request 里:
接下來的操作,好比在 Java class 的 static public void main(String[] args) 方法里用 System.out.println 打印 Hello World 一樣。
這個新建的 ABAP 類實現 IF_OO_ADT_CLASSRUN 接口, 進行 Hello World 的打印:
激活代碼,可以看到和 On-Premises 一樣,這個類的各個組成部分需要一起激活。
至于為什么 Jerry 在 IDE 里書寫了一段純文本的 ABAP 源碼,但是激活時任務列表里產生了這么多對象,請參考 Jerry 的博客:General properties of ABAP Classes / Interfaces
https://blogs.sap.com/2014/03/14/general-properties-of-abap-classes-interfaces/
激活完畢后,Run As- ABAP Application(console):
Console 里看到輸出:
觀察這個類執行的交互日志,發現我們在 ABAP Development Tools 里觸發的執行動作,IDE 發送了一個 SAP Cloud Platform 上 endpoint 為 /sap/bc/adt/oo/classrun 的 POST 請求。
這段程序在 SAP 云平臺的 ABAP 實例上執行,結果再以 HTTP 響應的方式返回給 IDE。
IDE 發送請求給 SAP Cloud Platform 的具體 Java 代碼,可以按照 Jerry 的文章:那些年我用過的 SAP IDE 里介紹的方法去反編譯后查看。
在 SAP 云平臺上的 ABAP 編程,和傳統 On-Premises 系統編程相比,一個顯著的差異就是,出于保持簡單,降低操作風險的準則,以及在提供操作的靈活性和云平臺安全性等方面的折衷考慮,開發人員在 SAP Cloud Platform 的 ABAP 編程環境無法像后者一樣能夠任意訪問 Netweaver 上的資源。
以傳統 ABAP 開發人員在 Netweaver 上進行二次開發最常用的 ABAP OPEN SQL 讀表的操作為例,這種直接訪問數據庫表的行為在 SAP Cloud Platform 上會引起語法錯誤。
即使像下圖這樣在 ABAP 代碼里直接引用 Netweaver 的數據庫表,在 SAP 云平臺上也是不允許的。
所有對底層資源的訪問都必須通過 SAP 定義的白名單里的 API 進行,即下圖 Released Objects 里包含的 API。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。