VinceCoder
3/21/2019 - 7:06 AM

Template LCL_EVENT_HANDLER (Definition / Implementation)

I BREAK-POINT presenti nelle implementazioni dei metodi servono per testare la riuscita dell'evento.

Vanno settati i SET HANDLER dopo la Set_table_for_first_display per il catch dell'evento (presenti in questo snippet)

In genere la DEFINITION va nell'include TOP prima d'ogni cosa

La Implementation (per ordine e pulizia codice) va in include per le classi.

In coda allo snippet i due moduli PBO e PAI: Nel PBO creazione oggetti, set_table_for_first display, registrazione eventi e appunto HANDLER eventi. Nel PAI chiamata al Dispatch ed eventuali FLUSH

Template LCL_EVENT_HANDLER (Definition / Implementation) 

CLASS lcl_handler DEFINITION.
  PUBLIC SECTION.

    METHODS handle_right_click                  " RIGHT_CLICK
      FOR EVENT right_click OF cl_gui_alv_grid.

    METHODS handle_left_click_design            " LEFT_CLICK_DESIGN
      FOR EVENT left_click_design OF cl_gui_alv_grid.

    METHODS handle_move_control                 " MOVE_CONTROL
      FOR EVENT move_control OF cl_gui_alv_grid.

    METHODS handle_size_control                 " SIZE_CONTROL
      FOR EVENT size_control OF cl_gui_alv_grid.

    METHODS handle_left_click_run               " LEFT_CLICK_RUN
      FOR EVENT left_click_run OF cl_gui_alv_grid.

    METHODS handle_onf1                                     " ONF1
      FOR EVENT onf1 OF cl_gui_alv_grid
        IMPORTING
          e_fieldname
          es_row_no
          er_event_data.

    METHODS handle_onf4                                     " ONF4
      FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING
          e_fieldname
          e_fieldvalue
          es_row_no
          er_event_data
          et_bad_cells
          e_display.

    METHODS handle_data_changed                 " DATA_CHANGED
      FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING
          er_data_changed
          e_onf4
          e_onf4_before
          e_onf4_after
          e_ucomm.

    METHODS handle_ondropgetflavor              " ONDROPGETFLAVOR
      FOR EVENT ondropgetflavor OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          e_dragdropobj
          e_flavors.

    METHODS handle_ondrag                       " ONDRAG
      FOR EVENT ondrag OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          e_dragdropobj.

    METHODS handle_ondrop                       " ONDROP
      FOR EVENT ondrop OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          e_dragdropobj.

    METHODS handle_ondropcomplete               " ONDROPCOMPLETE
      FOR EVENT ondropcomplete OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          e_dragdropobj.

    METHODS handle_subtotal_text                " SUBTOTAL_TEXT
      FOR EVENT subtotal_text OF cl_gui_alv_grid
        IMPORTING
          es_subtottxt_info
          ep_subtot_line
          e_event_data.

    METHODS handle_before_user_command          " BEFORE_USER_COMMAND
      FOR EVENT before_user_command OF cl_gui_alv_grid
        IMPORTING
          e_ucomm.

    METHODS handle_user_command                 " USER_COMMAND
      FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING
          e_ucomm.

    METHODS handle_after_user_command           " AFTER_USER_COMMAND
      FOR EVENT after_user_command OF cl_gui_alv_grid
        IMPORTING
          e_ucomm
          e_not_processed.

    METHODS handle_double_click                 " DOUBLE_CLICK
      FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no.

    METHODS handle_delayed_callback             " DELAYED_CALLBACK
      FOR EVENT delayed_callback OF cl_gui_alv_grid.

    METHODS handle_delayed_changed_sel_cal " DELAYED_CHANGED_SEL_CALLBACK
      FOR EVENT delayed_changed_sel_callback OF cl_gui_alv_grid.

    METHODS handle_print_top_of_page            " PRINT_TOP_OF_PAGE
      FOR EVENT print_top_of_page OF cl_gui_alv_grid
        IMPORTING
          table_index.

    METHODS handle_print_top_of_list            " PRINT_TOP_OF_LIST
      FOR EVENT print_top_of_list OF cl_gui_alv_grid.

    METHODS handle_print_end_of_page            " PRINT_END_OF_PAGE
      FOR EVENT print_end_of_page OF cl_gui_alv_grid.

    METHODS handle_print_end_of_list            " PRINT_END_OF_LIST
      FOR EVENT print_end_of_list OF cl_gui_alv_grid.

    METHODS handle_top_of_page                  " TOP_OF_PAGE
      FOR EVENT top_of_page OF cl_gui_alv_grid
        IMPORTING
          e_dyndoc_id
          table_index.

    METHODS handle_context_menu_request         " CONTEXT_MENU_REQUEST
      FOR EVENT context_menu_request OF cl_gui_alv_grid
        IMPORTING
          e_object.

    METHODS handle_menu_button                  " MENU_BUTTON
      FOR EVENT menu_button OF cl_gui_alv_grid
        IMPORTING
          e_object
          e_ucomm.

    METHODS handle_toolbar                      " TOOLBAR
      FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
          e_object
          e_interactive.

    METHODS handle_hotspot_click                " HOTSPOT_CLICK
      FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING
          e_row_id
          e_column_id.

    METHODS handle_end_of_list                  " END_OF_LIST
      FOR EVENT end_of_list OF cl_gui_alv_grid
        IMPORTING
          e_dyndoc_id.

    METHODS handle_after_refresh                " AFTER_REFRESH
      FOR EVENT after_refresh OF cl_gui_alv_grid.

    METHODS handle_button_click                 " BUTTON_CLICK
      FOR EVENT button_click OF cl_gui_alv_grid
        IMPORTING
          es_col_id
          es_row_no.

    METHODS handle_data_changed_finished        " DATA_CHANGED_FINISHED
      FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING
          e_modified
          et_good_cells.
