這是 Jerry 2021 年的第 56 篇文章,也是汪子熙公眾號總共第 333 篇原創文章。

本文目錄

SAP R/1:ABAP 初出茅廬

SAP R/2:ABAP 初試鋒芒

SAP R/3:ABAP 一鳴驚人

ABAP 的語法

SAP ALV

ABAP 的未來

ABAP 將來會消亡嗎?

SAP 總是善於根據市場最新的動態和變化,來調整其產品的命名策略。一個例子就是從誕生之初的 SAP HANA Cloud Platform,到 SAP Cloud Platform,再到如今的 SAP Business Technology Platform (簡稱 SAP BTP)。

而作為 SAP 最成功,最為人所知,最具代表性的標誌之一,ABAP, 誕生之初的德文全稱是 “Allgemeines Beleg Auswertungs Programm”, 翻譯成英語為 “General Program to Evaluate Documents”, 中文意思為 “處理評估文件的通用程式”。

其後 ABAP 伴隨著 SAP R/2 到 SAP R/3 的成長,其全稱也更名為 “Allgemeiner Berichts Aufbereitungs Prozessor”, 翻譯成英文為 “Generic Report Preparation Processor”, 即 “通用報表編寫處理器”。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

伴隨著 SAP R/3 在企業管理軟體領域大放異彩之後,ABAP 也就有了我們如今熟知的全稱:Advanced Business Application Program —— 高階業務應用程式程式設計。

我還能夠回憶起,Jerry 2007 年剛剛學習 ABAP 開發時,我的 QQ 簽名是: Alawys Busy Always Problems。

SAP R/1:初出茅廬的 ABAP

1972 年,德國幾位理想者因為一個偉大的想法聚在一起,立志為企業運營創造出一種革命性的單一整合軟體解決方案。這幾位才俊當時可能沒有預料到,他們的想法,後來竟成就了一家世界一流的企業管理軟體企業。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

同年,這 5 名 IBM 前員工創立了 SAP。 1976 年,約有 30 名 SAP 員工,在 SAP R/1 上支援著大約 50 個客戶。SAP R/1 又被稱為 SAP RFM, 是 RF (Financial Accounting, 財務會計) 和 RM (Inventory Management/Invoice Verification, 庫存管理和發票校驗) 模組的衍生工具。

SAP R/1 中的 R 代表 Real Time,即實時處理。如今的 ABAP 開發人員眼中被視為天經地義的 ABAP 應用伺服器三層架構,即 Presentation,Application 和 Database 的三層設計,在 SAP R/1 裡都合併在同一臺物理伺服器上,這也是 SAP R/1 中 1 的含義。

當年的 SAP 還沒有獨立的辦公室,SAP 員工直接在客戶現場工作。員工們堅信,這樣做能有助於開發出客戶真正需要的產品,並對其持續最佳化。

此時的 ABAP,只是被用來簡單地根據客戶的主資料和事務資料建立展現報表,就像初出茅廬,尚未透過火燒博望坡和火燒新野而嶄露頭角的諸葛孔明一樣,還沒有向業界展示出自己真正的潛力。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

SAP R/2:ABAP 初試鋒芒

1979 年,SAP釋出了第二代 ERP系統,即 SAP R/2。 ABAP 在 SAP R/2 的開發過程中發揮了重要作用,伴隨著 ABAP 偵錯程式、螢幕編輯器的出現,儼然已成長為一個完備的整合開發環境。

SAP R/2 時代的 ABAP 給如今現代的 ABAP 貢獻了一項極為寶貴的資產,即互動式程式碼偵錯程式,這在 1979 年同類程式語言中並不常見。大約一半的 SAP R/2 程式碼是用 ABAP 編寫的,剩下的另一半由組合語言完成。

下圖是 SAP R/2 的介面。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

1980 年,SAP 的員工數增長到了 80 多名,搬到了新的 Walldorf 辦公室。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

