SAP ABAP面向对象程序设计:原则、模式及实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-17 05:27:51

点击下载

作者:郝冠华

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

SAP ABAP面向对象程序设计:原则、模式及实践

SAP ABAP面向对象程序设计:原则、模式及实践试读:

前言

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/4HANA。

ABAP(Advanced Business Application Programming,高级业务应用编程)语言是由SAP公司开发的一种高级程序语言,用于SAP软件系统(如SAP ECC系统、SAP S/4HANA等)的商务应用开发,在SAP系统的企业级应用与开发中有着广泛和重要的应用。

SAP公司在1983年推出面向过程的ABAP,1999年发布了面向对象的ABAP,2003年发布了用于Web UI开发的Web Dynpro for ABAP,2015年推出了支持S/4HANA内存计算新特性的ABAP for HANA。目前,SAP的云平台SAP Cloud Platform也全面支持ABAP语言。

随着SAP平台的升级,面向对象的内容也越来越多地出现在SAP ABAP的架构之内,尤其是S/4HANA和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/4HANA Cloud)转移了,ABAP还需要学习吗?本书的出版就证明ABAP还有学习的必要。主要原因是:

1)作为SAP ECC等SAP核心系统的编程语言(也就是说,SAP ECC是用ABAP开发出来的),ABAP具有深厚的历史背景,其开发成本之大也是不可考量的。无论基于技术原因还是商业战略,SAP都不可能放弃ABAP语言而转用更为通用的语言作为核心系统的语言。

2)ABAP在后台业务和商业逻辑开发中是重点,即便数据库平台升级为HANA、应用平台移到云端,或者前端开始部分使用更为轻量的SAP Fiori,在SAP ECC或者S/4HANA平台上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/4HANA就是以HANA为平台的。

SAP Fiori是一套全新的用户界面交互系统标准,提供简洁化、平面化、用户可定制的个性化的终端。SAP新发布的SAP第四代ERP产品SAP S/4HANA所推荐的前端用户交互系统就是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 EHP7for SAP ERP 6.0

·SAP Basis Component SAP_BASIS 740

·SAP_ABA 740

·数据库为MS SQL Server 2008R2

2)ABAP for HANA部分(代码中会标注为HANA 1610):

·SAP S/4HANA 1610

·SAP Basis Component SAP_BASIS 751

·SAP_ABA 75B

·数据库为SAP HANA Database

·SAP HANA Studio环境:

