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

Intearactive alv using oops

Former Member
0 Likes
848

Hi,

I have done an alv grid program using oops (like creating a container,grid into it ,calling a method etc).

Now can any one of you help me in creating the interactive for it to call MM03 screen,as i am new to this concept.

Regards,

Silpa.M

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
809

Hi Silpa,

In Interactive ALV, we have to explicitly handel the events. So we have to create a local class and in that we have to handel each event seperately. so i have created a local class EVENT_HANDEL and handeled the event DOUBLE_CLICK.

Container Object creation should be done in the PBO Of the screen, Now i have done the changes in the below code just check it.

Hope it will solve your problem.

Regards

Kumar M



DATA : GT_VBAK       TYPE TABLE OF VBAK,
       WA_VBAK       TYPE VBAK.

DATA : GT_FCAT       TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE.
DATA : MY_CONTAINER  TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA : GRID          TYPE REF TO CL_GUI_ALV_GRID.

*****************************************************************************************
* FOR HANDELING EVENTS WE HAVE TO RAISE THE EVENTS WITH LOCAL CLASS AND SET HANDELERS
*****************************************************************************************
CLASS EVENT_HANDEL DEFINITION.
  PUBLIC SECTION.
    METHODS : DB_CLICK FOR EVENT DOUBLE_CLICK  OF CL_GUI_ALV_GRID
                           IMPORTING E_ROW
                                     E_COLUMN.
ENDCLASS.                    "EVENT_HANDEL DEFINITION

*----------------------------------------------------------------------*
*       CLASS EVENT_HANDEL IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS EVENT_HANDEL IMPLEMENTATION.
  METHOD DB_CLICK.
    READ TABLE GT_VBAK INTO WA_VBAK INDEX E_ROW-INDEX.
    IF SY-SUBRC EQ 0.
      SET PARAMETER ID 'AUN' FIELD WA_VBAK-VBELN.
      CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDMETHOD.                    "DB_CLICK
ENDCLASS.                    "EVENT_HANDEL IMPLEMENTATION
DATA : EVENTS        TYPE REF TO EVENT_HANDEL.

START-OF-SELECTION.



  CALL SCREEN 200.

*&---------------------------------------------------------------------*
*&      Form  F_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_GET_DATA .

  SELECT * FROM VBAK INTO TABLE GT_VBAK
           UP TO 30 ROWS.

  CREATE OBJECT EVENTS.
  IF GRID IS INITIAL.
    CREATE OBJECT MY_CONTAINER
        EXPORTING
          CONTAINER_NAME              = 'CC1'
         EXCEPTIONS
          CNTL_ERROR                  = 1
          CNTL_SYSTEM_ERROR           = 2
          CREATE_ERROR                = 3
          LIFETIME_ERROR              = 4
          LIFETIME_DYNPRO_DYNPRO_LINK = 5
          OTHERS                      = 6.

    CREATE OBJECT GRID
      EXPORTING
        I_PARENT          =  MY_CONTAINER
       EXCEPTIONS
         ERROR_CNTL_CREATE = 1
         ERROR_CNTL_INIT   = 2
         ERROR_CNTL_LINK   = 3
         ERROR_DP_CREATE   = 4
         OTHERS            = 5.
    SET HANDLER : EVENTS->DB_CLICK   FOR GRID.
    CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME              = 'VBAK'
      CHANGING
        IT_OUTTAB                     = GT_VBAK
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
ENDFORM.                    " F_GET_DATA
*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'ZINTERACTIVE'.
  PERFORM F_GET_DATA.
ENDMODULE.                 " STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.

  CASE SY-UCOMM.
    WHEN 'BACK'.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0200  INPUT

7 REPLIES 7
Read only

jayanthi_jayaraman
Active Contributor
0 Likes
809

Hi,

Define a local class and then create an method for hot spot or double click for the material.Handle the events for the same. So that if it is clicked, then mm03 will be displayed.

Read only

Sm1tje
Active Contributor
0 Likes
809

As a reference, look at sample report:

BCALV_TEST_GRID_EVENTS

Read only

Former Member
0 Likes
809

Hi Silpa,

Check the below program, it is similiar



DATA : GT_VBAK       TYPE TABLE OF VBAK,
       WA_VBAK       TYPE VBAK.

