*&---------------------------------------------------------------------*
*& Report ZTESTABAP0002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztestabap0002.
CLASS c1 DEFINITION.
PUBLIC SECTION.
CLASS-METHODS m1 IMPORTING p1 TYPE i DEFAULT 0
EXPORTING p2 TYPE i.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
METHOD m1.
IF p1 IS SUPPLIED.
DATA: lo_do_value TYPE REF TO data.
DATA: lo_do_value1 TYPE REF TO data.
DATA:lv_is_less TYPE abap_bool.
DATA:l_indicator TYPE i VALUE '1'.
CREATE DATA lo_do_value LIKE p1.
GET REFERENCE OF p1 INTO lo_do_value.
WRITE: lo_do_value->*.
lo_do_value1 = REF #( p1 ).
WRITE lo_do_value1->*.
DATA: lt_empty TYPE STANDARD TABLE OF text200.
IF boolc( lt_empty[] IS INITIAL ) = abap_true.
WRITE:/ 'This table is empty'.
ELSE.
WRITE:/ 'This table is as full as full can be'.
ENDIF.
lv_is_less = boolc( lt_empty[] IS INITIAL ).
WRITE: / lv_is_less.
IF boolc( 1 = 1 ) = abap_false.
WRITE:/ '1 does not equal 2'.
ELSE.
WRITE:/ '1 equals 2, and the world is made of snow'.
ENDIF.
lv_is_less = boolc( 1 = 1 ).
WRITE: / lv_is_less.
DATA(l_day) = SWITCH char10( l_indicator
WHEN 1 THEN 'Monday'(326)
WHEN 2 THEN 'Tuesday'(327)
WHEN 3 THEN 'Wednesday'(328)
WHEN 4 THEN 'Thursday'(329)
WHEN 5 THEN 'Friday'(330)
WHEN 6 THEN 'Saturday'(331)
WHEN 7 THEN 'Sunday'(332)
ELSE
* THROW zcx_day_problem( )
'123'
).
WRITE: / l_day.
ELSE.
ENDIF.
IF p2 IS NOT SUPPLIED.
RETURN.
ELSE.
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
c1=>m1(
EXPORTING
p1 = 1
IMPORTING
p2 = DATA(lv_p2)
).
执行效果:
以下是对这段ABAP代码的详细解释:
1. 程序头部分
*&---------------------------------------------------------------------*
*& Report ZTESTABAP0002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztestabap0002.
- 这部分是ABAP程序的头部注释和报告声明。注释部分用于描述程序的基本信息,
REPORT ztestabap0002
声明了这是一个名为ztestabap0002
的ABAP报表程序。 -
2. 类定义部分
CLASS c1 DEFINITION.
PUBLIC SECTION.
CLASS-METHODS m1 IMPORTING p1 TYPE i DEFAULT 0
EXPORTING p2 TYPE i.
ENDCLASS.
CLASS c1 DEFINITION
:定义了一个名为c1
的类。PUBLIC SECTION
:表示以下定义的成员是公共的,可以被外部访问。CLASS-METHODS m1
:定义了一个类方法m1
。IMPORTING p1 TYPE i DEFAULT 0
:该方法有一个输入参数p1
,类型为整数(i
),默认值为 0。EXPORTING p2 TYPE i
:该方法有一个输出参数p2
,类型为整数。
3. 类方法实现部分
CLASS c1 IMPLEMENTATION.
METHOD m1.
...
ENDMETHOD.
ENDCLASS.
这部分是类 c1
中方法 m1
的具体实现。
输入参数检查
IF p1 IS SUPPLIED.
...
ELSE.
ENDIF.
- 检查输入参数
p1
是否被提供。如果提供了p1
,则执行IF
块中的代码;否则,不执行任何操作。
数据引用操作
DATA: lo_do_value TYPE REF TO data.
DATA: lo_do_value1 TYPE REF TO data.
CREATE DATA lo_do_value LIKE p1.
GET REFERENCE OF p1 INTO lo_do_value.
WRITE: lo_do_value->*.
lo_do_value1 = REF #( p1 ).
WRITE lo_do_value1->*.
DATA: lo_do_value TYPE REF TO data.
:声明两个指向任意数据类型的引用变量lo_do_value
和lo_do_value1
。CREATE DATA lo_do_value LIKE p1.
:创建一个与p1
类型相同的数据对象,并让lo_do_value
指向它。GET REFERENCE OF p1 INTO lo_do_value.
:让lo_do_value
指向p1
的引用。WRITE: lo_do_value->*.
:输出lo_do_value
引用的数据。lo_do_value1 = REF #( p1 ).
:使用类型推断创建一个指向p1
的引用,并赋值给lo_do_value1
。WRITE lo_do_value1->*.
:输出lo_do_value1
引用的数据。
空表检查
DATA: lt_empty TYPE STANDARD TABLE OF text200.
IF boolc( lt_empty[] IS INITIAL ) = abap_true.
WRITE:/ 'This table is empty'.
ELSE.
WRITE:/ 'This table is as full as full can be'.
ENDIF.
lv_is_less = boolc( lt_empty[] IS INITIAL ).
WRITE: / lv_is_less.
DATA: lt_empty TYPE STANDARD TABLE OF text200.
:声明一个标准表lt_empty
,表中元素类型为长度为 200 的文本类型。boolc( lt_empty[] IS INITIAL )
:检查lt_empty
表是否为空。如果为空,输出This table is empty
;否则,输出This table is as full as full can be
。lv_is_less = boolc( lt_empty[] IS INITIAL ).
:将表是否为空的布尔结果赋值给lv_is_less
,并输出该布尔值。
条件判断
IF boolc( 1 = 1 ) = abap_false.
WRITE:/ '1 does not equal 2'.
ELSE.
WRITE:/ '1 equals 2, and the world is made of snow'.
ENDIF.
lv_is_less = boolc( 1 = 1 ).
WRITE: / lv_is_less.
boolc( 1 = 1 )
:判断1
是否等于1
,这显然为真。由于判断为abap_false
的条件不成立,所以会输出1 equals 2, and the world is made of snow
。lv_is_less = boolc( 1 = 1 ).
:将判断结果赋值给lv_is_less
,并输出该布尔值。
条件选择
DATA(l_day) = SWITCH char10( l_indicator
WHEN 1 THEN 'Monday'(326)
WHEN 2 THEN 'Tuesday'(327)
WHEN 3 THEN 'Wednesday'(328)
WHEN 4 THEN 'Thursday'(329)
WHEN 5 THEN 'Friday'(330)
WHEN 6 THEN 'Saturday'(331)
WHEN 7 THEN 'Sunday'(332)
ELSE
'123'
).
WRITE: / l_day.
SWITCH
语句根据l_indicator
的值进行选择。l_indicator
的值为1
,所以l_day
被赋值为'Monday'(326)
,并输出该值。
输出参数检查
IF p2 IS NOT SUPPLIED.
RETURN.
ELSE.
ENDIF.
- 检查输出参数
p2
是否被提供。如果没有提供,方法直接返回;否则,不执行任何操作。
4. 程序执行部分
START-OF-SELECTION.
c1=>m1(
EXPORTING
p1 = 1
IMPORTING
p2 = DATA(lv_p2)
).
START-OF-SELECTION
:这是ABAP报表程序的起始事件,当程序开始执行时会触发。c1=>m1(...)
:调用类c1
的类方法m1
,传入输入参数p1
的值为1
,并将输出参数p2
的值存储在局部变量lv_p2
中。
综上所述,这段代码定义了一个类 c1
,其中包含一个类方法 m1
,在方法中进行了数据引用操作、空表检查、条件判断和条件选择等操作,并在程序开始执行时调用了该方法。