Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

how to disable self defined button from ALV Toolbar when ok_code ='BACK'

Former Member
0 Likes
553

here is the code

CLASS Z_CL_6_U_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.

ENDCLASS.

CLASS Z_CL_6_U_EVENT_RECEIVER IMPLEMENTATION.

METHOD HANDLE_TOOLBAR.

DATA: LS_TOOLBAR TYPE STB_BUTTON.

IF G_FLAG = 'X' and ok_code = space.

CLEAR LS_TOOLBAR.

MOVE 0 TO LS_TOOLBAR-BUTN_TYPE.

MOVE 'UPDATE' TO LS_TOOLBAR-FUNCTION.

MOVE ICON_MODIFY TO LS_TOOLBAR-ICON.

MOVE 'Update Records'(111) TO LS_TOOLBAR-QUICKINFO.

MOVE ''(112) TO LS_TOOLBAR-TEXT.

MOVE ' ' TO LS_TOOLBAR-DISABLED.

APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

elseif ok_code = 'BACK'.

CLEAR LS_TOOLBAR.

LS_TOOLBAR-function = 'UPDATE'.

LS_TOOLBAR-butn_type = 0.

LS_TOOLBAR-icon = ICON_MODIFY.

LS_TOOLBAR-quickinfo = 'Update Records'.

LS_TOOLBAR-disabled = 'X'.

append LS_TOOLBAR TO <i><b>E_OBJECT</b></i>->MT_TOOLBAR.

ENDIF.

ENDMETHOD.

<i><b>ERROR COMES when ok_code is 'BACK'.

at this point E_OBJECT has null reference instead of ref to Class cl_ALV_EVENT_TOOLBAR_SET.</b></i>

tell me why this error coming.

pls help

here is the code

CLASS Z_CL_6_U_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.

ENDCLASS.

CLASS Z_CL_6_U_EVENT_RECEIVER IMPLEMENTATION.

METHOD HANDLE_TOOLBAR.

DATA: LS_TOOLBAR TYPE STB_BUTTON.

IF G_FLAG = 'X' and ok_code = space.

CLEAR LS_TOOLBAR.

MOVE 0 TO LS_TOOLBAR-BUTN_TYPE.

MOVE 'UPDATE' TO LS_TOOLBAR-FUNCTION.

MOVE ICON_MODIFY TO LS_TOOLBAR-ICON.

MOVE 'Update Records'(111) TO LS_TOOLBAR-QUICKINFO.

MOVE ''(112) TO LS_TOOLBAR-TEXT.

MOVE ' ' TO LS_TOOLBAR-DISABLED.

APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

elseif ok_code = 'BACK'.

CLEAR LS_TOOLBAR.

LS_TOOLBAR-function = 'UPDATE'.

LS_TOOLBAR-butn_type = 0.

LS_TOOLBAR-icon = ICON_MODIFY.

LS_TOOLBAR-quickinfo = 'Update Records'.

LS_TOOLBAR-disabled = 'X'.

append LS_TOOLBAR TO <i><b>E_OBJECT</b></i>->MT_TOOLBAR.

ENDIF.

ENDMETHOD.

<i><b>ERROR COMES when ok_code is 'BACK'.

at this point E_OBJECT has null reference instead of ref to Class cl_ALV_EVENT_TOOLBAR_SET.</b></i>

tell me why this error coming.

pls help

2 REPLIES 2
Read only

Former Member
0 Likes
487

Hi

That event shoul be triggered by the method set_toolbar_interactive, so you should display how you're triggering it.

Max

Read only

uwe_schieferstein
Active Contributor
0 Likes
487

Hello Neetu

To give you an example I have copied sample report BCALV_GRID_DEMO, added some code (search for <b>$Comment</b>) and modified the GUI-status <b>MAIN100</b> (replace function code EXIT with <b>BACK</b> for the F3 function).

Run the program and push several times the BACK button: one toolbar function after the other will be inactivated.

PROGRAM test.
DATA: ok_code LIKE sy-ucomm,
      gt_sflight TYPE TABLE OF sflight,
      g_container TYPE scrfname VALUE 'BCALV_GRID_DEMO_0100_CONT1',
      grid1  TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container.

<b>----


  • CLASS lcl_eventhandler DEFINITION

----


*

----


CLASS lcl_eventhandler DEFINITION.

PUBLIC SECTION.

CLASS-DATA:

md_cnt TYPE i.

CLASS-METHODS:

handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

IMPORTING

e_object

e_interactive

sender.

ENDCLASS. "lcl_eventhandler DEFINITION

----


  • CLASS lcl_eventhandler IMPLEMENTATION

----


*

----


CLASS lcl_eventhandler IMPLEMENTATION.

METHOD handle_toolbar.

DATA:

ls_button TYPE stb_button.

ADD 1 TO md_cnt. " a simple counter

LOOP AT e_object->mt_toolbar INTO ls_button FROM 1 TO md_cnt.

ls_button-disabled = 'X'.

MODIFY e_object->mt_toolbar FROM ls_button.

ENDLOOP.

ENDMETHOD. "handle_toolbar

ENDCLASS. "lcl_eventhandler IMPLEMENTATION</b>


START-OF-SELECTION.

*---------------------------------------------------------------------*
*       MAIN                                                          *
*---------------------------------------------------------------------*

  SELECT * FROM sflight INTO TABLE gt_sflight.

  CALL SCREEN 100.


*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
  SET PF-STATUS 'MAIN100'.
  IF g_custom_container IS INITIAL.
    CREATE OBJECT g_custom_container
           EXPORTING container_name = g_container.

*   Instantiate ALV grid control
    CREATE OBJECT grid1
           EXPORTING i_parent = g_custom_container.
    CALL METHOD grid1->set_table_for_first_display
      EXPORTING
        i_structure_name = 'SFLIGHT'
      CHANGING
        it_outtab        = gt_sflight.

<b>*$Comment: Set event handler for event TOOLBAR

SET HANDLER:

lcl_eventhandler=>handle_toolbar FOR grid1.

ENDIF.</b>




ENDMODULE.                    "PBO OUTPUT
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE pai INPUT.
*   to react on oi_custom_events:
  CALL METHOD cl_gui_cfw=>dispatch.
  CASE ok_code.
    WHEN 'EXIT'.
      PERFORM exit_program.

<b> WHEN 'BACK'.

  • $Comment: Toolbar can be modified on-the-fly

grid1->set_toolbar_interactive( ).</b>

    WHEN OTHERS.
*     do nothing
  ENDCASE.
  CLEAR ok_code.
ENDMODULE.                    "PAI INPUT
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM exit_program.
*  CALL METHOD G_CUSTOM_CONTAINER->FREE.
*  CALL METHOD CL_GUI_CFW=>FLUSH.
  LEAVE PROGRAM.
ENDFORM.                    "EXIT_PROGRAM

Regards

Uwe