·Eclipse Neon 3Release(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/4HANA平台上开发的读者。

本书在编写过程中参考了大量资料,包括SAP官方资源、图书及网络资源等,为了遵守相关的保密原则和职业道德,笔者对客户、任职公司的商业秘密和数据未作任何披露,本书仅采用了笔者在多年的实际工作中遇到的真实业务场景和设计方法,来介绍程序设计的一些经验。

由于作者水平有限,就本书中的不足之处和错误,敬请联系作者邮箱:haoguanhua@hotmail.com,欢迎指正。致谢

感谢家人的支持与鼓励,感谢在工作和学习中各位老师、同事和同学的帮助。感谢我的导师——复旦大学的杨卫东博士,感谢复旦大学的龚益鸣教授。感谢东北大学的郑秉霖教授、郜绍辉老师、周黎明博士、俞胜平博士、崔恒吉老师。感谢辽宁石油化工大学的刘金义博士、李春阳老师,感谢中国石油大学的宫敬教授、于达教授。

感谢在工作和学习中给予笔者帮助和支持的埃森哲(中国)公司的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经理、上海赢量金融的合伙人刘卫星先生。

特别感谢我的夫人尹娟和儿子郝芳墨小朋友对我的支持与鼓励。第一篇ABAP语言程序设计基础·第1章 ABAP语言概述·第2章 ABAP语言关键知识点第1章 ABAP语言概述1.1 ABAP的特点

ABAP(Advanced Business Application Programming)是由SAP公司发布的一种事件驱动的编程语言。传统ABAP语言最早出现于1983年,是借鉴了COBOL语言和SQL设计的第四代开发语言(4GL Fourth-Generation Language)。ABAP也可称为ABAP/4,即代表“第四代语言”(4GL)。

1999年,面向对象的ABAP(Object Oriented ABAP)随着SAP R/3Release 4.6一同发布了。在设计上,面向对象的ABAP支持传统ABAP语言,并参考了C++和Java的设计,具有更先进的设计理念和更合理的功能实现,是一种既有传承又有发展的“90后”语言。

如图1-1所示,该图表明了程序语言的派生和借鉴关系(数据来自于维基百科)。

ABAP从开始的由COBOL和SQL发展起来的面向过程的ABAP(1983年)发展到面向对象的ABAP(1999年),再发展到用于Web UI开发的Web Dynpro for ABAP(2003年),再到目前支持S/4HANA内存计算新特性的ABAP for HANA(2015年),ABAP一直都在不停地发展。

ABAP语言是一种静态语言,或者称为静态检测(statically check)语言,ABAP的数据类型是在编译期进行检查的,即变量必须要声明类型,这样在编译期即可进行类型检查,能够避免变量类型错误。

ABAP也是一种强类型(strongly typed)的语言,具有以下特点:ABAP不会发生“不可被捕获的错误”(untrapped error),这种类型的程序错误不会马上出错,但程序会返回不可预知的结果。

当内表访问越界时,如读取长度为5的内表的第10行“READ TABLE lt_qmel INTO ls_qmel INDEX 10.”,ABAP将取不到对应的值,返回值为空,而不是返回一个任意值;并且还会返回系统状态“sy-subrc=4”,而不会引起程序崩溃退出(Short Dump)。图1-1 SAP面向对象ABAP的发展历史

可能会发生一些“可被捕获的错误”,需要程序员来避免,如运行时除以变量0、存取非法内存地址(如取得长度为10的字符串的第11位的值)等,这些错误如不采用Catch来捕获将会造成程序崩溃退出。

如示例程序1.1,该程序可以捕获这些异常,如果不采用Try Catch进行异常管理,则会引起程序崩溃。

示例程序 1.1REPORT zrep_error_check_01.DATA: gv_result TYPE p LENGTH 8 DECIMALS 2, gv_exref TYPE REF TO cx_root, gv_msgtxt TYPE string.DATA: gv_cuotient TYPE i, gv_dividend TYPE i VALUE 19, gv_divisor TYPE i VALUE 0, gv_s_numbr TYPE string VALUE '1234567890', gv_position_11 TYPE i VALUE 11.TRY. gv_result = gv_dividend / gv_divisor. " no short dump here. catch it. CATCH cx_root INTO gv_exref. gv_msgtxt = gv_exref->get_text( ). WRITE: / gv_msgtxt. CLEANUP.ENDTRY.TRY. gv_s_numbr = gv_s_numbr(gv_position_11). " no short dump here. catch it. CATCH cx_root INTO gv_exref. gv_msgtxt = gv_exref->get_text( ). WRITE: / gv_msgtxt. CLEANUP.ENDTRY.

如图1-2所示,代码可以捕获这些异常,而不会引起程序崩溃。图1-2 代码输出1.2 ABAP开发基础

在传统的ABAP开发中,最为常见的工作有以下几类:

·报表开发,如ALV、LIST开发等。

·屏幕开发,如Dynpro开发等。

·单据打印,如SmartForms、Form、Adobe Form开发等。

·数据上载,如CATT、BDC开发等。

·数据接口,如IDOC、Proxy开发等。

·增强的应用,主要是对SAP标准流程进行一定的修改和定制化开发,比如User Exit、BAdI等。

·SAP Workflow(工作流)开发,定义特定的客户业务流程。

在S/4HANA平台上,还有其他开发业务,如HANA SQL Script存储过程的开发、SAP Gateway OData的配置开发、CDS View的开发等。

ABAP程序是依赖于SAP系统存在的,并没有单独的集成开发环境(HANA的开发平台ABAP Development Tools(ADT)for SAP ABAP on HANA是基于Eclipse的独立开发环境,但也需要连接到SAP应用服务器进行开发)。

SAP ABAP程序都存储在SAP的数据库中。不像Java或者C++程序那样可以单独地保存在一个文件中。

我们可以通过ABAP工作台(Workbench)编辑环境来查看和编辑源代码,在HANA平台上,还可以使用HANA Eclipse ADT来进行代码开发。

经过解释和编译后,ABAP程序在ABAP运行时系统的控制下运行在SAP的应用服务器里。

应用服务器的运行时系统负责处理ABAP语句,控制逻辑序列、数据库访问和响应事件。1.2.1 ABAP SAP GUI开发环境

ABAP工作台是ABAP系统的一部分,是基于SAP GUI界面的开发环境,在ECC和S/4HANA中,有以下事务码可供ABAP开发。

·SE38:开发报表(Reports)、功能池(Module pools)、子程序池(Includes and subrou-tine pools)。

·SE11:SAP数据字典(ABAP Dictionary)。

·SE37:开发Function modules。

·SE41:开发菜单(Menu)、任务条(Toolbar)。

·SE51:开发窗体。

·SE24:开发类与接口。

·SE80:对象浏览器(Object Navigator),集合了以上所有工具的开发环境。

ABAP Development Tools(ADT)for SAP HANA是S/4HANA的ABAP开发环境,除了支持ABAP开发之外,ADT开发环境还可以开发HANA SQL Script、CDS View等,是新一代的集成开发环境,如表1-1所示。表1-1 SAP ABAP开发工具列表1.2.2 ABAP开发环境的设置

如图1-3所示,SAP GUI ABAP工作台(事务码SE80)可以在“Utilities”→“Settings”中设定编辑环境。

如图1-4所示,设定编辑器的样式:SAP关键字大写。

如图1-5所示,点击SE80ABAP编辑器的右下角的“Options”按钮,即可对编辑器的格式进行改动。

对于S/4HANA的ABAP开发环境,ABAP Development Tools(ADT)for SAP HANA是基于Eclipse的。我们可以根据SAP的平台不同,使用SAP GUI和ADT为SAP开发ABAP代码。

如图1-6所示,首先需要在Eclipse官网上下载最新版本的Eclipse,如目前的版本Neno,然后点击菜单“Help”→“Install New Software”。图1-3 SAP GUI ABAP工作台(SE80)图1-4 设定SAP ABAP编辑器样式(SE80)图1-5 改动编辑器的格式(SE80)图1-6 通过帮助菜单安装最新版Eclipse SAP HANA开发环境

如图1-7所示,输入网址“http://tools.hana.ondemand.com/neon”,从SAP HANA官方网址上下载ABAP和HANA的开发插件。图1-7 下载并安装SAP ABAP ADT的开发环境

点击“Next”,然后接受软件条款,即可安装SAP ABAP开发环境和HANA开发环境。1.2.3 ABAP的语法结构

ABAP程序由ABAP语句组成。

每条ABAP语句均以关键字开头,以实心句号(.)结束,示例代码如下:REPORT zrep_cls_27.DATA gs_t001 TYPE t001.DATA gt_t001 TYPE STANDARD TABLE OF t001.PARAMETERS p_bukrs TYPE t001-bukrs.

ABAP的格式不是语法检查的一部分,缩进和排列没有严格要求,SE80中可以使用“Pretty Printer”(快捷键Shift+F1)来进行格式排版。

ABAP一行中可以编写多条语句,也可以一条语句跨几行。语句中的关键字和变量等必须用空格分开,示例代码如下:gv_text_buffer = 'ABC'.gv_count = 1.gv_price = '100.10'.*上面的语句和下面的语句作用相同gv_text_buffer = 'ABC'. gv_count = 1.gv_price= '100.10'. " This is test line

ABAP可以在程序行中插入注解,如果整行都是注解,那么要在行的开始处以星号(*)作为开始。

如果将一行的某一部分设定为注解,则用双引号开头("),示例代码如下:*上面的语句和下面的语句作用相同gv_text_buffer = 'ABC'. gv_count = 1. " This is test line

ABAP中还可以对格式相同的语句进行链接,在链接语句中,相同的地方只写一次,其他不同的地方则以冒号(:)开始,之间以逗号(,)来链接,示例代码如下:DATA lv_sum TYPE i VALUE 0.* 普通顺序语句lv_sum = lv_sum + 1.lv_sum = lv_sum + 2.lv_sum = lv_sum + 3.WRITE:/ lv_sum.lv_sum = 0.* 链接语句,结果与上几行的连续加法意义相同lv_sum = lv_sum + : 1, 2, 3.WRITE:/ lv_sum.1.2.4 ABAP的语法帮助

在SAP的编辑器SE80、SE38等环境中,选中SAP的关键字点击F1按钮,SAP会自动搜索并弹出ABAP帮助文档(如图1-8所示),其中的语法描述是类似于编译原理中的巴科斯范式(Backus-Naur Form,BNF)的语法表达式,但所采用的符号并不相同,ABAP帮助文档所采用的符号具体如下。

·{}内是必选的内容。

·[]中是可选的内容。

·|是其左右的表达二选一。

·( )不是表达式,而是内容的一个部分,如长度表达式,动态变量也要用括弧括起来。

·<>也不是表达式,是内容的一个部分,如字段符号Field-Symbol。图1-8 显示SAP ABAP语法帮助

如定义DATA关键词的语法表述如下:DATA { {var[(len)] TYPE abap_type [DECIMALS dec]} | {var [TYPE abap_type [LENGTH len] [DECIMALS dec]]} } [VALUE val|{IS INITIAL}] [READ-ONLY].

相对应地,ABAP中DATA关键词语法的实际表达方式如下:"定义类型为p的长度为8,小数部分的长度为2DATA lv_price TYPE p LENGTH 8 DECIMALS 2 VALUE '1.99'."定义类型为c、长度为10的字符串变量,默认值为‘Text’DATA lv_text_buffer(10) TYPE c VALUE 'Text'."定义类型为i的变量,默认值为1DATA lv_count TYPE i VALUE 1."定义类型为i的变量,默认值为空DATA lv_price_i TYPE p VALUE IS INITIAL.1.3 ABAP的数据类型

在程序设计语言中,数据类型(data type)是一种用来约束数据的解释,数据类型描述了数值的表示方法、解释方法和结构,并且程序还为不同的数据类型配备有相应的算法操作。

如表1-2所示,ABAP按类型的定义方式来分,可以分为三大类。表1-2 SAP ABAP数据类型列表1.3.1 预定义数据类型

ABAP的预定义数据类型即SAP ABAP语言在系统中已经预定义的数据类型,这些数据类型在所有类型的ABAP程序中都是可见的,我们可以采用预定义数据类型来定义数据类型变量和对象变量,或者用于定义方法参数。

大部分ABAP预定义的基本数据类型具有固定的长度,在编译时,这些具有固定长度的预定义的基本数据类型在确定了长度后,在程序运行时它们的长度就固定了下来,如果要改变这些类型的最大长度,只能重新修改代码声明,如表1-3所示的是这些预定义的固定长度数据类型。表1-3 ABAP预定义的固定长度数据类型

如表1-4所示的是ABAP预定义的可变长度的数据类型。表1-4 ABAP预定义的可变长度的数据类型

如表1-5所示的是ABAP所有类的基类。表1-5 ABAP所有类的基类

数据类型使用ABAP的关键字TYPE来指定,如定义一个变量类型(长度为30的C类型),可以用如下语句指定:DATA gv_name(30) TYPE c.DATA: gv_total_counter TYPE i, gv_actual_number TYPE f, gv_flag TYPE c, gv_start_date TYPE d, gv_start_time TYPE t.1.3.2 全局数据类型(数据字典类型)

SAP ABAP数据字典(ABAP Dictionary)是SAP定义和管理数据的主要工具,是ABAP Workbench的重要组成部分。

通过数据字典可以定义系统中的各类数据对象,包括数据类型、数据结构、数据库表、视图等。

全局数据类型也是所有程序都可以使用的数据类型。全局数据类型是参照ABAP的数据字典(也就是采用事务码SE11)创建管理的数据结构。

这些类型中,一部分是在系统中预定义的(可以通过SE11来查看),一部分是用户通过SE11事务码自己定义的,但是它们都是所有程序全局可见的。

SAP系统提供了如下T-Code维护的ABAP数据字典。

·SE80——Repository Browser

·SE15——Repository Information System

·SE16/SE16N——Data Browser

·SE11——ABAP Dictionary

·SE13——Dictionary technical settings

·SM30——Maintain Table Views

·SM31——Table Maintenance

如图1-9所示,我们用事务码SE11来查看数据字典中预定义的数据表MARA。图1-9 查看数据字典预定义的数据表(SE11)

如图1-10所示的是MARA表结构的定义,这些预定义的表的列(Field)都可以全局使用,如物料号码MATNR。图1-10 MARA表结构的定义(SE11)

全局数据类型也是由ABAP的关键字TYPE来指定的,如定义几个变量类型为系统预定义的表的列名,可以用如下语句来定义:DATA: gv_material_id TYPE mara-matnr, gv_created_date TYPE mara-ersda, gv_inspection_type TYPE qals-art, gv_unit_of_measure TYPE meins.1.3.3 局部数据类型(用户自定义类型)

局部数据类型是在程序内部定义的数据类型,是用户基于全局数据类型或者预定义类型再定义的新的类型,这些类型只能在用户创建的程序内部可见,其他程序是不能访问到它们的。

采用TYPES关键字定义用户自己的类型,以下语句就定义了一种长度限制为10的字符串类型ty_var_c10,然后我们可以采用这个类型来定义自己的变量,示例代码如下:TYPES ty_var_c10 TYPE c LENGTH 10. " Local new type t_var_c10DATA gv_str TYPE ty_var_c10.gv_str = 'Hello ABAP OOP'. " only get first 10 characters.WRITE / gv_str.

如图1-11所示,语句只能对前十位进行赋值。图1-11 测试Debug界面

DATA、TYPES和TYPE的区别

DATA用来直接声明实际的变量,可以指定变量类型是预定义类型或者自定义类型。

TYPES用来自定义某种类型,定义的是类型而不是变量,需要再使用DATA语句来实例化变量。

TYPE用来指定类型的,当TYPE和DATA关键字一起使用时,则是用于定义变量的类型。当TYPE和TYPES关键字一起使用时,则是用于定义自定义类型。1.3.4 按结构区分的数据类型

上文介绍过,如果把ABAP按类型的定义方式来区分,可以分为三大类:预定义数据类型、全局数据类型、局部数据类型。

而如果按另一种分类方法,即把ABAP按类型的结构来区分,则可以分为:基本数据类型、参考数据类型、复杂数据类型、类类型、接口类型等。

如表1-6所示,如果划分为数据类型和对象类型两大类,那么其中的数据类型包括基本数据类型、参考数据类型和复杂数据类型。表1-6 ABAP数据类型分类

如图1-12所示的是ABAP数据类型的分类。图1-12 ABAP数据类型分类1.4 ABAP变量命名规则

变量(variable)是指在计算机程序中表示能够包含已知或未知的数据的一个符号别名,程序可以通过变量名访问变量。

变量的命名是要遵循一定规则的,如果程序变量命名非常随意的话,会造成程序的可读性很差,从而增加了维护和更新的难度。

变量命名和注释一样的重要,如果不按照一定的规则来命名,不仅代码的可读性差,并且还会因为作用域的问题而造成莫名的逻辑错误。

下面推荐一种命名规则(naming convention),供大家参考。

对于ABAP的命名规则有很多,但基本的要求是能够让人清晰地分辨类型、意义和作用域,一般来说命名规则有如下约定:

1)使用英语术语作为变量的基本组成单位,而不是其他语言。

2)可以采用多个词汇复合的名称,用下划线(_)对命名进行分隔,如cl_company_code、get_inspection_result,而不是cl_companycode和getinspectionresult或者get-inspec-tion_result,长度不能超过SAP规定的30位。

