欢迎来到萧静默的博客

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

OO实现ALV-SALV-实战攻略3-2-ALV工具栏自定义按钮展示方式

REPORT ZSALV-01.
*SALV自定义按钮功能
*变量定义
DATA: S_ALV TYPE REF TO CL_SALV_TABLE.
"class 定义
CLASS SALV_DISPLAY DEFINITION."基础类
  PUBLIC SECTION.
    METHODS: DISPLAYDATA ."方法
    EVENTS:FUNCTION ."事件
  PRIVATE SECTION.
    DATA:LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS,
         LR_EVENTS    TYPE REF TO CL_SALV_EVENTS.
ENDCLASS.
CLASS SET_HANDLER DEFINITION.
  PUBLIC SECTION.
    "理解为为某个类的事件而产生的方法,相当于将2个类关联起来
    METHODS:USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS_TABLE"直接使用该类的function事件
      IMPORTING E_SALV_FUNCTION.
ENDCLASS.

"class 实现
CLASS SALV_DISPLAY IMPLEMENTATION.
  METHOD DISPLAYDATA.
    SELECT * INTO TABLE @DATA(LT_VBAK) FROM VBAK UP TO 10 ROWS.
    TRY.
        CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE   = S_ALV  CHANGING T_TABLE = LT_VBAK ).
      CATCH CX_SALV_MSG .
    ENDTRY.
*    LR_FUNCTIONS = S_ALV->GET_FUNCTIONS( ).
*    LR_FUNCTIONS->SET_ALL( ABAP_TRUE ).
    LR_EVENTS = S_ALV->GET_EVENT( ).
    "设置ALV功能
    S_ALV->SET_SCREEN_STATUS(
    PFSTATUS      =  'SALV_STANDARD1'
    REPORT        =  SY-REPID
    SET_FUNCTIONS = S_ALV->C_FUNCTIONS_ALL ).
    "=====事件注册
    DATA:HANDLER TYPE REF TO SET_HANDLER.
    CREATE OBJECT HANDLER.
    SET HANDLER HANDLER->USER_COMMAND FOR ALL INSTANCES.
    S_ALV->DISPLAY( ).
  ENDMETHOD.
ENDCLASS.

CLASS SET_HANDLER IMPLEMENTATION.
  METHOD USER_COMMAND.
    PERFORM USER_CLICK USING E_SALV_FUNCTION.
  ENDMETHOD.

ENDCLASS.
FORM USER_CLICK USING P_SALV_FUNCTION TYPE SALV_DE_FUNCTION.
  CASE P_SALV_FUNCTION.
    WHEN '&CLICK'.
      MESSAGE '你点击了我!' TYPE 'I'.
      S_ALV->REFRESH( ).
  ENDCASE.
ENDFORM.

START-OF-SELECTION.
  DATA:LR_ALV TYPE REF TO SALV_DISPLAY.
  CREATE OBJECT LR_ALV.
  LR_ALV->DISPLAYDATA( ).

 

 其中格式状态需要使用SE41自建一个或者复制一个标准的后自己添加一些按钮。

 

posted @ 2021-04-07 15:45  萧静默  阅读(815)  评论(0编辑  收藏  举报