ALV

  • BATCH SELECTION
TYPES:
BEGIN OF TY_DATA
       SEL(1),
       B,
       C,
END OF TY_DATA.

DATA: LT_DATA TYPE TABLE OF TY_DATA,
           L_ALV_LAYOUT      TYPE SLIS_LAYOUT_ALV.


L_ALV_LAYOUT-BOX_FIELDNAME = 'SEL'.





FORM ALV_USER_COMMAND USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
  DATA:REF1 TYPE REF TO CL_GUI_ALV_GRID,
       LT_ROWS TYPE LVC_T_ROW,
       LS_ROWS TYPE LINE OF LVC_T_ROW,
       LT_DATA LIKE TABLE OF IT_DATA,
       LS_DATA LIKE LINE OF IT_DATA.

  CASE UCOMM.
    WHEN 'RNT'.
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          E_GRID = REF1.

      CLEAR: LS_ROWS,WA_DATA.
      REFRESH: LT_ROWS,LT_DATA.
      CALL METHOD REF1->GET_SELECTED_ROWS
        IMPORTING
          ET_INDEX_ROWS = LT_ROWS.
      IF LT_ROWS IS NOT INITIAL.
        LOOP AT LT_ROWS INTO LS_ROWS.
          CLEAR WA_DATA.
          READ TABLE IT_DATA INTO WA_DATA INDEX LS_ROWS.
          IF SY-SUBRC EQ 0.
           

            IF WA_DATA IS NOT INITIAL.
              APPEND WA_DATA TO LT_DATA.
            ENDIF.
          ENDIF.
        ENDLOOP.

        "SORT LT_DATA BY INVNO.
        "DELETE ADJACENT DUPLICATES FROM LT_DATA COMPARING INVNO."avoid printing several times if there are many items
        PERFORM _PRINT_DATA TABLES LT_DATA.
        CLEAR: LS_ROWS,WA_DATA.
        FREE: LT_ROWS,LT_DATA.
      ENDIF.
  ENDCASE.
ENDFORM.                    "alv_user_command



...

...
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        IS_LAYOUT                = L_ALV_LAYOUT
  • "Enter" Event
  CLEAR L_ALV_LAYOUT.
  L_ALV_LAYOUT-DETAIL_POPUP         = 'X'.
  L_ALV_LAYOUT-NO_VLINE             = ' '.
  L_ALV_LAYOUT-ZEBRA                = 'X'.
  L_ALV_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
  L_ALV_LAYOUT-COLWIDTH_OPTIMIZE    = 'X'.
  L_ALV_LAYOUT-ALLOW_SWITCH_TO_LIST = ''.


  L_DISVARIANT-REPORT   = SY-CPROG.
  L_DISVARIANT-USERNAME = SY-UNAME.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE = 0
    IMPORTING
      ET_EVENTS   = L_IT_ET_EVENTS.


  READ TABLE L_IT_ET_EVENTS
    WITH KEY NAME = SLIS_EV_USER_COMMAND
      INTO L_WA_ET_EVENTS.
  IF SY-SUBRC = 0.
    L_WA_ET_EVENTS-FORM = 'USER_COMMAND'.
    APPEND L_WA_ET_EVENTS TO L_IT_ET_EVENTS.
  ENDIF.

   READ TABLE L_IT_ET_EVENTS
    WITH KEY NAME = SLIS_EV_PF_STATUS_SET
      INTO L_WA_ET_EVENTS.
  IF SY-SUBRC = 0.
    L_WA_ET_EVENTS-FORM = 'STATUS'.
    APPEND L_WA_ET_EVENTS TO L_IT_ET_EVENTS.
  ENDIF.

  L_WA_ET_EVENTS-NAME = 'CALLER_EXIT'.
  L_WA_ET_EVENTS-FORM = 'FM_BUTTON'.
  APPEND L_WA_ET_EVENTS TO L_IT_ET_EVENTS.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM    = SY-REPID
      IT_EVENTS             = L_IT_ET_EVENTS
      IS_LAYOUT             = L_ALV_LAYOUT
      IT_FIELDCAT           = G_IT_ALV_FIELDCAT
      IS_VARIANT            = L_DISVARIANT
    TABLES
      T_OUTTAB              = LT_DATA


CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS:
      HANDLE_MODIFY
        FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
        IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS.


CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD  HANDLE_MODIFY.
    DATA: STBL      TYPE LVC_S_STBL,
          L_INT       TYPE STRING.
    CHECK G_IT_DATA[] <> GT_DATA_OLD[] AND SY-UCOMM NE '&DATA_SAVE'.
    LOOP AT G_IT_DATA ASSIGNING <L_DATA>.
      
    ENDLOOP.

*   稳定刷新
    STBL-ROW = 'X'." 基于行的稳定刷新
    STBL-COL = 'X'." 基于列稳定刷新
    CALL METHOD TEM_GRID->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE = STBL.
  ENDMETHOD.                    "HANDLE_MODIFY

ENDCLASS.
posted @ 2019-05-10 11:58  auroracj  阅读(316)  评论(0编辑  收藏  举报