ABAP语言基础

    ABAP是一种高级企业应用编程语言(Advanced Business Application Programming),由SAP公司于20世纪80年代开发。经过不断的发展,现在的主流版本为ABAP/4,SAP R/3的应用程序就是用ABAP/4编写的。

简介

    SAP最初开发ABAP/4语言仅为内部使用,为应用程序员提供优化的工作环境。为了满足商业领域的需要,已进行了不断的修改和改进。现在,ABAP/4已称为SAP开发自己应用程序的唯一工具。

    SAP客户用ABAP/4进行其自身开发。这样的开发对R/3标准解决方案适应特定问题非常重要。ABAP/4开发工作平台包含所有用于创建和维护ABAP/4程序的工具。

    ABAP/4的可解释特性使其易于生成、测试并运行程序的中间版本,以便将来生成最终版本。此过程也叫做早期原形处理,意味着你不必丢弃中间版本。

    ABAP/4是第四代支持结构化程序设计的语言,也是一种面向过程的语言,支持面向对象,其主要特性如下:

1.合并了所有通常的控制结构和模块化概念。

2.支持封装性和继承性。封装性是面向对象的基础,而继承性则是建立在封装性基础上的重要特性。

3.具有事件驱动的特性。

4.适合生成报表。

5.支持对数据库的操作。

6.带有各种类型和结构的声明数的声明元素。

7.数据制作的操作元素。

8.控制程序流的控制元素。

9.反映外部事件的事件元素。

10.支持多语言。文本摘要(例如,标题、页眉和其他文本)将根据程序代码分别存储,可以随时在不改变程序代码的情况下更改、转换和维护这些文本摘要。

11.支持商业数据类型和操作,可以使用特殊日期和时间字段进行计算,系统会自动执行必须的类型转换。

12.提供一系列功能处理字符串。

13.包含一个叫做OpenSQL的SQL子集。用OpenSQL,可以读取和访问数据库表,与所用的数据库系统无关。

14.允许定义和处理内部表,该表只有在运行程序时存在。内部表使其很容易处理数据库表,与所用的数据库系统无关,

15.允许定义和调用子程序,也可以调用其他程序的子程序。参数能够以各种方式从子程序传递到了子程序。

16.包含一种叫做功能模块的特殊子程序,可以在中央库创建和维护功能模块。在调用程序和子程序之间,功能模块有一个明确定义的数据接口,它们能够以调用程序的独立模式进行分别测试。

17.ABAP/4开发平台主要用来开发标准应用软件,可以使用ABAP建立应用软件,然后就可以使用该软件来处理SAP R/3系统的数据库表和处理其他数据库表,具有相当大的灵活性。可以联机创建ABAP/4程序,可以联机运行程序,并在后台不需要任何修改地运行程序。当使用联机编程技术来写ABAP/4程序时,可以创建模块池,这些模块在屏幕处理期间由屏幕处理程序来调用。另外,使用批输入可以自动地把受保护的数据传送给SAP系统,ABAP/4包含符合CPI-C标准的通信程序的编程语句。

    ABAP/4程序由三个部分组成,每一个ABAP/4程序必须以PROGRAM 或者 REPORT 语句打头。一般建议如下,REPORT语句用于ABAP/4报表,PROGRAM语句用于对话程序,全局数据声明必须包含在程序起始部分的数据声明部分中,语句部分可以包含不同的处理部分以完成不同的处理功能。

ABAP/4数据声明语法

1.数据类型及其属性

    ABAP/4数据类型主要有:

1. P(Packed number,标准长度为8字节,允许长度为1-16字节,以下类似)。

2. I(Integer,标准长度与机器有关,1-16字节)。

3. F(Floating point no. ,标准长度与机器有关,1-16字节)。

4. N(Numberic Text,1字节,1-max字节)。

5. C(Contents Text,1字节,1-max字节)。

6. D(Date YYYYMMDD,8字节)。

7. T(Time HHMMSS,6字节)。

8. X(Hexadecimal, 1字节,1-max字节)。

