ABAP程序中今天会用到CALL METHOD即调用类方法,类似CALL FUNCTION。
以SAP中的两个类为例:CL_GUI_CFW,CL_GUI_ALV_GRID。
调用格式如下:
CALL METHOD cl_gui_cfw=>dispatch
* IMPORTING
* return_code =
.
*DATA: g_grid TYPE REF TO cl_gui_alv_grid.
*CREATE OBJECT g_grid
* EXPORTING
** i_shellstyle = 0
** i_lifetime =
* i_parent = g_dock_container
* EXCEPTIONS
* error_cntl_create = 1
* error_cntl_init = 2
* error_cntl_link = 3
* error_dp_create = 4
* OTHERS = 5.
*IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*ENDIF.
*CALL METHOD g_grid->set_table_for_first_display
** EXPORTING
** i_buffer_active =
** i_bypassing_buffer =
** i_consistency_check =
** i_structure_name =
** is_variant =
** i_save =
** i_default = 'X'
** is_layout =
** is_print =
** it_special_groups =
** it_toolbar_excluding =
** it_hyperlink =
** it_alv_graphics =
** it_except_qinfo =
** ir_salv_adapter =
* CHANGING
* it_outtab =
** it_fieldcatalog =
** it_sort =
** it_filter =
** EXCEPTIONS
** invalid_parameter_combination = 1
** program_error = 2
** too_many_lines = 3
** others = 4
* .
*IF sy-subrc <> 0.
** Implement suitable error handling here
*ENDIF.
这里我们会发现一个现象:调用类CL_GUI_CFW不需要实例化对象,而调用类CL_GUI_ALV_GRID需要实例化一个对象。
原因如下:
通过T-CODE:SE24可以知道类型的属性CL_GUI_CFW属性Abstract,CL_GUI_ALV_GRID属性Public,如下所示:
如此可知我们在CALL属性为Abstract的类时,无需进行实例化,而CALL属性为Public的类时,需要进行实例化操作。
如何自动调用METHOD的那?系统提供自动插入的操作
1.点击“pattern”选择“ABAP Objects Patterns”然后回车,如下:
2.调用method
2.1调用属性为abstract的类
2.2调用属性为Public的类
首先实例化该类的一个对象
DATA:g_grid TYPE REF TO cl_gui_alv_grid.
然后调用类
ok~~!
更多一点的信息可以查询:http://zevolving.com/2012/01/abstract-class-vs-interface/