ENDCLASS.               "lcl_handler




CLASS lcl_handler IMPLEMENTATION.

  METHOD handle_right_click.
    BREAK-POINT.
  ENDMETHOD.                    "handle_right_click

  METHOD handle_left_click_design.
    BREAK-POINT.
  ENDMETHOD.                    "handle_left_click_design

  METHOD handle_move_control.
    BREAK-POINT.
  ENDMETHOD.                    "handle_move_control

  METHOD handle_size_control.
    BREAK-POINT.
  ENDMETHOD.                    "handle_size_control

  METHOD handle_left_click_run.
    BREAK-POINT.
  ENDMETHOD.                    "handle_left_click_run

  METHOD handle_onf1.
    BREAK-POINT.
  ENDMETHOD.                    "handle_onf1

  METHOD handle_onf4.
    BREAK-POINT.
  ENDMETHOD.                    "handle_onf4

  METHOD handle_data_changed.
    BREAK-POINT.
  ENDMETHOD.                    "handle_data_changed

  METHOD handle_ondropgetflavor.
    BREAK-POINT.
  ENDMETHOD.                    "handle_ondropgetflavor

  METHOD handle_ondrag.
    BREAK-POINT.
  ENDMETHOD.                    "handle_ondrag

  METHOD handle_ondrop.
    BREAK-POINT.
  ENDMETHOD.                    "handle_ondrop

  METHOD handle_ondropcomplete.
    BREAK-POINT.
  ENDMETHOD.                    "handle_ondropcomplete

  METHOD handle_subtotal_text.
    BREAK-POINT.
  ENDMETHOD.                    "handle_subtotal_text

  METHOD handle_before_user_command.
    BREAK-POINT.
  ENDMETHOD.                    "handle_before_user_command

  METHOD handle_user_command.
    BREAK-POINT.
  ENDMETHOD.                    "handle_user_command

  METHOD handle_after_user_command.
    BREAK-POINT.
  ENDMETHOD.                    "handle_after_user_command

  METHOD handle_double_click.
    BREAK-POINT.
  ENDMETHOD.                    "handle_double_click

  METHOD handle_delayed_callback.
    BREAK-POINT.
  ENDMETHOD.                    "handle_delayed_callback

  METHOD handle_delayed_changed_sel_cal.
    BREAK-POINT.
  ENDMETHOD.                    "handle_delayed_changed_sel_cal

  METHOD handle_print_top_of_page.
    BREAK-POINT.
  ENDMETHOD.                    "handle_print_top_of_page

  METHOD handle_print_top_of_list.
    BREAK-POINT.
  ENDMETHOD.                    "handle_print_top_of_list

  METHOD handle_print_end_of_page.
    BREAK-POINT.
  ENDMETHOD.                    "handle_print_end_of_page

  METHOD handle_print_end_of_list.
    BREAK-POINT.
  ENDMETHOD.                    "handle_print_end_of_list

  METHOD handle_top_of_page.
    BREAK-POINT.
  ENDMETHOD.                    "handle_top_of_page

  METHOD handle_context_menu_request.
    BREAK-POINT.
  ENDMETHOD.                    "handle_context_menu_request

  METHOD handle_menu_button.
    BREAK-POINT.
  ENDMETHOD.                    "handle_menu_button

  METHOD handle_toolbar.
    BREAK-POINT.
  ENDMETHOD.                    "handle_toolbar

  METHOD handle_hotspot_click.
    BREAK-POINT.
  ENDMETHOD.                    "handle_hotspot_click

  METHOD handle_end_of_list.
    BREAK-POINT.
  ENDMETHOD.                    "handle_end_of_list

  METHOD handle_after_refresh.
    BREAK-POINT.
  ENDMETHOD.                    "handle_after_refresh

  METHOD handle_button_click.
    BREAK-POINT.
  ENDMETHOD.                    "handle_button_click

  METHOD handle_data_changed_finished.
    BREAK-POINT.
  ENDMETHOD.                    "handle_data_changed_finished