SAP R/2 中的數字 2 代表兩層,即表現層位於一臺伺服器,而應用層和資料庫層位於另一臺大型機伺服器上。換言之,SAP R/2 是部署在大型機上的企業軟體解決方案。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

SAP R/3:ABAP 一鳴驚人

SAP R/3 於 1992 年釋出,是 SAP ERP 系統的客戶機/伺服器版本,後來成為 SAP 最受客戶歡迎的產品之一。SAP R/3 從某種程度上說樹立了 ERP 軟體的行業標準:很長一段時間內,SAP 幾乎成為了 ERP 的同義詞。

SAP R/3 中的數字 3,代表展現層,應用層和資料庫層分別部署,這也標誌著 SAP R 系列的軟體發展到成熟期。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

同時藉著 Windows 作業系統發展的東風,SAP 引入了 SAPGUI 作為 SAP R/3 的使用者介面。沒錯,就是如今包括 Jerry 閒暇時仍然會登入玩一玩的 SAPGUI, 算起來它已經有 29 年的歷史了。作為一款終端使用者客戶端和整合開發環境,SAPGUI 在軟體開發佈滿驚濤駭浪的歷史長河中始終佔有一席之地,這充分體現了其優秀程度。

下圖是使用 SAPGUI 呈現的 SAP R/3 操作介面:

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

ABAP 的語法

由於歷史原因,ABAP 語法受同時代程式語言 COBOL(Common Business-Oriented Language) 影響很大。

COBOL 採用 300 多個英語單詞作為保留字,以一種接近於英語書面語言的形式來描述資料特性和資料處理過程,便於理解和學習。

COBOL 是專門為企業管理而設計的高階程式語言,可用於統計報表、財務會計、計劃編制、作業排程、情報檢索和人事管理等方面。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

ABAP 的一些關鍵字,例如 MOVE、MOVE-CORRESPONDING、ADD、ADD-CORRESPONDING 等,在 COBOL 中均有確切的對應關係。

當然 ABAP 也絕不是一門固步自封,躺在過去輝煌功勞簿上停滯不前的程式語言,而是不斷吸取其他現代程式語言的長處不斷進化。在引入對面向物件程式設計特性的支援後,ABAP 中出現的 NEW 等關鍵字,從中也依稀能分辨出 C++/Java 等程式語言的身影。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

同時,ABAP 支援使用 OPEN SQL 的方式,在應用程式中直接對資料庫內容進行讀寫操作,為開發人員遮蔽了資料庫連線和資料庫介面的細節,這一設計在同時代其他程式語言中並不常見,也大大提高了 SAP 應用程式的開發效率。

ALV

一談起《三國演義》中的水鏡先生司馬徽,就不得不說到他的 “三國演義十大謊言排名之首” 的那句 “臥龍鳳雛,得一可安天下”。

同樣,說到 ABAP,就不能不提 ALV。

ALV 最初稱為 ABAP List Viewer,後來更名為 SAP List Viewer,可以說只要有 SAPGUI 報表需求的地方,就有 ALV 的身影。時至今日,Jerry 所處的一些 SAP 開發技術群裡,ALV 相關的程式設計討論,仍然是一個熱門的話題。使用者和市場需求說明一切:ALV 能幫助 ABAP 開發人員根據客戶資料,快速開發出其需要的各種維度的展現和分析報表。這個工具如此受開發人員和客戶的歡迎,以至於每當 SAP 推出一種新的 UI 技術比如 Webdynpro, Fiori 或是新的資料建模方式後,SAP 開發生態圈總是大聲疾呼,要求提供使用程式設計技術的 ALV 實現方案。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

比如 SAP CDS view 問世之後,SAP 也迅速推出了支援 CDS view 資料展現的 ALV 工具。詳情參考 Jerry 的文章:

一行程式碼將 SAP CDS view 資料以 ALV 的方式輸出

ABAP 的未來

