SAP与SAP ABAP简介
德国SAP公司成立于1972年,总部位于德国沃尔多夫,是全球领先的企业管理软件解决方案提供商。根据福布斯的排名,截至2016年,SAP是世界第三大软件公司。
经过历年发展,SAP在2005年推出了SAP ERP 6.0,其中的核心产品是SAP ECC 6.0 (ERP Central Component),即企业资源计划(Enterprise Resource Planning,ERP)核心组件,提供了生产资源计划、制造管理、财务管理、销售管理、采购管理、质量管理、存货管理、分销与运输管理、人力资源管理等企业集成管理功能。
2010年SAP推出SAP HANA平台,提供了一个软硬件结合的解决方案,提供了高性能的数据处理平台。
自2011年开始,SAP陆续推出了ECC的更新版本SAP ECC 605、SAP ECC 606和SAP ECC 607。
2014年SAP推出了SAP HANA云平台,2015年推出了最新的ERP产品SAP S/4 HANA。
ABAP(Advanced Business Application Programming,高级业务应用编程)语言是由SAP公司开发的一种高级程序语言,用于SAP软件系统(如SAP ECC系统、SAP S/4 HANA等)的商务应用开发,在SAP系统的企业级应用与开发中有着广泛和重要的应用。
SAP公司在1983年推出面向过程的ABAP,1999年发布了面向对象的ABAP,2003年发布了用于Web UI开发的Web Dynpro for ABAP,2015年推出了支持S/4 HANA内存计算新特性的ABAP for HANA。目前,SAP的云平台SAP Cloud Platform也全面支持ABAP语言。
随着SAP平台的升级,面向对象的内容也越来越多地出现在SAP ABAP的架构之内,尤其是S/4 HANA和Fiori的推出,ABAP的开发方式也随之得到更新,许多基础服务如AMDP、BOPF、ADBC、SAP Gateway等都基于面向对象的ABAP,掌握一定面向对象的ABAP的特性、设计原则与方法是ABAP技术顾问必要的技术升级选择。
为什么要学习面向对象的ABAP
如果在软件论坛上提这样一个问题:世界上最好的编程语言是什么?一定会引发一场持久的争论,虽然目前趋于一致的回答是“PHP”,但排名第二的编程语言之争依然没有结论。
但无论如何,基于封闭系统的ABAP语言都不会出现在争论中,ABAP语言的开发者也似乎从来没有这样的念想—“我和谁都不争,和谁争我都不屑”。(Walter Savage Landor作,杨绛先生译。)
作为ABAP语言进一步发展的成果,Object-Oriented ABAP(面向对象的ABAP)尤其如此。
面向对象的ABAP虽然“脱俗”,但似乎有点曲高和寡,给人的感觉是应用寥寥,如果读者不确定是否需要深入阅读本书,可以先思考以下几个问题。
一、SAP已经向HANA和云平台(SaaS平台S/4 HANA Cloud)转移了,ABAP还需要学习吗?本书的出版就证明ABAP还有学习的必要。主要原因是:
1)作为SAP ECC等SAP核心系统的编程语言(也就是说,SAP ECC是用ABAP开发出来的),ABAP具有深厚的历史背景,其开发成本之大也是不可考量的。无论基于技术原因还是商业战略,SAP都不可能放弃ABAP语言而转用更为通用的语言作为核心系统的语言。
2)ABAP在后台业务和商业逻辑开发中是重点,即便数据库平台升级为HANA、应用平台移到云端,或者前端开始部分使用更为轻量的SAP Fiori,在SAP ECC或者S/4 HANA平台上ABAP依然是应用平台核心开发语言。
3)除了SAP自己发布的系统是基于ABAP代码的,现实中大量的客户定制化开发、数量众多的客户的核心业务逻辑还需要大量的ABAP程序的支撑和维护,尤其在SAP的大型企业用户中,SAP的应用实施大多已经完成,而深入业务开发的ABAP的二次开发却数量巨大,并且难度越发艰深,基于SAP平台的ABAP语言在后台逻辑的定制开发上还是无法替代的。
综上所述,ABAP不仅有必要继续学习,而且不光技术顾问要深入学习ABAP,为了适应企业业务开发的深入,业务顾问也要学习一定的ABAP知识。
二、既然有继续学习SAP ABAP的必要,但针对目前大多数情况的普通需求,一般的ABAP开发从效率和效果上都有很好的表现,那么我们为什么还要学习面向对象的ABAP语言呢?
第一大原因就是SAP HANA和Fiori的推出。
SAP HANA(High-Performance Analytic Appliance)是SAP提供的软硬件结合的计算平台,HANA基于内存数据库技术,可以提供高性能的数据分析与处理的解决方案。
SAP所推出的最新版本的ERP产品S/4 HANA就是以HANA为平台的。
SAP Fiori是一套全新的用户界面交互系统标准,提供简洁化、平面化、用户可定制的个性化的终端。SAP新发布的SAP第四代ERP产品SAP S/4 HANA所推荐的前端用户交互系统就是SAP Fiori Apps。
SAP Fiori是新一代SAP ERP系统在PC、平板电脑、智能手机和设备上推荐的客户端。而传统的SAP GUI人机交互界面客户端则将仅能运行在PC上(SAP GUI客户端还是会长期存在的,但更多的是作为SAP实施工作的配置界面,以及作为SAP专职工作人员的日常工作界面。而企业中很多的SAP用户需要的是PC上更简洁的、仅与自己业务相关的定制化的Fiori界面,或者需要的是移动办公相关设备上的Fiori界面)。
针对SAP HANA和Fiori,SAP ABAP也有相当多的改变:
1)如最新版本的ABAP for HANA 7.40/7.50,为了充分运用HANA的数据处理与运算能力,ABAP引入了AMDP:AMDP(ABAP-Managed Database Procedure)是一组预定义的ABAP的类,用户可以通过这些类方法调用HANA SQL Script或Native SQL,SQL Script是SAP HANA内置的SQL扩展语言,可用于实现快速内存计算。
2)为了实现ABAP的快速开发,ABAP采用了SAP ABAP BOPF:BOPF(Business Object Processing Framework)是SAP业务对象处理框架,是一个基于面向对象ABAP的开发框架,提供了一组通用的服务和功能,加快了标准化、模块化的开发。
3)为了实现Fiori应用,前端采用了UI5(HTML5)技术,而后端系统依然是SAP ABAP,并采用了SAP网关(SAP Gateway)平台:SAP Gateway是一个技术平台,提供了一个SAP系统与外部移动设备和系统(如浏览器)的连接平台,SAP Gateway与ABAP采用了BOPF的集成方式,SAP Gateway与Fiori则采用了REST和OData协议进行集成。
以上提到的这些技术都是基于面向对象ABAP的,如果要深入学习ABAP HANA和Fiori,则目前ECC平台上存在的ABAP OOP就是重要的基础知识。
三、虽然平台的更新需要大家开始使用面向对象设计,如果我们的企业一直不更新SAP平台到HANA,那么我们一直使用传统的ABAP不也可以吗?
先不讨论HANA的优越性和升级的必然性,也不从技术的角度来分析,而是换一个新的角度来看。虽然在很多情况下面向对象的ABAP不是目前ECC系统上必需的开发方案,但从ABAP开发者的认知和竞争发展的角度来说,学习ABAP OOP却是很有必要的,原因如下:
1)技术壁垒:当其他国家(如美国、印度)的开发团队纷纷开始进行ABAP面向对象程序设计时(现实就是如此),中国的开发团队只能了解一些概念和皮毛,那么合作起来就不能形成对等关系,这并不太高的技术壁垒会使得我们丧失商业机会和信任。
2)SAP运维和实施的必然方向:随着国内外企业的SAP ERP产品实施越来越普遍,企业会逐渐深挖和定制化已经实施的SAP系统,那么必然采用的就是ABAP开发和接口开发,除了一些简单的报表不用深挖和重构,深入业务开发的ABAP代码会随着业务的改动变得越来越复杂和冗长,开发和维护的难度也会越发艰难。而设计良好的面向对象的ABAP在笔者做过的项目中已经发挥出了优秀的功效,其代码的可维护性、可扩展性都比过程化ABAP优秀很多。面向对象也是ABAP开发的必然趋势。
3)能力的证明:客户或团队的合作前提很多时候是基于共同的语言和理解,我们可以不用ABAP OOP,但却不能不懂。
4)获得发展的主动权:当掌握了这门基础而重要的技术和方法之后,我们才能拥有知识上的必要储备,才能为迎接必然的平台升级带来的冲击做好准备,不至于临阵磨枪、亦步亦趋,继而从容地获得发展的主动权。
根据上文的提问和回答,如果大家想继续深入学习面向对象的ABAP,可参考本书并共同讨论学习。本书将遵循从概念到实例、从实例到经验,由浅入深地介绍面向对象的ABAP语言和设计方法。
本书内容结构
本书分为以下几个部分:
1)ABAP语言程序设计基础(第1~2章) 介绍传统的ABAP语言的入门、语法和关键知识点,它们也是面向对象ABAP的基础,有经验的ABAP开发者可以略过此部分。
2)面向对象ABAP语言程序设计基础(第3~4章) 介绍面向对象ABAP的概念、ABAP OOP的关键知识点、程序实例,此部分主要介绍的是ABAP OOP的语法和规则。
3)面向对象程序设计概念与思想(第5~7章) 面向对象的一些重要概念的理解和深入讨论,此部分也是笔者与一些经验丰富的传统ABAP开发者讨论的结果。对于资深的传统ABAP开发者来说,迅速掌握面向对象的ABAP语法并开始用OOP规则编写程序都不是什么难题,难的是传统语言开发者对面向对象的设计思想、概念的理解和认可,此部分就是针对面向对象的思想和一些设计原则及模式的讨论。
4)面向对象程序设计实例(第8~9章) 此部分是对一些面向对象ABAP工程实践的总结,如动态创建数据、泛型、OO ALV、对象持久化等实例。并且讨论了面向对象的分析设计过程,如OOA、OOD、ABAP的敏捷开发Agile Scrum、单元测试等。
本书所有代码均通过运行调试,示例代码可以从https://github.com/ABAPOOP/ABAP_OOP_SAMPLE中下载。
本书所用测试系统环境有两个,如下所示。
1)ABAP OOP on ECC部分:
IDES EHP7 for SAP ERP 6.0
SAP Basis Component SAP_BASIS 740
SAP_ABA 740
数据库为MS SQL Server 2008 R2
2)ABAP for HANA部分(代码中会标注为HANA 1610):
SAP S/4 HANA 1610
SAP Basis Component SAP_BASIS 751
SAP_ABA 75B
数据库为SAP HANA Database
SAP HANA Studio环境:
Eclipse Neon 3 Release (4.6.3)
SAP_HANA_CLIENT: SAP HANA Lifecycle Management 1.00
读者对象与声明
结合实际开发案例,本书系统地讲解了SAP ABAP面向对象程序设计的基础与原理、面向对象设计的重要概念和思想,书中的程序示例都采用面向对象ABAP以及HANA平台上的ABAP代码进行实现。本书适合SAP实施企业的SAP ERP开发者、项目经理、技术与业务顾问,以及大专院校的相关专业的师生阅读和参考。
SAP实施公司和企业内部的SAP ERP ABAP技术顾问可以略过入门级别的ABAP基础内容,参考面向对象设计思想和概念部分,对比传统开发思路的不同之处。
SAP实施公司的项目管理人员和业务顾问可以从ABAP语言入门开始逐步了解ABAP面向对象设计,并了解语言和功能的逐步更新。
本书也适合大专院校计算机科学与技术、软件工程、信息管理、信息科学等专业的师生参考。
本书遵循从入门到熟练的步骤,尤其适用于刚开始学习SAP ABAP和在S/4 HANA平台上开发的读者。
本书在编写过程中参考了大量资料,包括SAP官方资源、图书及网络资源等,为了遵守相关的保密原则和职业道德,笔者对客户、任职公司的商业秘密和数据未作任何披露,本书仅采用了笔者在多年的实际工作中遇到的真实业务场景和设计方法,来介绍程序设计的一些经验。
由于作者水平有限,就本书中的不足之处和错误,敬请联系作者邮箱:
[email protected],欢迎指正。
致谢
感谢家人的支持与鼓励,感谢在工作和学习中各位老师、同事和同学的帮助。感谢我的导师—复旦大学的杨卫东博士,感谢复旦大学的龚益鸣教授。感谢东北大学的郑秉霖教授、郜绍辉老师、周黎明博士、俞胜平博士、崔恒吉老师。感谢辽宁石油化工大学的刘金义博士、李春阳老师,感谢中国石油大学的宫敬教授、于达教授。
感谢在工作和学习中给予笔者帮助和支持的埃森哲(中国)公司的Koi Hu、Ding Wei-hong、Anna Wang、Michael Liang、Danny Wang、Kang Wei总监,感谢Roger Xu、Jack Zhang、Yao Wei、Simon Wang、Zuo Feng高级经理,感谢Lily Ji、Michael Pan、Kevin Wang、Julian Zhu、Mandy Jia、Liu Xincheng、Nick Gao、Issay Fu、Vincent Xu、Tommy Duan、Oliver Liu、Qin KiKi、Wang Jingyan、Nicole Li、Sherry Guo、Shen Zhiqing、Wendy Yao、Jovial Xu、Lina Zhang、Dong Wenlong、Edison Di经理,感谢陶氏化学(美国)公司的客户代表Brooke Mitchell博士、David Stenhouse、Martin Reggette、Curtis Ahlberg经理、质量架构师John Reiss、Allen Ross、Richard Greer、Scott Short、Jenny Bonner、客户代表Shaun Johnson,感谢ABAP高级架构师Rich Guidotti、Thomas Kollig,感谢IT总监Sandy Schlesinger、Marcy Arthur、Lina Cano-Ackerman、Michael Wang、Joanna Dai,感谢独立顾问Jim Marter、陶氏化学(中国)公司的Sam Chen、Becker Chen、David Chen、Jeff Zhu、Cecily Zhang、Tony Dong、Michele Peng、Justin Hu、Glen Zhou高级经理,感谢PP组的同事Eric Xu、Mindy Xu、Flora He、Vicky Zhang、Benjamin Hu、Abi Qiu、Yin Tianshu经理等,以及所有提供过帮助的同事。
感谢曾经一起奋斗过的老同事—SAP公司的Albert Cai经理、特斯拉汽车的胡睿高级经理、埃森哲(美国)公司的首席架构师Kevin Richman、架构师Zhao Shaomei、Avanade(中国)的Mike Zhou经理、上海赢量金融的合伙人刘卫星先生。
特别感谢我的夫人尹娟和儿子郝芳墨小朋友对我的支持与鼓励。