Thursday, August 11, 2011

Interactive ALV using Class

Interactive ALV Report using Class by implementing Double click Event.The sample code is follows:

 1.Create a program with 2 screens and custom container to hold ALV.

*** Tables
TABLES : vbak,vbap.
***Class definition for handling double click
CLASS event_class DEFINITION DEFERRED.

*** Internal table and work area declarations
DATA : it_vbak TYPE TABLE OF vbak,
       wa_vbak TYPE vbak,
       it_vbap TYPE TABLE OF vbap,
       wa_vbap TYPE vbap.

*** data declarations for ALV Main list
DATA : ty_lay1 TYPE lvc_s_layo,
       it_fcat1 TYPE lvc_t_fcat ,
       ty_fcat1 TYPE lvc_s_fcat ,
       c_alv1 TYPE REF TO cl_gui_alv_grid,
       c_cont1 TYPE REF TO cl_gui_custom_container,
       event_receiver TYPE REF TO event_class.

*** data declarations for ALV Interactive list
DATA : ty_lay2 TYPE lvc_s_layo,
       it_fcat2 TYPE lvc_t_fcat ,
       ty_fcat2 TYPE lvc_s_fcat ,
       c_alv2 TYPE REF TO cl_gui_alv_grid,
       c_cont2 TYPE REF TO cl_gui_custom_container.

**Select options for multiple values and NOT ranges
SELECT-OPTIONS : s_AUDAT FOR vbak-AUDAT .

START-OF-SELECTION.

CALL SCREEN 100.

*** class definiotion
CLASS event_class DEFINITION.
  PUBLIC SECTION.
  METHODS:
    handle_double_click
    FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row.
    ENDCLASS.

*** Class implementation
CLASS event_class IMPLEMENTATION.
    METHOD handle_double_click.

    READ TABLE it_vbak INDEX e_row-index INTO wa_vbak.

    SELECT * FROM vbap INTO CORRESPONDING FIELDS OF TABLE it_vbap
    WHERE vbeln EQ wa_vbak-vbeln.

*calling the ALV containing the field values
    CALL SCREEN 101.
    ENDMETHOD.
    ENDCLASS.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module STATUS_0100 output.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.

endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PROCESS_MAIL_LIST  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module PROCESS_MAIL_LIST output.

SELECT * from vbak INTO TABLE it_vbak where AUDAT in s_AUDAT.

***Check if there is no custom container in screen 100
  IF c_cont1 IS INITIAL.
***Creating object of container
    CREATE OBJECT c_cont1
     EXPORTING
       container_name = 'CCONT'.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
***Creating object of alv
    CREATE OBJECT c_alv1
       EXPORTING
        i_parent = c_cont1.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
***alv layout
    PERFORM alv_100_layout.

***alv field catalogue
    PERFORM alv_100_fieldcat.
***Displaying the ALV grid
    CALL METHOD c_alv1->set_table_for_first_display
      EXPORTING
        is_layout       = ty_lay1
      CHANGING
        it_outtab       = it_vbak[]
        it_fieldcatalog  = it_fcat1.
   IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
***Create object of the event class and setting handler for double click
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_double_click FOR c_alv1.
   ENDIF.
endmodule.                 " PROCESS_MAIL_LIST  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  ALV_100_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form ALV_100_LAYOUT .
  ty_lay1-grid_title = 'Sale Order Header Details'.
  ty_lay1-zebra = 'X'.
  ty_lay1-no_toolbar = 'X'.
