Monday, November 7, 2011

Sample Code for Interactive ALV using OOPS

  *&---------------------------------------------------------------------*
*& Report  ZALV5
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zalv5 NO STANDARD PAGE HEADING.

TABLESvbak,
        vbap.

TYPESBEGIN OF ty_vbak,
       vbeln TYPE vbeln_va,
       erdat TYPE erdat,
       ernam TYPE ernam,
       netwr TYPE netwr_ak,
       END OF ty_vbak,

       BEGIN OF ty_vbap,
       vbeln TYPE vbeln_va,
       posnr TYPE posnr_va,
       matnr TYPE matnr,
       matkl TYPE matkl,
       END OF ty_vbap.

DATAit_vbak TYPE STANDARD TABLE OF ty_vbak,
      wa_vbak TYPE ty_vbak,
      it_vbap TYPE STANDARD TABLE OF ty_vbap,
      wa_vbap TYPE ty_vbap.

DATAit_fcat        TYPE lvc_t_fcat,
      it_fcat2       TYPE lvc_t_fcat,
      wa_fcat        TYPE lvc_s_fcat,
      wa_layo        TYPE lvc_s_layo.

DATAgrid       TYPE REF TO cl_gui_alv_grid,
      grid2      TYPE REF TO cl_gui_alv_grid,
      cust_cont  TYPE REF TO cl_gui_custom_container,
      cust_cont2 TYPE REF TO cl_gui_custom_container.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
  SELECT-OPTIONSs_vbeln for vbak-vbeln.
SELECTION-SCREEN END OF BLOCK b1.

CLASS cl_interactive DEFINITION.
  PUBLIC SECTION.
  METHODShandle_double_click
           FOR EVENT double_click of cl_gui_alv_grid IMPORTING e_row.
ENDCLASS.

CLASS cl_interactive IMPLEMENTATION.
  METHOD handle_double_click.
    READ TABLE it_vbak INDEX e_row-index into wa_vbak.
    PERFORM getvbap.
    CALL SCREEN 104.
  ENDMETHOD.
ENDCLASS.

DATAevent_receiver TYPE REF TO cl_interactive.
INITIALIZATION.

START-OF-SELECTION.
CALL SCREEN 103.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0103  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module STATUS_0103 output.
  SET PF-STATUS 'STATUS_VBAK'.
  SET TITLEBAR 'TITLE1'.

  IF cust_cont IS INITIAL.
    CREATE OBJECT cust_cont
      EXPORTING
        container_name              'CONTAINER1'.

    CREATE OBJECT grid
      EXPORTING
        i_parent          cust_cont.

    PERFORM getvbak.
    PERFORM layout.
    PERFORM fieldcatalog.
    PERFORM display_vbak.
  ELSE.
    CALL METHOD grid->refresh_table_display.
  ENDIF.

endmodule.                 " STATUS_0103  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0103  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module USER_COMMAND_0103 input.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
endmodule.                 " USER_COMMAND_0103  INPUT
*&---------------------------------------------------------------------*
*&      Form  GETVBAK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form GETVBAK .
  SELECT vbeln
         erdat
         ernam
         netwr FROM vbak
         INTO CORRESPONDING FIELDS OF TABLE it_vbak
         WHERE vbeln in s_vbeln.
endform.                    " GETVBAK
*&---------------------------------------------------------------------*
*&      Form  GETVBAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form GETVBAP .
  SELECT *
          FROM vbap
          INTO CORRESPONDING FIELDS OF TABLE it_vbap
          WHERE vbeln wa_vbak-vbeln.
endform.                    " GETVBAP
*&---------------------------------------------------------------------*
*&      Form  LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form LAYOUT .
  wa_layo-grid_title      'Sales Header Data'.
  wa_layo-cwidth_opt 'X'.
  wa_layo-zebra      'X'.
endform.                    " LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form FIELDCATALOG .
  REFRESH it_fcat.
  CLEAR   wa_fcat.

  wa_fcat-fieldname 'VBELN'.
  wa_fcat-col_pos   1.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Sales Document'.
  APPEND wa_fcat to it_fcat.

  wa_fcat-fieldname 'ERDAT'.
  wa_fcat-col_pos   2.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Date'.
  append wa_fcat to it_fcat.

  wa_fcat-fieldname 'ERNAM'.
  wa_fcat-col_pos   3.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Name'.
  append wa_fcat to it_fcat.

  wa_fcat-fieldname 'NETWR'.
  wa_fcat-col_pos   4.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Net Value'.
  append wa_fcat to it_fcat.

endform.                    " FIELDCATALOG
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_VBAK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form DISPLAY_VBAK .
  CALL METHOD grid->set_table_for_first_display
    EXPORTING
      is_layout                     wa_layo
    CHANGING
      it_outtab                     it_vbak
      it_fieldcatalog               it_fcat.

  CREATE OBJECT event_receiver.
  SET HANDLER event_receiver->handle_double_click for grid.

endform.                    " DISPLAY_VBAK
*&---------------------------------------------------------------------*
*&      Module  STATUS_0104  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module STATUS_0104 output.
  SET PF-STATUS 'STATUS_VBAP'.
  SET TITLEBAR 'TITLE2'.

  IF cust_cont2 IS INITIAL.
    CREATE OBJECT cust_cont2
      EXPORTING
        container_name              'CONTAINER2'.

    CREATE OBJECT grid2
      EXPORTING
        i_parent          cust_cont2.

    PERFORM fieldcatalog_2.
    PERFORM layout_2.
    PERFORM display_2.
  ELSE.
    CALL METHOD grid2->refresh_table_display.

  ENDIF.
endmodule.                 " STATUS_0104  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0104  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module USER_COMMAND_0104 input.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 103.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    ENDCASE.
endmodule.                 " USER_COMMAND_0104  INPUT
*&---------------------------------------------------------------------*
*&      Form  FIELDCATALOG_2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form FIELDCATALOG_2 .
  REFRESH it_fcat2.
  CLEAR   wa_fcat.

  wa_fcat-fieldname 'VBELN'.
  wa_fcat-col_pos   1.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Sales Document'.
  APPEND wa_fcat to it_fcat2.

  wa_fcat-fieldname 'POSNR'.
  wa_fcat-col_pos   2.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Sales Doc. Item'.
  append wa_fcat to it_fcat2.

  wa_fcat-fieldname 'MATNR'.
  wa_fcat-col_pos   3.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Material No.'.
  append wa_fcat to it_fcat2.

  wa_fcat-fieldname 'MATKL'.
  wa_fcat-col_pos   4.
  wa_fcat-outputlen 15.
  wa_fcat-coltext      'Material Group'.
  append wa_fcat to it_fcat2.
endform.                    " FIELDCATALOG_2
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form LAYOUT_2 .
  wa_layo-grid_title      'Sales Item Data'.
  wa_layo-cwidth_opt 'X'.
  wa_layo-zebra      'X'.
endform.                    " LAYOUT_2
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form DISPLAY_2 .
  CALL METHOD grid2->set_table_for_first_display
    EXPORTING
      is_layout                     wa_layo
    CHANGING
      it_outtab                     it_vbap
      it_fieldcatalog               it_fcat2.

endform.                    " DISPLAY_2

Output:
After providing the input...

Double clicking Sales Document 179... we get the Sales Item Information



No comments:

Post a Comment