DATA : GT_FCAT       TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE.
DATA : MY_CONTAINER  TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA : GRID          TYPE REF TO CL_GUI_ALV_GRID.

*****************************************************************************************
* FOR HANDELING EVENTS WE HAVE TO RAISE THE EVENTS WITH LOCAL CLASS AND SET HANDELERS
*****************************************************************************************
CLASS EVENT_HANDEL DEFINITION.
  PUBLIC SECTION.
    METHODS : DB_CLICK FOR EVENT DOUBLE_CLICK  OF CL_GUI_ALV_GRID
                           IMPORTING E_ROW
                                     E_COLUMN.
ENDCLASS.                    "EVENT_HANDEL DEFINITION

*----------------------------------------------------------------------*
*       CLASS EVENT_HANDEL IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS EVENT_HANDEL IMPLEMENTATION.
  METHOD DB_CLICK.
    READ TABLE GT_VBAK INTO WA_VBAK INDEX E_ROW-INDEX.
    IF SY-SUBRC EQ 0.
      SET PARAMETER ID 'AUN' FIELD WA_VBAK-VBELN.
      CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDMETHOD.                    "DB_CLICK
ENDCLASS.                    "EVENT_HANDEL IMPLEMENTATION
DATA : EVENTS        TYPE REF TO EVENT_HANDEL.

START-OF-SELECTION.

  PERFORM F_GET_DATA.

  CALL SCREEN 200.

*&---------------------------------------------------------------------*
*&      Form  F_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_GET_DATA .

  SELECT * FROM VBAK INTO TABLE GT_VBAK
           UP TO 30 ROWS.

  CREATE OBJECT EVENTS.
  IF GRID IS INITIAL.
    CREATE OBJECT MY_CONTAINER
        EXPORTING
          CONTAINER_NAME              = 'CC1'
         EXCEPTIONS
          CNTL_ERROR                  = 1
          CNTL_SYSTEM_ERROR           = 2
          CREATE_ERROR                = 3
          LIFETIME_ERROR              = 4
          LIFETIME_DYNPRO_DYNPRO_LINK = 5
          OTHERS                      = 6.

    CREATE OBJECT GRID
      EXPORTING
        I_PARENT          =  MY_CONTAINER
       EXCEPTIONS
         ERROR_CNTL_CREATE = 1
         ERROR_CNTL_INIT   = 2
         ERROR_CNTL_LINK   = 3
         ERROR_DP_CREATE   = 4
         OTHERS            = 5.
    SET HANDLER : EVENTS->DB_CLICK   FOR GRID.
    CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME              = 'VBAK'
      CHANGING
        IT_OUTTAB                     = GT_VBAK
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
ENDFORM.                    " F_GET_DATA
*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'ZINTERACTIVE'.
ENDMODULE.                 " STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.

  CASE SY-UCOMM.
    WHEN 'BACK'.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0200  INPUT

Regards

Kumar M.

Edited by: Kumar M on May 13, 2009 2:19 PM

Read only

Former Member
0 Likes
809

Hi Kumar ,

I have a small doubt in the program you have sent i.e, in CREATE OBJECT EVENTS.

you have declare he containe name as 'CC1' but you havent declared it and i found after executing the program there is no grid displayed inthe output(1st screen).Canyou kindly explain this.

Regards,

Silpa.

Read only

Former Member
0 Likes
810

Hi Silpa,

In Interactive ALV, we have to explicitly handel the events. So we have to create a local class and in that we have to handel each event seperately. so i have created a local class EVENT_HANDEL and handeled the event DOUBLE_CLICK.

Container Object creation should be done in the PBO Of the screen, Now i have done the changes in the below code just check it.

Hope it will solve your problem.

Regards

Kumar M



DATA : GT_VBAK       TYPE TABLE OF VBAK,
       WA_VBAK       TYPE VBAK.

DATA : GT_FCAT       TYPE TABLE OF LVC_S_FCAT WITH HEADER LINE.
DATA : MY_CONTAINER  TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA : GRID          TYPE REF TO CL_GUI_ALV_GRID.

