Code listing for: ZDTI_SYNTAXCHECK_CLASS

Description: Event receiver class

***********************************************************************************************************************
*
* Author          : Copyright (C) 2006 E.G.Mellodew
* program contact : www.dalestech.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*
***********************************************************************************************************************
* ZDTI_SYNTAXCHECK_CLASS... Event receiver class for ALV grids
*----------------------------------------------------------------------------------------------------------------------
* Version  Correction Number  Date Changed  Changed By        Description
* ---------------------------------------------------------------------------------------------------------------------
* 1.0                                       Ed Mellodew       Original version
*
***********************************************************************************************************************


*----------------------------------------------------------------------------------------------------------------------
* class clsEventReceiver definition.
*----------------------------------------------------------------------------------------------------------------------
class clsEventReceiver definition.

  public section.
     methods: after_refresh for event after_refresh of cl_gui_alv_grid.

     methods: after_user_command for event after_user_command of cl_gui_alv_grid importing e_ucomm
                                                                                           e_not_processed.

     methods: before_user_command for event before_user_command of cl_gui_alv_grid importing e_ucomm.

     methods: button_click for event button_click of cl_gui_alv_grid importing es_col_id
                                                                               es_row_no.

     methods: context_menu_request for event context_menu_request of cl_gui_alv_grid importing e_object.

     methods: 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: data_changed_finished for event data_changed_finished of cl_gui_alv_grid importing e_modified
                                                                                                 et_good_cells.

     methods: delayed_callback for event delayed_callback of cl_gui_alv_grid.

     methods: delayed_changed_sel_callback for event delayed_changed_sel_callback of cl_gui_alv_grid.

     methods: double_click for event double_click of cl_gui_alv_grid importing e_row
                                                                               e_column
                                                                               es_row_no
                                                                               sender.

     methods: end_of_list for event end_of_list of cl_gui_alv_grid importing e_dyndoc_id.

     methods: hotspot_click for event hotspot_click of cl_gui_alv_grid importing e_row_id
                                                                                 e_column_id
                                                                                 es_row_no
                                                                                 sender.

     methods: menu_button for event menu_button of cl_gui_alv_grid importing e_object
                                                                             e_ucomm.

     methods: ondrag for event ondrag of cl_gui_alv_grid importing e_row
                                                                   e_column
                                                                   es_row_no
                                                                   e_dragdropobj.

     methods: ondrop for event ondrop of cl_gui_alv_grid importing e_row
                                                                   e_column
                                                                   es_row_no
                                                                   e_dragdropobj.

     methods: ondropcomplete for event ondropcomplete of cl_gui_alv_grid importing e_row
                                                                                   e_column
                                                                                   es_row_no
                                                                                   e_dragdropobj.

     methods: ondropgetflavor for event ondropgetflavor of cl_gui_alv_grid importing e_row
                                                                                     e_column
                                                                                     es_row_no
                                                                                     e_dragdropobj
                                                                                     e_flavors.

     methods: onf1 for event onf1 of cl_gui_alv_grid importing e_fieldname
                                                               es_row_no
                                                               er_event_data.

     methods: 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: print_end_of_list for event print_end_of_list of cl_gui_alv_grid.

     methods: print_end_of_page for event print_end_of_page of cl_gui_alv_grid.

     methods: print_top_of_list for event print_top_of_list of cl_gui_alv_grid.

     methods: print_top_of_page for event print_top_of_page of cl_gui_alv_grid.

     methods: subtotal_text for event subtotal_text of cl_gui_alv_grid importing es_subtottxt_info
                                                                                 ep_subtot_line
                                                                                 e_event_data.

     methods: toolbar for event toolbar of cl_gui_alv_grid importing e_object
                                                                     e_interactive.

     methods: top_of_page for event top_of_page of cl_gui_alv_grid importing e_dyndoc_id.

     methods: user_command for event user_command of cl_gui_alv_grid importing e_ucomm.


  private section.
    constants: MC_FC_ALL type ui_func value '&ALLMESS',
               MC_FC_ERR type ui_func value '&ERRMESS',
               MC_FC_WAR type ui_func value '&WARMESS'.
endclass.

