這是 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", 即 "通用報表編寫處理器"。
伴隨着 SAP R/3 在企業管理軟件領域大放異彩之后,ABAP 也就有了我們如今熟知的全稱:Advanced Business Application Program —— 高級業務應用程序編程。
我還能夠回憶起,Jerry 2007 年剛剛學習 ABAP 開發時,我的 QQ 簽名是: Alawys Busy Always Problems.
SAP R/1:初出茅廬的 ABAP
1972 年,德國幾位理想者因為一個偉大的想法聚在一起,立志為企業運營創造出一種革命性的單一集成軟件解決方案。這幾位才俊當時可能沒有預料到,他們的想法,后來竟成就了一家世界一流的企業管理軟件企業。
同年,這 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,只是被用來簡單地根據客戶的主數據和事務數據創建展現報表,就像初出茅廬,尚未通過火燒博望坡和火燒新野而嶄露頭角的諸葛孔明一樣,還沒有向業界展示出自己真正的潛力。
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 的界面。
1980 年,SAP 的員工數增長到了 80 多名,搬到了新的 Walldorf 辦公室。
SAP R/2 中的數字 2 代表兩層,即表現層位於一台服務器,而應用層和數據庫層位於另一台大型機服務器上。換言之,SAP R/2 是部署在大型機上的企業軟件解決方案。
SAP R/3:ABAP 一鳴驚人
SAP R/3 於 1992 年發布,是 SAP ERP 系統的客戶機/服務器版本,后來成為 SAP 最受客戶歡迎的產品之一。SAP R/3 從某種程度上說樹立了 ERP 軟件的行業標准:很長一段時間內,SAP 幾乎成為了 ERP 的同義詞。
SAP R/3 中的數字 3,代表展現層,應用層和數據庫層分別部署,這也標志着 SAP R 系列的軟件發展到成熟期。
同時借着 Windows 操作系統發展的東風,SAP 引入了 SAPGUI 作為 SAP R/3 的用戶界面。沒錯,就是如今包括 Jerry 閑暇時仍然會登錄玩一玩的 SAPGUI, 算起來它已經有 29 年的歷史了。作為一款終端用戶客戶端和集成開發環境,SAPGUI 在軟件開發布滿驚濤駭浪的歷史長河中始終占有一席之地,這充分體現了其優秀程度。
下圖是使用 SAPGUI 呈現的 SAP R/3 操作界面:
ABAP 的語法
由於歷史原因,ABAP 語法受同時代編程語言 COBOL(Common Business-Oriented Language) 影響很大。
COBOL 采用 300 多個英語單詞作為保留字,以一種接近於英語書面語言的形式來描述數據特性和數據處理過程,便於理解和學習。
COBOL 是專門為企業管理而設計的高級編程語言,可用於統計報表、財務會計、計划編制、作業調度、情報檢索和人事管理等方面。
ABAP 的一些關鍵字,例如 MOVE、MOVE-CORRESPONDING、ADD、ADD-CORRESPONDING 等,在 COBOL 中均有確切的對應關系。
當然 ABAP 也絕不是一門固步自封,躺在過去輝煌功勞簿上停滯不前的編程語言,而是不斷吸取其他現代編程語言的長處不斷進化。在引入對面向對象編程特性的支持后,ABAP 中出現的 NEW 等關鍵字,從中也依稀能分辨出 C++/Java 等編程語言的身影。
同時,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 實現方案。
比如 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 對雲端編程環境的支持,通過一個代號為 Steampunk (蒸汽朋克) 的項目所啟動,在 Jerry 之前的文章 從 SAP 社區上的一篇博客開始,聊聊 SAP 產品命名背后的那份情懷 里有詳細介紹。
SAP Business Technology Platform 是 SAP 向雲端轉型過程中,面向整個 SAP 生態體系,提供以業務為中心的統一開放式平台。而 ABAP 作為 SAP BTP 上和 Cloud Foundry,Kyma 並駕齊驅的三大開發環境之一,是用於 SAP 旗艦級產品 S/4HANA Cloud 擴展開發的官方推薦環境,其在 SAP 整個技術體系中的重要性不言而喻。
另一方面,如今隨着 ABAP 不斷的進化,很多最新的開發特性,比如 CDS view,Restful ABAP Programming 開發對象諸如 Behavior Definitions, Service Bindings 等等均只能在 ABAP Development Tool 中創建和管理。這也預示着傳統的 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 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 不會過時,只是不再會是唯一的選擇。
感謝閱讀。
Jerry 的 ABAP 專題
更多Jerry的原創文章,盡在:"汪子熙":