Please be aware that accessing private or protected data may have unpredictible consequences! Use it at your own risk.
不建议使用,会发生不可预见的错误,需自行判断。
类的 private and protected 方法只能在类内部使用,继承父类或者是在外部调用都是不可以的。但是有些情况要用到私有方法。
CL_GUI_ALV_GRID可以通过接口IF_ALV_RM_GRID_FRIEND有助于访问私有数据,既然这样就可以在本地创建一个内部类,以CL_GUI_ALV_GRID为对象作为参数,创建本地类的构造函数,在本地类中以Public的形式定义方法,就可以在本地类中去调用了。
"TOP声明
CLASS lcl_alv_private DEFINITION DEFERRED .
DATA GO_ALV_H TYPE REF TO lcl_alv_private .
DATA GO_ALV TYPE REF TO CL_GUI_ALV_GRID . "参照CL_GUI_ALV_GRID 创建对象 GS_ALV
DATA GO_DOCKING TYPE REF TO cl_gui_docking_container .
类定义与实现
class lcl_alv_private definition
.
public section.
interfaces if_alv_rm_grid_friend .
methods constructor "定义构造函数
importing
!io_grid type ref to cl_gui_alv_grid .
METHODs REFRESH_ALV_line
IMPORTING IV_STABLE TYPE LVC_S_STBL
IV_INFO TYPE LVC_S_ADDI.
protected section.
private section.
data grid type ref to cl_gui_alv_grid .
endclass.
class lcl_alv_private implementation.
method constructor.
grid = io_grid.
endmethod.
METHOD REFRESH_ALV_line.
me->grid->SOFT_REFRESH_TABLE_DISPLAY( "原本的私有方法
EXPORTING
IS_INFO = IV_INFO
IS_STABLE = IV_STABLE
EXCEPTIONS
TOO_MANY_LINES = 1 ).
ENDMETHOD .
endclass.
类定义实现后就与一般的类一样了,同样需要去创建实例,创建实例的时候传入CL_GUI_ALV_GRID的对象
CREATE OBJECT GO_DOCKING
EXPORTING
* PARENT =
REPID = SY-REPID
DYNNR = SY-DYNNR
* SIDE = DOCK_AT_LEFT
EXTENSION = 1000
* STYLE =
* LIFETIME = lifetime_default
* CAPTION =
* METRIC = 0
* RATIO =
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT GO_ALV
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = GO_DOCKING
* I_APPL_EVENTS = SPACE
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
* O_PREVIOUS_SRAL_HANDLER =
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.
CREATE OBJECT GO_ALV_H
EXPORTING io_grid = GO_ALV .
至此,就可以尝试去调用方法了!!
CLEAR GS_STABLE .
* GS_STABLE-ROW = 'X'.
LS_INFO-START_ROW = 1.
LS_INFO-ABS_GR_ROW = 1.
LS_INFO-ROW_ID-INDEX = 1.
LS_INFO-ROW_ID-ROWTYPE = 'CHAR'.
LS_INFO-ROW = 1 .
CALL METHOD GO_ALV_H->REFRESH_ALV_line(
EXPORTING
IV_INFO = LS_INFO
IV_STABLE = GS_STABLE
).