*----------------------------------------------------------------------------------------------------------------------
* class clsEventReceiver implementation.
*----------------------------------------------------------------------------------------------------------------------
class clsEventReceiver implementation.

 "---------------------------------------------------------------------------------------------------------------------
 " after_refresh... After List Refresh
 "---------------------------------------------------------------------------------------------------------------------
  method after_refresh.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " after_user_command... After User Command
 "---------------------------------------------------------------------------------------------------------------------
  method after_user_command.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " before_user_command... Before User Command
 "---------------------------------------------------------------------------------------------------------------------
  method before_user_command.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " button_click... Button Click
 "---------------------------------------------------------------------------------------------------------------------
  method button_click.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " context_menu_request... Context Menu
 "---------------------------------------------------------------------------------------------------------------------
  method context_menu_request.
    e_object->add_function( fCode = MC_FC_ERR text = text-010 ).
    e_object->add_function( fCode = MC_FC_WAR text = text-011 ).
    e_object->add_function( fCode = MC_FC_ALL text = text-003 ).
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " data_changed... Data was Changed
 "---------------------------------------------------------------------------------------------------------------------
  method data_changed.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " data_changed_finished... Data in the Output Table was Updated
 "---------------------------------------------------------------------------------------------------------------------
  method data_changed_finished.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " delayed_callback... Delayed Callback
 "---------------------------------------------------------------------------------------------------------------------
  method delayed_callback.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " delayed_changed_sel_callback... DELAYED_CHANGED_SEL_CALLBACK
 "---------------------------------------------------------------------------------------------------------------------
  method delayed_changed_sel_callback.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " double_click... DoubleClick
 "---------------------------------------------------------------------------------------------------------------------
  method double_click.
    data: rowId type lvc_t_roid.
    data: rowIndex type lvc_t_row.
    data: waMessage like line of iMessages.
    data: waRow type lvc_s_roid.

*   Display the source code of the syntax error
    if sender = objAlvGridMessages.
*     Get the line the error is on
      objAlvGridMessages->get_selected_rows( importing et_index_rows = rowIndex et_row_no = rowId ).

      read table rowId index 1 into waRow.
      read table iAlvMessages index waRow-row_id into waMessage.
      if waMessage-alvStatus <> 3.
        if sy-subrc = 0.
          CALL FUNCTION 'RS_TOOL_ACCESS'
            EXPORTING
              OPERATION                 = 'SHOW'
              OBJECT_NAME               = waMessage-incName
              OBJECT_TYPE               = 'PROG'
              POSITION                  = waMessage-line
           EXCEPTIONS
             NOT_EXECUTED              = 1
             INVALID_OBJECT_TYPE       = 2
             OTHERS                    = 3.
        endif.
      endif.
    endif.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " end_of_list... End_of_list
 "---------------------------------------------------------------------------------------------------------------------
  method end_of_list.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " hotspot_click... Hotspot was Selected
 "---------------------------------------------------------------------------------------------------------------------
  method hotspot_click.
    data: waProgramDetail type zdts_programDetails.
    data: waMessage type zdts_syntaxMessage.
    data: waFuncDetail like line of iFuncDetails.
    data: waClassDetail like line of iClassDetails.
    data: progName type programm.
    data: objName type sobj_name.

    case 'X'.
      when rbProg.
        read table iProgramDetails into waProgramDetail index e_row_id-index.

        case e_column_id.
          when 'EDITICON'.
*           Go the the abap editor
            set parameter id 'RID' field waProgramDetail-programName.
            call transaction 'SE38'.

          when 'PROGRAMNAME'.
*           Show only the messages for this program
            clear iAlvMessages[].
            loop at iMessages into waMessage where intProgName = waProgramDetail-programName.
              append waMessage to iAlvMessages.
            endloop.

            if not iMessages[] is initial.
              perform displayMessages using iAlvMessages[]
                                            iMessFieldCatalogue[]
                                            objMessEventReceiver.
            endif.
         endcase.

       when rbFunc.
         read table iFuncDetails into waFuncDetail index e_row_id-index.
*        Show only the messages for this function group
         objName = waFuncDetail-funcName.
         call function 'RS_TADIR_TO_PROGNAME' exporting object = 'FUGR'
                                                        obj_name = objName
                                              importing progname = progname.
         clear iAlvMessages[].
         loop at iMessages into waMessage where intProgName = progname.
           append waMessage to iAlvMessages.
         endloop.

         if not iMessages[] is initial.
           perform displayMessages using iAlvMessages[]
                                         iMessFieldCatalogue[]
                                         objMessEventReceiver.
         endif.

       when rbClass.
         read table iClassDetails into waClassDetail index e_row_id-index.
