这是 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的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