現代 ABAP 的一大創新之處,是 ABAP 與 SAP HANA 資料庫的互動,以及為了支援 Fiori 和其他 Web 應用程式開發而創建出新的程式設計模型,比如 ABAP Programming Model for SAP Fiori,以及 Restful ABAP Programming(RAP)。

基於 SAP RAP 程式設計模型開發而成的應用,與生俱來具備 Restful 的特質,能充分利用 HANA 平臺的強大計算能力,支援雲環境和 Fiori UX。 SAP RAP 也是 SAP 內部建立新的 Fiori 應用程式的標準。

現代 ABAP 的另一創新,就是成功地躍入雲端。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

ABAP 對雲端程式設計環境的支援,透過一個代號為 Steampunk (蒸汽朋克) 的專案所啟動,在 Jerry 之前的文章

從 SAP 社群上的一篇部落格開始,聊聊 SAP 產品命名背後的那份情懷

裡有詳細介紹。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

SAP Business Technology Platform 是 SAP 向雲端轉型過程中,面向整個 SAP 生態體系,提供以業務為中心的統一開放式平臺。而 ABAP 作為 SAP BTP 上和 Cloud Foundry,Kyma 並駕齊驅的三大開發環境之一,是用於 SAP 旗艦級產品 S/4HANA Cloud 擴充套件開發的官方推薦環境,其在 SAP 整個技術體系中的重要性不言而喻。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

另一方面,如今隨著 ABAP 不斷的進化,很多最新的開發特性,比如 CDS view,Restful ABAP Programming 開發物件諸如 Behavior Definitions, Service Bindings 等等均只能在 ABAP Development Tool 中建立和管理。這也預示著傳統的 ABAP 開發人員,如果想緊跟 ABAP 演進的步伐,自身也需不斷學習和提高。

ABAP 將來會消亡嗎?

網路和社群上始終存在著關於 ABAP 是否會消亡的討論。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

雖然 ABAP 內確實包含一些老式的程式設計特性,但從本文之前的論述大家已經可以發現,從 ABAP 誕生之日起至今,這門程式語言就不停地進行自我改造和不斷地進化。考慮到全球在 ABAP 平臺上執行軟體的龐大客戶群(其中相當一部分是 SAP 旗艦級產 S/4HANA),以及本文介紹的 SAP 在 ABAP 方面的創新事實證明,ABAP 是一個充滿活力的環境,總能找到合適的方案來整合市場最新需求和創新。

所以,Is ABAP Dead?這個問題,相信每位 ABAP 開發者,心中都會有自己的答案。

阿諾德·施瓦辛格在《終結者》系列裡,一直扮演著“人狠話不多”的角色,然而很多臺詞都成為永恆的經典。

在《終結者5》裡他曾經說出一句能夠激勵無數高齡程式設計師的金句:

I am old, but not obsolete。

我老了,但我不過時。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

作為一門擁有數十年曆史的程式語言,ABAP is Old。 但 Jerry 更願意仿照 T800 這句金句來表達我對 ABAP 的開發:

ABAP is old, but not obsolete。

當然,更能代表 SAP 官方觀點的評論,莫過於 SAP 開發大佬 Thomas Jung 這句:

ABAP Is Not Dead, But Also Not the Only Answer。

ABAP 不會過時,只是不再會是唯一的選擇。

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來

感謝閱讀。

Jerry 的 ABAP 專題

Jerry的ABAP, Java和JavaScript亂燉

ABAP開發人員未來應該學些什麼

Jerry 2017年的五一小長假:8種經典排序演算法的ABAP實現

Jerry的ABAP原創技術文章合集

300行ABAP程式碼實現一個最簡單的區塊鏈原型

使用Java+SAP雲平臺+SAP Cloud Connector呼叫ABAP On-Premise系統裡的函式

在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務

ABAP vs Java, 蛙泳 vs 自由泳

聊聊C語言和ABAP

動手使用ABAP Channel開發一些小工具,提升日常工作效率

我用ABAP做過的那些無聊的事情

不喜歡SAP GUI?那試試用Eclipse進行ABAP開發吧

