ABAP 真的会过时吗?聊聊 ABAP 的过去,现在和未来
这是 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 专题