欢迎来到萧静默的博客

书山有路勤为径,学海无涯苦作舟。

abap 简单的本地类操作

作业:

1、创建程序,用于本地类测试。

2、创建本地类LCL_AIRPLANE,用于对飞机的名称及型号的管理。

3、创建1个私有实例类型GTY_PLANE,包含2个字段:

name(飞机的名称),类型为string,

TYPE(飞机的类型),参考SAPLANE-PLANETYPE.

4、创建一个私有实例内表GT_PLANE,一个私有实例GS_PLANE,均使用上面的私有实例类型。

5、创建一个私有静态属性,GV_N_O_AIRPLANES(计算数量),类型为I

6、创建一个公有实例方法,记录飞机名称,飞机类型及录入飞机数量。

7、创建一个公有实例方法,显示内表。

8、创建公有静态方法,显示飞机数量。

9、创建对象,对方法调用显示。

  1 TYPE-POOLS:SILS.
  2 "定义ALV结构
  3 DATA:IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
  4      WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
  5      WA_LAYOUT   TYPE SLIS_LAYOUT_ALV.
  6 "定义类
  7 CLASS LCL_AIRPLAN DEFINITION.
  8   PUBLIC SECTION.
  9     METHODS:SET_ATTRIBUTES,
 10     "有参数传入的方法
 11       SET_ATTRIBUTES1 IMPORTING P_NAME TYPE STRING
 12                                 P_TYPE TYPE STRING,
 13       DISPLAY_ATTRIBUTES,
 14       DISPLAY_ATTRIBUTES1.
 15     CLASS-METHODS:DISPLAY_N_O_AIRPLANES.
 16   PRIVATE SECTION.
 17     TYPES: BEGIN OF GTY_PLANE,
 18              BOX  TYPE BCD,
 19              NAME TYPE STRING,
 20              TYPE TYPE SAPLANE-PLANETYPE,
 21            END OF GTY_PLANE.
 22     DATA:GT_PLANE TYPE STANDARD TABLE OF GTY_PLANE,
 23          GS_PLANE TYPE GTY_PLANE.
 24 
 25     DATA:GT_PLANE1 TYPE STANDARD TABLE OF GTY_PLANE,
 26          GS_PLANE1 TYPE GTY_PLANE.
 27 
 28     CLASS-DATA: GV_N_O_AIRPLANES TYPE I.
 29     CLASS-DATA: GV_N_O_AIRPLANES1 TYPE I.
 30 ENDCLASS.
 31 "实现类
 32 CLASS LCL_AIRPLAN IMPLEMENTATION.
 33   METHOD:SET_ATTRIBUTES.
 34     GS_PLANE-NAME = '波音'.
 35     GS_PLANE-TYPE = '747'.
 36     APPEND GS_PLANE TO GT_PLANE.
 37     GV_N_O_AIRPLANES = 1.
 38     CLEAR:GS_PLANE.
 39     GS_PLANE-NAME = '国行'.
 40     GS_PLANE-TYPE = '123'.
 41     APPEND GS_PLANE TO GT_PLANE.
 42     GV_N_O_AIRPLANES = GV_N_O_AIRPLANES + 1.
 43     CLEAR:GS_PLANE.
 44     GS_PLANE-NAME = '欧航'.
 45     GS_PLANE-TYPE = '543'.
 46     APPEND GS_PLANE TO GT_PLANE.
 47     GV_N_O_AIRPLANES = GV_N_O_AIRPLANES + 1.
 48     CLEAR:GS_PLANE.
 49   ENDMETHOD.
 50   METHOD SET_ATTRIBUTES1.
 51     GS_PLANE1-NAME = P_NAME.
 52     GS_PLANE1-TYPE = P_TYPE.
 53     APPEND GS_PLANE1 TO GT_PLANE1.
 54     GV_N_O_AIRPLANES1 = GV_N_O_AIRPLANES + 1.
 55     CLEAR:GS_PLANE1.
 56   ENDMETHOD.
 57   METHOD:DISPLAY_ATTRIBUTES.
 58     PERFORM FIELDCAT USING:
 59            1 'NAME' '飞机的名称',
 60            2 'TYPE' '飞机的类型'.
 61     WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
 62     WA_LAYOUT-BOX_FIELDNAME = 'box'. "全选按钮“
 63     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 64       EXPORTING
 65         I_CALLBACK_PROGRAM = SY-REPID
 66         IS_LAYOUT          = WA_LAYOUT
 67         IT_FIELDCAT        = IT_FIELDCAT
 68       TABLES
 69         T_OUTTAB           = GT_PLANE
 70       EXCEPTIONS
 71         PROGRAM_ERROR      = 1
 72         OTHERS             = 2.
 73     IF SY-SUBRC <> 0.
 74 * Implement suitable error handling here
 75     ENDIF.
 76   ENDMETHOD.
 77   METHOD DISPLAY_ATTRIBUTES1.
 78     CL_DEMO_OUTPUT=>DISPLAY_DATA( GT_PLANE1 ).
 79   ENDMETHOD.
 80 
 81   METHOD:DISPLAY_N_O_AIRPLANES.
 82     WRITE:/ '总计录入了', GV_N_O_AIRPLANES, '架飞机'.
 83   ENDMETHOD.
 84 ENDCLASS.
 85 
 86 FORM FIELDCAT  USING    P_COL_POS
 87                         P_FIELDNAME
 88                         P_SELTEXT_M.
 89   WA_FIELDCAT-COL_POS = P_COL_POS.
 90   WA_FIELDCAT-FIELDNAME = P_FIELDNAME.
 91   WA_FIELDCAT-SELTEXT_M = P_SELTEXT_M.
 92   APPEND WA_FIELDCAT TO IT_FIELDCAT.
 93   CLEAR:WA_FIELDCAT.
 94 ENDFORM.
 95 "创建实例并调用方法
 96 
 97 START-OF-SELECTION.
 98   "常规的定义参考类后创建实例
 99   DATA:RESULT TYPE REF TO LCL_AIRPLAN.
100   CREATE OBJECT: RESULT.
101   RESULT->SET_ATTRIBUTES( )."普通方法实例调用
102   RESULT->DISPLAY_ATTRIBUTES( ).
103   LCL_AIRPLAN=>DISPLAY_N_O_AIRPLANES( )."静态方法调用
104   "new关键字创建实例
105   RESULT = NEW LCL_AIRPLAN( ).
106   RESULT->DISPLAY_N_O_AIRPLANES( ).
107   "直接创建实例
108   DATA(RESULT1) = NEW LCL_AIRPLAN( ).
109   "调用是传入参数
110   RESULT1->SET_ATTRIBUTES1( p_name = '春秋航空' P_TYPE = '747' ).
111   RESULT1->SET_ATTRIBUTES1( p_name = '四川航空' P_TYPE = '333' ).
112"另外一种导入参数的方法,上面是简写
  CALL METHOD RESULT1->SET_ATTRIBUTES1
    EXPORTING
      P_NAME '南方航空'
      P_TYPE '444'.
113 RESULT1->DISPLAY_ATTRIBUTES1( ). 114 RESULT1->DISPLAY_N_O_AIRPLANES( ). 115 "更加直接 116 NEW LCL_AIRPLAN( )->DISPLAY_N_O_AIRPLANES( ).

 

 

 

 

 

 

 

 

posted @ 2020-02-25 11:37  萧静默  阅读(812)  评论(0编辑  收藏  举报