*****************************************************************************************
* FOR HANDELING EVENTS WE HAVE TO RAISE THE EVENTS WITH LOCAL CLASS AND SET HANDELERS
*****************************************************************************************
CLASS EVENT_HANDEL DEFINITION.
  PUBLIC SECTION.
    METHODS : DB_CLICK FOR EVENT DOUBLE_CLICK  OF CL_GUI_ALV_GRID
                           IMPORTING E_ROW
                                     E_COLUMN.
ENDCLASS.                    "EVENT_HANDEL DEFINITION

*----------------------------------------------------------------------*
*       CLASS EVENT_HANDEL IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS EVENT_HANDEL IMPLEMENTATION.
  METHOD DB_CLICK.
    READ TABLE GT_VBAK INTO WA_VBAK INDEX E_ROW-INDEX.
    IF SY-SUBRC EQ 0.
      SET PARAMETER ID 'AUN' FIELD WA_VBAK-VBELN.
      CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDMETHOD.                    "DB_CLICK
ENDCLASS.                    "EVENT_HANDEL IMPLEMENTATION
DATA : EVENTS        TYPE REF TO EVENT_HANDEL.

START-OF-SELECTION.



  CALL SCREEN 200.

*&---------------------------------------------------------------------*
*&      Form  F_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_GET_DATA .

  SELECT * FROM VBAK INTO TABLE GT_VBAK
           UP TO 30 ROWS.

  CREATE OBJECT EVENTS.
  IF GRID IS INITIAL.
    CREATE OBJECT MY_CONTAINER
        EXPORTING
          CONTAINER_NAME              = 'CC1'
         EXCEPTIONS
          CNTL_ERROR                  = 1
          CNTL_SYSTEM_ERROR           = 2
          CREATE_ERROR                = 3
          LIFETIME_ERROR              = 4
          LIFETIME_DYNPRO_DYNPRO_LINK = 5
          OTHERS                      = 6.

    CREATE OBJECT GRID
      EXPORTING
        I_PARENT          =  MY_CONTAINER
       EXCEPTIONS
         ERROR_CNTL_CREATE = 1
         ERROR_CNTL_INIT   = 2
         ERROR_CNTL_LINK   = 3
         ERROR_DP_CREATE   = 4
         OTHERS            = 5.
    SET HANDLER : EVENTS->DB_CLICK   FOR GRID.
    CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME              = 'VBAK'
      CHANGING
        IT_OUTTAB                     = GT_VBAK
      EXCEPTIONS
        INVALID_PARAMETER_COMBINATION = 1
        PROGRAM_ERROR                 = 2
        TOO_MANY_LINES                = 3
        OTHERS                        = 4.
    IF SY-SUBRC <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
  ENDIF.
ENDFORM.                    " F_GET_DATA
*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'ZINTERACTIVE'.
  PERFORM F_GET_DATA.
ENDMODULE.                 " STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.

  CASE SY-UCOMM.
    WHEN 'BACK'.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0200  INPUT

Read only

Former Member
0 Likes
809

Hi Kumar,

Thanks for ur post .it has solved my problem.Also thanks to all who tried solve my query.

Read only

Former Member
0 Likes
809

Hi Try this code,

DATA: it_index_rows TYPE lvc_t_row,

w_index_rows TYPE LINE OF lvc_t_row.

CALL METHOD grid1->get_selected_rows

IMPORTING

et_index_rows = it_index_rows[].

IF it_index_rows[] IS INITIAL.

MESSAGE s005(umg).

RETURN.

ENDIF.

loop at it_index_rows into wa_index_rows.

read table <final interanl table > into <wa> index wa_index_rows-index.

set parameter id <ID> field <field> .

call transcation <tcode> and skip first screen.

endloop.

OR

FORM form_me23n USING ucomm TYPE sy-ucomm

selfield TYPE slis_selfield.

DATA: wl_ebeln TYPE ekko-ebeln.

CASE selfield-fieldname.

WHEN c_ebeln.

CLEAR: wl_ebeln.

CLEAR wa_my.

READ TABLE i_my INTO wa_my INDEX selfield-tabindex.

IF sy-subrc = 0.

wl_ebeln = wa_my-ebeln.

SET PARAMETER ID c_bes FIELD wl_ebeln.

ENDIF.

CALL TRANSACTION c_me23n AND SKIP FIRST SCREEN.

ENDCASE.

ENDFORM.