*        Show only the messages for this class
         objName = waClassDetail-className.
         call function 'RS_TADIR_TO_PROGNAME' exporting object = 'CLAS'
                                                        obj_name = objName
                                              importing progname = progname.
         clear iAlvMessages[].
         loop at iMessages into waMessage where intProgName = progname.
           append waMessage to iAlvMessages.
         endloop.

         if not iMessages[] is initial.
           perform displayMessages using iAlvMessages[]
                                         iMessFieldCatalogue[]
                                         objMessEventReceiver.
         endif.
     endcase.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " menu_button... Menu Button
 "---------------------------------------------------------------------------------------------------------------------
  method menu_button.
    e_object->add_function( fCode = MC_FC_ERR text = text-010 ).
    e_object->add_function( fCode = MC_FC_WAR text = text-011 ).
    e_object->add_function( fCode = MC_FC_ALL text = text-003 ).
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " ondrag... For Drag Source
 "---------------------------------------------------------------------------------------------------------------------
  method ondrag.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " ondrop... For Drop Target
 "---------------------------------------------------------------------------------------------------------------------
  method ondrop.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " ondropcomplete... For Drag Source in Case of Success
 "---------------------------------------------------------------------------------------------------------------------
  method ondropcomplete.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " ondropgetflavor... Multiple Flavors Possible at a Drop
 "---------------------------------------------------------------------------------------------------------------------
  method ondropgetflavor.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " onf1... On Help Request
 "---------------------------------------------------------------------------------------------------------------------
  method onf1.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " onf4... On Value Request
 "---------------------------------------------------------------------------------------------------------------------
  method onf4.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " print_end_of_list... Print Mode: END_OF_LIST of Classic ALV
 "---------------------------------------------------------------------------------------------------------------------
  method print_end_of_list.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " print_end_of_page... Print Mode: END_OF_PAGE in List Processing
 "---------------------------------------------------------------------------------------------------------------------
  method print_end_of_page.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " print_top_of_list... Print Mode: TOP_OF_LIST of Classic ALV
 "---------------------------------------------------------------------------------------------------------------------
  method print_top_of_list.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " print_top_of_page... Print Mode: TOP_OF_PAGE in List Processing
 "---------------------------------------------------------------------------------------------------------------------
  method print_top_of_page.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " subtotal_text... Edit Subtotals Text
 "---------------------------------------------------------------------------------------------------------------------
  method subtotal_text.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " toolbar... Toolbar
 "---------------------------------------------------------------------------------------------------------------------
  method toolbar.
    constants:
      BUTTON_NORMAL           type i value 0,
      MENU_AND_DEFAULT_BUTTON type i value 1,
      MENU                    type i value 2,
      SEPARATOR               type i value 3,
      RADIOBUTTON             type i value 4,
      CHECKBOX                type i value 5,
      MENU_ENTRY              type i value 6.
    data:  alvToolbar type stb_button.

*   append a separator
    clear alvToolbar.
    alvToolbar-butn_type = SEPARATOR.
    append alvToolbar to e_object->mt_toolbar.

*   append an icon for showing all messages
    clear alvToolbar.
    alvToolbar-butn_type = MENU_AND_DEFAULT_BUTTON.
    alvToolbar-function = MC_FC_ALL.
    alvToolbar-quickinfo = text-002.
    alvToolbar-icon = icon_detail.
    append alvToolbar to e_object->mt_toolbar.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " top_of_page... Top_of_page
 "---------------------------------------------------------------------------------------------------------------------
  method top_of_page.
  endmethod.

 "---------------------------------------------------------------------------------------------------------------------
 " user_command... User Command
 "---------------------------------------------------------------------------------------------------------------------
  method user_command.
    data: waMessage type zdts_syntaxMessage.

    case e_ucomm.
      when MC_FC_ALL.
*       Show all messages
        iAlvMessages[] = iMessages[].
        perform displayMessages using iAlvMessages[]
                                      iMessFieldCatalogue[]
                                      objMessEventReceiver.

      when MC_FC_ERR.
*       Show only error messages
        clear iAlvMessages[].
        loop at iMessages into waMessage where messageType = 'E'.
          append waMessage to iAlvMessages.
        endloop.

        perform displayMessages using iAlvMessages[]
                                      iMessFieldCatalogue[]
                                      objMessEventReceiver.                                      .

      when MC_FC_WAR.
*       Show only warning messages
        clear iAlvMessages[].
        loop at iMessages into waMessage where messageType = 'W'.
          append waMessage to iAlvMessages.
        endloop.

        perform displayMessages using iAlvMessages[]
                                      iMessFieldCatalogue[]
                                      objMessEventReceiver.                                      .
    endcase.
  endmethod.
endclass.