SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Adding custom buttons on ALV grid controls



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ALV Grid / ALV Tree / ALV List
View previous topic :: View next topic  
Author Message
admin
Администратор
Администратор



Joined: 01 Sep 2007
Posts: 1639

PostPosted: Mon Sep 10, 2007 8:01 pm    Post subject: Adding custom buttons on ALV grid controls Reply with quote

Code:
***** DATA
* Predefine a local class for event handling to allow the
* declaration of a reference variable before the class is defined.
CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA:  custom_container1 TYPE REF TO cl_gui_custom_container,
       cont_on_main   TYPE scrfname VALUE 'ALV_GRID',
       grid1  TYPE REF TO cl_gui_alv_grid,
       event_receiver TYPE REF TO lcl_event_receiver,
       okcode LIKE sy-ucomm.

DATA:   gt_fieldcat         TYPE slis_t_fieldcat_alv,
        gt_fieldcat1        TYPE lvc_t_fcat,
        gs_layout           TYPE slis_layout_alv,
        gs_layout1          TYPE lvc_s_layo,
        gs_layout2          type disvariant,
        gs_print            TYPE slis_print_alv,
        gt_sort             TYPE slis_t_sortinfo_alv,
        gt_sp_group         TYPE slis_t_sp_group_alv,
        gt_events           TYPE slis_t_event,
        gt_list_top_of_page TYPE slis_t_listheader.

DATA:t_out TYPE TABLE OF zstruct,
     t_out_wa LIKE zstruct.

****************************************************************
* LOCAL CLASSES: Definition
****************************************************************
*===============================================================
* class lcl_event_receiver: local class to
*                         define and handle own functions.
*
* Definition:
* ~~~~~~~~~~~
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS:
    handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
            IMPORTING e_object e_interactive,

    handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
            IMPORTING e_ucomm.

  PRIVATE SECTION.

ENDCLASS.

****************************************************************
* LOCAL CLASSES: Implementation
****************************************************************
*===============================================================
* class lcl_event_receiver (Implementation)
*
*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_toolbar.
* § 2.In event handler method for event TOOLBAR: Append own functions
*   by using event parameter E_OBJECT.
    DATA: ls_toolbar  TYPE stb_button.
*....................................................................
* E_OBJECT of event TOOLBAR is of type REF TO CL_ALV_EVENT_TOOLBAR_SET.
* This class has got one attribute, namly MT_TOOLBAR, which
* is a table of type TTB_BUTTON. One line of this table is
* defined by the Structure STB_BUTTON (see data deklaration above).
*

* A remark to the flag E_INTERACTIVE:
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*         'e_interactive' is set, if this event is raised due to
*         the call of 'set_toolbar_interactive' by the user.
*         You can distinguish this way if the event was raised
*         by yourself or by ALV
*         (e.g. in method 'refresh_table_display').
*         An application of this feature is still unknown... :-)

* append a separator to normal toolbar
    CLEAR ls_toolbar.
    MOVE 3 TO ls_toolbar-butn_type.
    APPEND ls_toolbar TO e_object->mt_toolbar.
* append an icon to show booking table
    CLEAR ls_toolbar.
    MOVE 'COMMENT' TO ls_toolbar-function.
    MOVE icon_annotation TO ls_toolbar-icon.
    MOVE 'Insert Comment'(001) TO ls_toolbar-quickinfo.
    MOVE 'Notes'(004) TO ls_toolbar-text.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.
    MOVE 'MATNR' TO ls_toolbar-function.
    MOVE icon_material TO ls_toolbar-icon.
    MOVE 'View Material'(002) TO ls_toolbar-quickinfo.
    MOVE 'Material'(003) TO ls_toolbar-text.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.


  ENDMETHOD.
*-------------------------------------------------------------------
  METHOD handle_user_command.
* § 3.In event handler method for event USER_COMMAND: Query your
*   function codes defined in step 2 and react accordingly.

    DATA: lt_rows TYPE lvc_t_row.

    CASE e_ucomm.
      WHEN 'COMMENT'.
        CALL METHOD grid1->get_selected_rows
                 IMPORTING et_index_rows = lt_rows.

        CALL METHOD cl_gui_cfw=>flush.

        IF sy-subrc NE 0.