3)代码格式可以考虑SAP的关键字大写,而其他变量和参数一律小写(可以通过设定编辑器属性来实现,以便于阅读)。

4)命名可以体现出作用域、变量类型、数据类型和变量含义,如“gvd_inspection_date”,其中的gvd,g表示Global,是指全局变量、v表示Variable,是指一般变量类型、d表示Date,是指数据类型为日期类型;inspection_date表示变量的含义是测试日期,命名中“d”是可选的,因为很多时候变量的含义已经代表了数据的类型,该变量也可以定义为“gv_inspection_date”。

5)对于SAP数据表的表列名或数据类型名,可以采用英文术语,而不是表的列名,比如局部变量“工厂号码”,可以使用lv_plant,而不是lv_werks;类属性“公司代码”采用mv_company_code而不是mv_bukrs。

SAP表的列名源于德语的缩写(如刚才的werks和bukrs在德语中代表工厂和公司代码)。如果程序统一要求全部使用表列名,则也符合一贯制(如命名为lv_werks),但实际上除了工厂(werks)、公司代码(bukrs)、物料号码(matnr)等常用的一些列名,大多数的列名都是我们不熟悉的。并且鉴于德语的使用没有英语普遍(SAP系统源代码中的德语注释也常常被开发者抱怨),为了便于维护,一般还是建议采用英语作为变量,指向的数据类型则可以是列名,而不用再定义自己的变量类型(如“DATA gv_plant TYPE t001w-werks.”)。