使用Visual Studio Code編寫和啟用ABAP程式碼

你的ABAP程式給佛祖開過光麼?來試試Jerry這個小技巧

在SAP雲平臺ABAP程式設計環境上編寫第一段ABAP程式

SAP官方釋出的ABAP程式設計規範

ABAP Code Inspector那些隱藏的功能,您都知道嗎?

還在用ABAP進行SAP產品的二次開發?來了解下這種全新的二次開發理念吧

ABAP Netweaver體內的那些寄生式程式語言

從SAP社群上的一篇部落格開始,聊聊SAP產品命名背後的那份情懷

雲端的ABAP Restful服務開發

如何在SAP雲平臺ABAP程式設計環境裡把CDS view暴露成OData服務

使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行程式碼傳輸

30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用

Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現

Jerry帶您瞭解Restful ABAP Programming模型系列之三:雲端ABAP應用除錯

SAP雲平臺上的ABAP程式設計環境裡如何消費第三方服務

ABAP開發者上雲的時候到了 - 現在大家可以免費使用SAP雲平臺ABAP環境的試用版了

學而不思則罔 - SAP雲平臺ABAP程式設計環境的由來和適用場景

SAP雲平臺裡的三叉戟應用

如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用

SAP 2019 TechEd Key Note解讀:雲時代下SAP從業人員如何做二次開發?

有哪些ABAP關鍵字和語法,到了ABAP雲環境上就沒辦法用了?

ABAP開發環境終於支援以駝峰命名法自動格式化ABAP變數名了

利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務

一段讓人瑟瑟發抖的ABAP程式碼

昨日萬聖節ABAP怪獸級程式碼謎團,公佈答案啦

介紹一種在ABAP核心態進行內表高效複製的方法

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

當ABAP遇見普羅米修斯

使用ABAP繪製可伸縮向量圖

ABAP開發環境語法高亮的那些事兒

SAP錯誤訊息除錯之七種武器:讓所有的錯誤訊息都能被定位

使用ABAP操作Excel的幾種方法

SAP GUI裡的收藏夾事務碼管理工具

SAP GUI和Windows登錄檔

有了Debug許可權就能幹壞事?小心了,你的一舉一動盡在系統監控中

ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼

實現ABAP條件斷點的三種方式

使用SAT跟蹤監控從瀏覽器開啟的SAP應用的效能和呼叫棧

一個13年ABAP老兵的建議:瞭解這些基礎知識,對ABAP開發有百利而無一害

SAP ABAP Netweaver容器化, 不可能完成的任務嗎?

SAP產品增強技術回顧

SAP API開發方法大全

淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試

SAP ABAP應用伺服器的HTTP響應狀態碼(Status Code)

SAP ABAP裡存在Java List這種集合工具類麼?CL_OBJECT_COLLECTION瞭解一下

ABAP面試題系列:寫一組會出現死鎖(Deadlock)的ABAP程式

SAP ABAP Netweaver伺服器的標準登入方式講解

SAP ABAP關鍵字語法圖和ABAP程式碼自動生成工具Code Composer

SAP ABAP SM50的另類用途 - ABAP工作程序對資料庫表讀取操作的檢測

關於SAP ABAP字元變數和字串變數字元個數的一個知識點,和一個血案

SAP ABAP一組關鍵字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析

SAP ABAP和Java裡的弱引用(WeakReference)和軟引用(SoftReference)

SAP AMDP介紹 - ABAP託管的HANA資料庫過程

給你的ABAP物件打上標籤(Tag)

歷史上的今天:程式語言中null引用的十億美元錯誤

ABAP Development Tool 程式碼模板和其他一些實用技巧彙總

SAP ABAP Development Tool 提高開發效率的十個小技巧

如何在 SAP BTP 平臺 ABAP 程式設計環境裡消費基於 SOAP 的 Web Service

更多Jerry的原創文章,盡在:“汪子熙”:

ABAP 真的會過時嗎?聊聊 ABAP 的過去,現在和未來