其中max为近似64000字节;在P类型字段中,一个字节存储两位数字,符号位存储在最后半个字节中,类型I定义为二进制数,取值范围为从-21477483648至-21477483647;一般来说,类型I用于计数器,类型P用于商业计算,类型F用于数学计算,ABAP/4的数据域不得超过64000字节。

2.常量的定义

    ABAP/4能够识别的常量有数字常量和文本常量两种,数字常量主要有数据类型P和I两种,文本常量主要有数据类型C与N,而其余的数据类型由于没有规定常量,而一律使用文本常量。

    注意:如果要把一个带有小数点的字段赋值给字段类型P,那么必须首先把它定义为文本串(如"2.17")。

3.数据的声明

    在这里所说的数据(或者称为字段)相当于变量,数据的名称与变量的名称一样也有其命名规则。一般数据名称总是以字母作为首字符,余下的字符可以为字母也可以为数字,但除了可以使用下划线外,不得使用任何其他特殊字符,并且长度不得超过30字节。另外,需要注意的时SPACE是预定义的字段,在ABAP/4语句中,参数名(即关键字的名字)不可以用作字段名;在声明数据类型时,如果没有指定类型,就默认使用类型C;如果没有规定长度,那么就是用该类型的默认长度,在声明字段时,你也可以使用赋予字段相应的初始值(使用参数VALUE),当然在VALUE后面,仅可以指定常量。在声明同一类型的字段时,可以使用LIKE参数,被参照的字段既可以是内部字段,也可以是数据库中的字段;如果是使用LIKE参数来书写程序,那么该程序是很容易修改的,这是因为如果数据属性发生更改的话,只要在程序的一个地方进行改动,其他使用LIKE参数定义的数据其定义也会自动发生改变;CLEAR语句可以把字段的值设置为与其类型相符的初始值,或者设置为数据字典中定义的初始值,需要注意的是CLEAR语句不会保存以VALUE参数所规定的初始值。在输出特定类型的字段时,如果在输出字段的输出格式中没有指定长度,就默认使用标准输出长度;如果在输出格式中规定的长度超出了必须的长度,那么输出的值根据所规定的输出长度的具体数值或左对齐或右对齐;在类型P或者I的字段值输出时,先导的零被转换为空格,在千位数之间插入逗号;在输出浮点数时,可以使用WRITE语句EXPONENT参数来确定指数值;使用参数DECIMALS,可以在输出类型P、I或者F的字段时确定小数点后的位数,最后一位要进行取舍。

4.赋值

    许多ABAP/4语句可以用来给字段赋值,两个最为重要的语句是MOVE与COMPUTE语句,关键字COMPUTE是可选的,如果字段的类型与长度不匹配所赋的值,那么系统就会自动执行类型转换。另外,可以使用ADD、SUBSTRACT、MULTIPLY与DIVIDE语句进行简单的算术计算。类型转换的规则是,如果类型C的字段值赋给类型P的字段,那么类型C的字段值仅允许+/-以及小数点。如果类型P的字段值赋给类型C的字段,那么就要格式化该数字值并且先导的零被转换为空格,如果不需要这种格式化的类型,那么可以使用UNPACK语句。

5.算术表达式

    一般来说关键字COMPUTE是可选的,且不限制括号内表达式的嵌套层次,运算符与括号被认为是单词,因此,必须把他们用空格隔开;然而,对于函数来说,其括号中间必须跟字段名,如 a= ( B+EXP ( C ) ) X E/SIN ( 3-G ) 是错误的算术表达式,而 a= ( B+EXP ( C ) ) X E/SIN ( 3-G )才是正确的算术表达式。在算术运算之前非数字值需要转换成数字值,运算符DIV 与 MOD是整数除法函数, STRLEN函数是返回字符串的长度。一般算术表达式只能用于COMPUTE语句中。

6.系统字段

    ABAP/4提供了一系列系统字段,编辑器命令SHOW SY允许显示所有这些字段名及其定义的列表清单。可以在程序中通过SY-<字段名>来引用系统字段;另外,还可以通过规定偏移量与长度来存取字段中的特定部分。但只有一些语句(如ASSIGN, WRITE...TO语句等)支持偏移量与长度存取字段的特定部分。