6)如果是内表变量,并且指向的是具体的数据表,则可以考虑使用现有的数据表名(德语的缩写),比如使用全局内表名gt_ekpo(ekpo代表purchasing document item)或者采用局部内表名lt_mara(mara代表general material data),如果内表的列只是引用了SAP数据表的一部分或者内表定义的列来自于多个SAP的数据库表,我们可以用该内表变量定义的目的来命名该内表,如使用英语描述gt_stock_material_status(库存物料的状态)。

7)对于方法,应采用简明的命名规则,用于阐述作用或动作,而不是实现的细节,如采用print_order_detail(打印订单细节),而不是采用get_order_detail_and_print_to_spool(获得订单的详细数据并且打印到输出缓存)。1.4.1 全局变量的命名规则

如表1-7所示的是定义一种全局变量的命名规则,全局变量是在所有作用域中都可访问的变量,与之对应的是局部变量。表1-7 ABAP全局变量的命名规则1.4.2 局部变量的命名规则

如表1-8所示,我们可以定义一种局部变量的命名规则,局部变量是拥有局部作用域的变量,这样的变量只能在声明它的方法或块中访问。表1-8 ABAP局部变量的命名规则1.4.3 面向对象变量的命名规则

面向对象ABAP可以参考以下命名规则(我们在这里一并说明面向对象ABAP的命名规则,对于尚未说明的面向对象的一些名词的意义,可以在看完第二篇后再阅读)。

如表1-9所示是面向对象ABAP的命名规则的第1部分。表1-9 面向对象ABAP的命名规则第1部分

如表1-10所示是面向对象ABAP的命名规则的第2部分。表1-10 面向对象ABAP的命名规则第2部分

如表1-11所示是面向对象ABAP的命名规则的第3部分。表1-11 面向对象ABAP的命名规则第3部分

如表1-12所示的是面向对象ABAP的命名规则的第4部分。表1-12 面向对象ABAP的命名规则第4部分

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载