endform.                    " ALV_100_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form ALV_100_FIELDCAT .

  CLEAR ty_fcat1.
  ty_fcat1-row_pos = 1.
  ty_fcat1-col_pos = 1.
  ty_fcat1-fieldname = 'VBELN'.
  ty_fcat1-tabname = 'VBAK'.
  ty_fcat1-coltext = 'Sale Order'.
  ty_fcat1-outputlen = 10.
  APPEND ty_fcat1 TO it_fcat1.

  CLEAR ty_fcat1.
  ty_fcat1-row_pos = 1.
  ty_fcat1-col_pos = 2.
  ty_fcat1-fieldname = 'AUDAT'.
  ty_fcat1-tabname = 'VBAK'.
  ty_fcat1-coltext = 'Document Date'.
  ty_fcat1-outputlen = 10.
  APPEND ty_fcat1 TO it_fcat1.

  CLEAR ty_fcat1.
  ty_fcat1-row_pos = 1.
  ty_fcat1-col_pos = 3.
  ty_fcat1-fieldname = 'VKORG'.
  ty_fcat1-tabname = 'VBAK'.
  ty_fcat1-coltext = 'Sales Org.'.
  ty_fcat1-outputlen = 10.
  APPEND ty_fcat1 TO it_fcat1.

  CLEAR ty_fcat1.
  ty_fcat1-row_pos = 1.
  ty_fcat1-col_pos = 4.
  ty_fcat1-fieldname = 'VTWEG'.
  ty_fcat1-tabname = 'VBAK'.
  ty_fcat1-coltext = 'Distr. Channel'.
  ty_fcat1-outputlen = 10.
  APPEND ty_fcat1 TO it_fcat1.

  CLEAR ty_fcat1.
  ty_fcat1-row_pos = 1.
  ty_fcat1-col_pos = 5.
  ty_fcat1-fieldname = 'SPART'.
  ty_fcat1-tabname = 'VBAK'.
  ty_fcat1-coltext = 'Division'.
  ty_fcat1-outputlen = 10.
  APPEND ty_fcat1 TO it_fcat1.

endform.                    " ALV_100_FIELDCAT
*&---------------------------------------------------------------------*
*&      Module  PROCESS_INTERACTIVE_LIST  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module PROCESS_INTERACTIVE_LIST output.
*Check if the Custom container exists.
  IF c_cont2 IS INITIAL.
***Creating container object
    CREATE OBJECT c_cont2
      EXPORTING
        container_name = 'CDCONT'.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
***creating ALV grid for interactive list
    CREATE OBJECT c_alv2
      EXPORTING
       i_parent = c_cont2.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
***ALV layout
    PERFORM alv_101_layout.
***ALV fieldcatalogue
    PERFORM alv_101_fieldcat.
*ALV for display field details
    CALL METHOD c_alv2->set_table_for_first_display
      EXPORTING
        is_layout       = ty_lay2
      CHANGING
        it_outtab       = it_vbap[]
        it_fieldcatalog = it_fcat2.
    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.
endmodule.                 " PROCESS_INTERACTIVE_LIST  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  ALV_101_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form ALV_101_LAYOUT .
  ty_lay2-grid_title = 'Sale Order Item Details'.
  ty_lay2-zebra = 'X'.
  ty_lay2-no_toolbar = 'X'.
endform.                    " ALV_101_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  ALV_101_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form ALV_101_FIELDCAT .
  REFRESH it_fcat2.
  CLEAR ty_fcat2.
  ty_fcat2-row_pos = 1.
  ty_fcat2-col_pos = 1.
  ty_fcat2-fieldname = 'VBELN'.
  ty_fcat2-tabname = 'VBAP'.
  ty_fcat2-coltext = 'Sales Document'.
  ty_fcat2-outputlen = 10.
  APPEND ty_fcat2 TO it_fcat2.

  ty_fcat2-row_pos = 1.
  ty_fcat2-col_pos = 2.
  ty_fcat2-fieldname = 'POSNR'.
  ty_fcat2-tabname = 'VBAP'.
  ty_fcat2-coltext = 'Item'.
  ty_fcat2-outputlen = 10.
  APPEND ty_fcat2 TO it_fcat2.

  ty_fcat2-row_pos = 1.
  ty_fcat2-col_pos = 3.
  ty_fcat2-fieldname = 'MATNR'.
  ty_fcat2-tabname = 'VBAP'.
  ty_fcat2-coltext = 'Material'.
  ty_fcat2-outputlen = 10.
  APPEND ty_fcat2 TO it_fcat2.

    ty_fcat2-row_pos = 1.
  ty_fcat2-col_pos = 3.
  ty_fcat2-fieldname = 'ARKTX'.
  ty_fcat2-tabname = 'VBAP'.
  ty_fcat2-coltext = 'Material Des'.
  ty_fcat2-outputlen = 25.
  APPEND ty_fcat2 TO it_fcat2.

      ty_fcat2-row_pos = 1.
  ty_fcat2-col_pos = 3.
  ty_fcat2-fieldname = 'NETWR'.
  ty_fcat2-tabname = 'VBAP'.
  ty_fcat2-coltext = 'Net.Value'.
  ty_fcat2-outputlen = 10.
  APPEND ty_fcat2 TO it_fcat2.

endform.                    " ALV_101_FIELDCAT




No comments:

Post a Comment