7.计算日期

    如果类型D的字段赋值给类型P的字段,那么就计算类型P字段的值为自1900年以来的天数。相反,如果类型P的字段值赋给类型D字段,那么就计算类型D的字段值为自1900年以来的年份。

8.PARAMETERS语句

    PARAMETERS语句主要用来声明内部字段,与用DATA语句声明的字段相反,可以在调用Report时在选择屏幕上为这些字段指定值,DATA语句的某些参数也可以使用PARAMETERS语句(如TYPE、LIKE、DECIMALS等)。

    尽管DATA允许把初始值赋给带有VALUE的字段,但PARAMETERS语句也允许使用DEFAULT参数来设置默认值。

9.字段符号

    字段符号也是一个非常重要的概念,相当于C语言中的指针。可以使用FIELD-SYM BOLS语句来声明字段符号,在运行时,可以使用ASSIGN语句来把某一个字段赋予字段符号,字段符号可以通过使用TABLES语句来声明字段、字段串以及结构。在这里,尖括号是语法的一部分,通过这种方法,可以清楚区分字段符号与ABAP/4中的普通字段。

    字段符号起到了指针的作用。一般来说不可以使用偏移量与长度来存取字段的特定部分,然而,在ASSIGN语句中,可以使用它们,当然也可以在WRITE...TO语句与实际参数(PERFORM)中使用可变的偏移量与长度。

10.字段的动态分配

    使用ASSIGN语句,可以把一个仅在运行时才能知道的字段赋予字段符号,如果所要分配的字段是R/3对象库中的字段(用TABLES语句声明),那么可以使用TABLE FIELD参数。这将会减少执行语句所需要花费的时间,因为系统更不会查找整个内部表清单。另外,还可以通过检查系统字段SY-SUBRC的值来确认是否有一字段分配给了字段符号。如果括号内有一字段,则SY-SUBRC=0,反之,则为大于0的值。一般来说,动态ASSIGN语句需要花费更多的时间,因此,仅在某些需要的情况下使用。

11.简单的输出语句

    输出语句WRITE是最为常用的语句,因此了解其语法格式及使用是非常有必要的。WRITE语句以对应的数据类型的格式输出字段或者常量的内容,连续的多个WRITE语句可以写在同一个输出行上;当输出行满的时候,从下一行继续开始;SKIP语句产生空行。在输出语句中,也可以规定输出值的输出格式,这允许从一个新行开始以及可以确定起始列与输出长度。格式选项(DD/MM/YYYY)格式化日期字段以符合用户记录中的信息,格式选项UNDER可以立即在已经输出的值下面显示值(左对齐)。一般来说,WRITE语句的语法是:WRITE<format><value><options>,<format>主要有/p(I)、/Line feed、p列的位置以及I输出的长度,<value>主要有字段或者常量,选项主要指格式选项,在书写WRITE语句时,格式规定必须在输出值前面。格式规定的顺序必须如上所述,多个输出值之间以空格隔开,格式选项必须在输出值后面。

    小结:在ABAP/4编程中也会涉及系统所提供的调试功能、使用SELECT语句查询数据、控制结构、数据结构、模块化技术、ABAP/4开发平台、SAP系统中的数据、逻辑数据库、特定报表的选择、只读数据库的存取以及后台处理等许多不同的强大功能,这些功能的组成使开发特定用户的需要称为可能,大大提高了系统二次开发的可能性和系统的灵活性。具体语法请参照相关技术资料,此处不必过多说明。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,296评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 今天又被工作上的一个失误给打击到体无完肤,浑浑噩噩的过了一上午,时间全部交学费了,也丝毫没有缓解我致郁崩盘的情绪。...
    朝凪阅读 121评论 0 0
  • 坚持了8天的跑步,坚持了19天的不吃晚饭,坚持了一个星期的早早起床,就真的坚持不下去了。可是爱你,我却坚持了这么多...
    70dec497ccbb阅读 260评论 0 0
  • ⒌三个人的分析,一个人的推理 她实在不敢想象姐姐的死,也实在想不明白姐姐为什么会死。她在食堂买好饭,都不知道...
    叶凌凡阅读 374评论 0 3