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( ).