* add your handling, for example
          CALL FUNCTION 'POPUP_TO_INFORM'
               EXPORTING
                    titel = g_repid
                    txt2  = sy-subrc
                    txt1  = 'Error in Flush'(500).
        ELSE.
          PERFORM get_comment TABLES lt_rows.  “Perform action
        ENDIF.

      WHEN 'MATNR'.
        CALL METHOD grid1->get_selected_rows
                 IMPORTING et_index_rows = lt_rows.

        CALL METHOD cl_gui_cfw=>flush.

        IF sy-subrc NE 0.
* add your handling, for example
          CALL FUNCTION 'POPUP_TO_INFORM'
               EXPORTING
                    titel = g_repid
                    txt2  = sy-subrc
                    txt1  = 'Error in Flush'(500).
        ELSE.
        READ TABLE lt_rows INDEX 1.
        IF sy-subrc = 0.
             READ TABLE t_out INTO t_out_wa INDEX lt_rows-index.
             IF sy-subrc = 0.
                  SET PARAMETER ID 'MAT' FIELD t_out_wa-matnr.
                  CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN. "View Material
             ELSE.
                  MESSAGE i999(b1) WITH 'Entry not found!'.
             ENDIF.
        ELSE.
             MESSAGE i999(b1) WITH 'Please select a line first!'.
        ENDIF.
        ENDIF.
    ENDCASE.

  ENDMETHOD.                           "handle_user_command
*-----------------------------------------------------------------
ENDCLASS.
*
* lcl_event_receiver (Implementation)
*===================================================================

PBO
process before output.
 MODULE STATUS_2000.
 module init_data.
 module create_container.

*&---------------------------------------------------------------------*
*&      Module  create_container  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module create_container output.
  if custom_container1 is initial.
* create a custom container control for our ALV Control
    create object custom_container1
        exporting
            container_name = cont_on_main
        exceptions
            cntl_error = 1
            cntl_system_error = 2
            create_error = 3
            lifetime_error = 4
            lifetime_dynpro_dynpro_link = 5.
    if sy-subrc ne 0.
* add your handling, for example
      call function 'POPUP_TO_INFORM'
           exporting
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'The control could not be created'(001).
    endif.

* create an instance of alv control
    create object grid1
           exporting i_parent = custom_container1.

* allow to select single lines - Multilines = A
    gs_layout1-sel_mode = 'B'.

    t_out[] = t_out_mat[].
    gt_fieldcat1[] = gt_fieldcat[].
    gs_layout2-report = sy-repid.

* IS_VARIANT, I_SAVE and I_DEFAULT are used for maintaining variants
* for the users. The setting 'U' allows a user to create their own
* variant and save it. The setting 'X' enables the ZBOM report to fire
* up the report with the default setting for that user.
* IS_VARIANT just needs to contain the report name.
* ZSTRUCT needs to be a structure or table in the data dictionary.
* The data elements are used for the column headings of your table control.
* T_OUT is your table for data.
    call method grid1->set_table_for_first_display
         exporting i_structure_name = 'ZSTRUCT'
                   is_variant       = gs_layout2
                   i_save           = 'U'   "User may save variant
                   i_default        = 'X'   "Load variant automatically
                   is_layout        = gs_layout1
         changing  it_outtab        = t_out.

* ->Create Object to receive events and link them to handler methods.
* When the ALV Control raises the event for the specified instance
* the corresponding method is automatically called.
*
    create object event_receiver.
    set handler event_receiver->handle_user_command for grid1.
    set handler event_receiver->handle_toolbar for grid1.

* § 4.Call method 'set_toolbar_interactive' to raise event TOOLBAR.
    call method grid1->set_toolbar_interactive.
  endif.
  call method cl_gui_control=>set_focus exporting control = grid1.

endmodule.                 " create_container  OUTPUT
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ALV Grid / ALV Tree / ALV List All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.