ENDCLASS.                    "cl_event_receiver IMPLEMENTATION


/////////Modulo PBO e PAI/////////////////

MODULE zfi_coge_o01 OUTPUT.

  SET PF-STATUS 'GUI_STATUS'.
  SET TITLEBAR 'TITLE_0100'.

  CREATE OBJECT ob_custom1
    EXPORTING
      container_name = 'C_HEADER'.

  CREATE OBJECT ob_custom2
    EXPORTING
      container_name = 'C_ITEMS'.

  CREATE OBJECT l_grid1
    EXPORTING
      i_parent = ob_custom1.

  CREATE OBJECT l_grid2
    EXPORTING
      i_parent = ob_custom2.

  PERFORM build_fieldcatalog_header.
  PERFORM build_fieldcatalog.

  CALL METHOD l_grid1->set_table_for_first_display
    CHANGING
      it_fieldcatalog = gt_fieldcatalog_header
      it_outtab       = gt_header[].

  CALL METHOD l_grid2->set_table_for_first_display
    CHANGING
      it_fieldcatalog = gt_fieldcatalog
      it_outtab       = gt_lines[].

  CALL METHOD l_grid1->register_edit_event "Per registrazione eventi change data in alv out
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

  CALL METHOD l_grid1->register_edit_event "Per registrazione eventi change data in alv out ucomm = ENTER
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*   create handler
  CREATE OBJECT go_handler.

*   register handler for events
  SET HANDLER go_handler->handle_right_click                FOR l_grid1.
  SET HANDLER go_handler->handle_left_click_design          FOR l_grid1.
  SET HANDLER go_handler->handle_move_control               FOR l_grid1.
  SET HANDLER go_handler->handle_size_control               FOR l_grid1.
  SET HANDLER go_handler->handle_left_click_run             FOR l_grid1.
  SET HANDLER go_handler->handle_onf1                       FOR l_grid1.
  SET HANDLER go_handler->handle_onf4                       FOR l_grid1.
  SET HANDLER go_handler->handle_data_changed               FOR l_grid1.
  SET HANDLER go_handler->handle_ondropgetflavor            FOR l_grid1.
  SET HANDLER go_handler->handle_ondrag                     FOR l_grid1.
  SET HANDLER go_handler->handle_ondrop                     FOR l_grid1.
  SET HANDLER go_handler->handle_ondropcomplete             FOR l_grid1.
  SET HANDLER go_handler->handle_subtotal_text              FOR l_grid1.
  SET HANDLER go_handler->handle_before_user_command        FOR l_grid1.
  SET HANDLER go_handler->handle_user_command               FOR l_grid1.
  SET HANDLER go_handler->handle_after_user_command         FOR l_grid1.
  SET HANDLER go_handler->handle_double_click               FOR l_grid1.
  SET HANDLER go_handler->handle_delayed_callback           FOR l_grid1.
  SET HANDLER go_handler->handle_delayed_changed_sel_cal    FOR l_grid1.
  SET HANDLER go_handler->handle_print_top_of_page          FOR l_grid1.
  SET HANDLER go_handler->handle_print_top_of_list          FOR l_grid1.
  SET HANDLER go_handler->handle_print_end_of_page          FOR l_grid1.
  SET HANDLER go_handler->handle_print_end_of_list          FOR l_grid1.
  SET HANDLER go_handler->handle_top_of_page                FOR l_grid1.
  SET HANDLER go_handler->handle_context_menu_request       FOR l_grid1.
  SET HANDLER go_handler->handle_menu_button                FOR l_grid1.
  SET HANDLER go_handler->handle_toolbar                    FOR l_grid1.
  SET HANDLER go_handler->handle_hotspot_click              FOR l_grid1.
  SET HANDLER go_handler->handle_end_of_list                FOR l_grid1.
  SET HANDLER go_handler->handle_after_refresh              FOR l_grid1.
  SET HANDLER go_handler->handle_button_click               FOR l_grid1.
  SET HANDLER go_handler->handle_data_changed_finished      FOR l_grid1.


ENDMODULE.                 " ZFI_COGE_O01  OUTPUT

*----------------------------------------------------------------------*
*  MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CALL METHOD cl_gui_cfw=>dispatch.

  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      FREE: l_grid1, l_grid2, ob_custom1, ob_custom2.
      REFRESH: gt_lines.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
*       MODIFY gt_header[] FROM gt_header.
*       MODIFY gt_lines[]  FROM gt_lines.
      IF sy-subrc IS INITIAL.
*        COMMIT WORK AND WAIT.
        MESSAGE s000(oo) WITH 'salvataggio avvenuto' '!!'.
      ELSE.
        ROLLBACK WORK.
        MESSAGE s000(oo) DISPLAY LIKE 'E' WITH 'salvataggio non avvenuto' '!!'.
        RETURN.
      ENDIF.

*      BREAK-POINT.
  ENDCASE.

ENDMODULE.