SAP ABAP 如何在程序中调用类的私有方法(CL_GUI_ALV_GRID)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值