您的位置:首页 > 其它

ABAP基础知识学习(一)

2010-08-19 09:34 120 查看
宏定义(macro
DEFINE~END-OF-DEFINITION
相同命令体2次以上执行的时候,可以使用宏定义来实现。
宏定义必须在宏调用之前,宏定义中最多可使用9个占位符(相当于变量名),&1~&9。
宏定义在程序执行时不能使用断点调试,因此,应尽量使宏定义简单明了,或是尽可能的用函数等替代。

DATA: result TYPE i,
n1 TYPE i VALUE 5,
n2 TYPE i VALUE 6.

DEFINE operation.
result = &1 &2 &3.
output &1 &2 &3 result.
END-OF-DEFINITION.

DEFINE output.
write: / 'The result of &1 &2 &3 is', &4.
END-OF-DEFINITION.

operation 4 + 3.
operation 2 ** 7.
operation n2 - n1.

函数调用
Ø 内部函数调用
PERFORM 函数名
Ø 外部函数调用
PERFORM 函数名(Program名) IF FOUND.
Ø 根据函数变量名调用
PERFORM (函数变量名) IN PROGRAM (Program名) IF FOUND.
Ø 函数连续调用
PERFORM (INDEX) OF 函数名1 函数名2….

例外处理
Ø 61版本之前
CATCH SYSTEM-EXCEPTIONS [exc1 = n1 exc2 = n2 ...]
[OTHERS = n_others].
[statement_block]
ENDCATCH.
IF SY-SUBRC = n1.
ENDIF.

例外发生时,[statement_block]中的执行会被强制终了,但CATCH ENDCATCH之
后命令还将被执行。捕捉到的例外按次序与[exc1 = n1 exc2 = n2 ...]中的例外
类型进行比较,若匹配成功,将数值n1,n2…赋值给sy-subrc.若匹配不成功,则程序
被强制终了,因此以防万一,一般在例外LIST中加入[OTHERS = n_others]。

Ø 61版本之后
TRY.
[try_block]
[CATCH cx_class1 cx_class2 ... [INTO oref].
[catch_block]]
...
[CLEANUP [INTO oref].
[cleanup_block]]
ENDTRY.

TRY CATCH的命令与JAVA中的非常相似,这里不再多做解释。
重点介绍一下关键字CLEANUP。
首先,CLEARUP是在什么时候被执行的?
CLEARUP是在所在的TRY CATCH发生例外,但在本TRY CATCH中无法捕获,传递给
上层TRY CATCH前被执行的。
在CLEARUP中到底做什么工作?
一般用来memroy释放等
从上面两点可能会联想到CLEARUP是否就是JAVA中的final。Final是TRY CATCH
中异常发生与否都会被执行的,而CLEARUP只有在发生异常时执行的。所以光从这点就
可以判定CLEARUP与FINAL不是同一个东西了。

例:
parameters NUMBER type I.
data RESULT type P decimals 2.
data OREF type ref to CX_ROOT.
data TEXT type STRING.

start-of-selection.

write: / 'Testing divison and Sqare root with', NUMBER.
uline.
try.
if ABS( NUMBER ) > 100.
raise exception type CX_DEMO_ABS_TOO_LARGE.
endif.
try.
RESULT = 1 / NUMBER.
write: / 'Result of division:', RESULT.
RESULT = SQRT( NUMBER ).
write: / 'Result of square root:', RESULT.
catch CX_SY_ZERODIVIDE into OREF.
TEXT = OREF->GET_TEXT( ).
cleanup.
clear RESULT.
endtry.
catch CX_SY_ARITHMETIC_ERROR into OREF.
TEXT = OREF->GET_TEXT( ).
catch CX_ROOT into OREF.
TEXT = OREF->GET_TEXT( ).
endtry.
if not TEXT is initial.
write / TEXT.
endif.
write: / 'Final result:', RESULT.

例外的发生有两种情况:
。运行时例外,不能事前预测。如上例中的CX_SY_ZERODIVIDE等。
。用户自定义例外,可事前预测。如使用raise exception。
raise exception在这里有点像是JAVA中的THROWS。当raise exception抛出异常时,
当前TRY CATCH代码块中,raise exception之后的命令将被强制终了,并且若异常被捕
捉的情况下,进行异常处理,若是不能被捕获,则交给上一层的TRY CATCH进行处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: