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系统中的数据、逻辑数据库、特定报表的选择、只读数据库的存取以及后台处理等许多不同的强大功能,这些功能的组成使开发特定用户的需要称为可能,大大提高了系统二次开发的可能性和系统的灵活性。具体语法请参照相关技术资料,此处不必过多说明。
网友评论