ABAP基础(一)
现在工作了,可是工作所用的开发语言已经不再是我熟悉的JAVA了,现在使用ABAP语言开以,ABAP基础是我在工作时学习的一些基础知识,愿与大家分享一下,
ABAP(Advanced business application program),是一种高级企业应用编程语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。它适合生成报表,支持对数据库的操作,如:SQLserver,Oracle,DB2等主流数据库系统。
SAP三层体系结构
表现层(Presentation Layer):这是SAP用户和R/3系统交流的接口,用户在这一层对SAP系统进行操作。这层将用户的命令或者操作传送给R/3系统,然后系统进行相应的处理后把数据返还给用户。
应用层(Application layer):这层包括一个或者多个应用服务器和一个消息服务器。每一个应用服务器包括一系列服务以便运行应用程序。所有的服务分置在这些应用服务器之中,其实用户需要的只是其中的一个应用服务器,多个服务器之间传递信息以决定用户到底需要的是哪个服务器的服务。
数据库层(Database layer):这里就是SAP系统的核心,存放了所有SAP系统的数据。
ABAP基本语法特点
由各自独立的语句构成。
每个语句的第一个单词必须是ABAP关键字。
单词之间至少要用一个空格分隔。
每个语句结束必须要用句号。
一个语句可以跨多行,只要不遇到句号,就认为是一个延续 的语句。可以把多个语句放在一行。
ABAP不区分大小写,关键字和用户操作数都一样,为了便于阅读,一般把关键字大写,而操作数小写。
如果连续多行的第一个关键字相同,可以使用链语句 链语句的方式 减少输入
注释:
注释行由第一列的星号(*)开头,并且必须写在第一 列,前面不能有空格。
编译器忽略注释行,不会执行。
在行末的注释用双引号(”)作为前导。
ABAP语言的基本元素
数据类型
D :日期类型,格式为YYYYMMDD,长度为8
T :时间类型,格式为HHMMSS,长度为6
I :整数类型,长度为4
F :浮点类型,长度为8
STRING:变长字符串类型
XSTRING:变长字节序列类型
C :字符串类型,定义变量时指定字符个数
N :数字字符串类型,定义变量时指定数值字符个数
X :字节序列类型,定义变量时指定字节数
P :组合数值类型,定义变量时指定长度和小数点后位数
ABAP基础(二)
ABAP运算
• 数值运算(在ABAP中数学表达式可以任意多层嵌套)
1. 算术运算
2. 数学函数
3. 时间日期运算
• 逻辑表达式
a) 通用逻辑运算符
EQ( = ) NE( <> ) LT( < ) LE( <= ) GT( > ) GE( >= )
b) IS操作符
IS INITIAL 检查字段是否为初始值
IS ASSIGNED 检查字段是否被分配
c) BETWEEN操作符
d) 组合逻辑表达式
AND 与 OR 或 NOT 非
ABAP程序的关健字
关健字是语句的第一个词,它决定整个语句的意义,有四种不同类型的关健字
1.说明性关健字
TYPES,DATA,TABLES,这些关健字说明定义数据类型或者说明程序可以访问的数据对象
2.事件关健字
AT SELECTION SCREEN,
START-OF-SELECTION
AT USER-COMMAND
这些关健字在ABAP中定义处理块,处理块是当特定事件发生时进行处理的语句组
3.控制关健字
IF ,WHILE,CASE
4.操作关健字
WRITE,MOVE,ADD
用于处理数据
语法格式
定义数据对象
– DATA name TYPE type_name
例: DATA number TYPE I.
定义了一个对象number其类型为I
DATA num TYPE I value 18.
定义了一个对象num其类型为I初始值为18.
TYPES: address TYPE C.
注:TYPES语句用来创建用户定义的基本数据类型和结构化的数据类型,通过TYPE定义的类型不能直接使用,需要通过DATA进行定义其对应的变量后才可使用
如: DATA:address1 TYPE address
语句链
如果连续多行的第一个关键字相同,可以使用链语句 ,链语句的方式 减少输入
WRITE text1.
WRITE text2.
WRITE text3.
可以写成:WRITE: text1,text2,text3.
ABAP基础(三)
分支结构(IF,CASE)
使用IF的条件分支
IF .
ELSEIF .
ELSEIF .
.....
ELSE.
ENDIF.
l 例子:
l DATA flag TYPE c VALUE ‘a'.
l IF flag = ‘a‘.
l WRITE / ‘true‘.
l ELSE.
l WRITE / ‘error'.
l ENDIF.
l 产生如下输 出:
true
使用CASE的条件分支
基本语法:
CASE .
WHEN .
WHEN .
WHEN .
WHEN ...
......
WHEN OTHERS.
ENDCASE.
l 例子:
l DATA: TEXT1 VALUE 'X',
TEXT2 VALUE 'Y',
TEXT3 VALUE 'Z',
STRING VALUE 'A'.
l CASE STRING.
WHEN TEXT1.
WRITE: / 'String is', TEXT1.
WHEN TEXT2.
WRITE: / 'String is', TEXT2.
WHEN TEXT3.
WRITE: / 'String is', TEXT3.
WHEN OTHERS.
WRITE: / 'String is not', TEXT1, TEXT2, TEXT3.
ENDCASE.
l 产生如下输出: String is not X Y Z
l 这里,执行WHEN OTHERS后面的语句块,因为 STRING 的内容“A” 不等于“X” 、“Y”或 “Z”,
循环结构(DO,WHILE)
使用DO的无条件循环
DO
[TIMES]
[VARYING FROM NEXT ].
ENDDO.
• TIMES 循环次数,
• VARYING选项在每次循环中给变量重新赋值
• 可以是文字或变量。如果是0或负数,系统不执行该循环
• 使用 DO 语句时要避免死循环。 如果不使用 TIMES 选项,则在语句块中至少应包含一个 EXIT、 STOP 或 REJECT 语句,以便系统能够退出循环。
• 例子:
• DO.
• WRITE SY-INDEX.
• IF SY-INDEX = 3.
EXIT.
ENDIF.
• ENDDO.
• 产生如下输出:
• 1 2 3
• 这里,处理 3 次循环,然后在 EXIT 语句后退出循环。
• SY-INDEX代表循环次数
使用WHILE的条件循环
语法:
– WHILE [VARY FROM NEXT ].
ENDWHILE.
• 循环终止(CONTINUE,CHECK,EXIT)
无条件终止循环:CONTINUE
DO 4 TIMES.
IF SY-INDEX = 2.
CONTINUE.
ENDIF.
WRITE SY-INDEX.
ENDDO.
输出结果:
1 3 4
• 有条件终止循环:CHECK
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/99072/viewspace-531650/,如需转载,请注明出处,否则将追究法律责任。