Saturday, January 6, 2018

OOPS ALV Events

REPORT ZOOPS_EVENT_REPORT NO STANDARD PAGE HEADING.

**********Structure Declaration.
TYPES BEGIN OF TY_EKKO,
                  EBELN  TYPE EBELN,
                  BUKRS  TYPE BUKRS,
                  BSTYP   TYPE EBSTYP,
                  BSART   TYPE ESART,
                  LIFNR    TYPE LIFNR,
               END OF TY_EKKO,

               BEGIN OF TY_EKPO,
                 EBELN   TYPE EBELN,
                 EBELP    TYPE EBELP,
                 TXZ01    TYPE TXZ01,
                 MATNR  TYPE MATNR,
                 WERKS  TYPE EWERK,
                 MENGE  TYPE BSTMG,
                 MEINS    TYPE BSTME,
                 NETPR    TYPE BPREI,
                 NETWR  TYPE BWERT,
             END OF TY_EKPO,

            BEGIN OF TY_FINAL,
              CHK      TYPE CHAR1,
              EBELN  TYPE EBELN,
              BUKRS TYPE BUKRS,
              LIFNR   TYPE LIFNR,
              EBELP   TYPE EBELP,
              TXZ01   TYPE TXZ01,
              MATNR TYPE MATNR,
              MENGE TYPE BSTMG,
              MEINS  TYPE BSTME,
              NETPR  TYPE BPREI,
           END OF TY_FINAL.

**********Internal Table Declaration.
DATA T_EKKO   TYPE STANDARD TABLE OF TY_EKKO INITIAL SIZE 1,
              T_EKPO   TYPE STANDARD TABLE OF TY_EKPO INITIAL SIZE 1,
              T_FINAL  TYPE STANDARD TABLE OF TY_FINAL INITIAL SIZE 1,
              T_FINAL2 TYPE STANDARD TABLE OF TY_FINAL INITIAL SIZE 1,
              T_DOWN   TYPE STANDARD TABLE OF TY_FINAL INITIAL SIZE 1,
              T_FCAT1  TYPE STANDARD TABLE OF LVC_S_FCAT,
              T_FCAT   TYPE STANDARD TABLE OF LVC_S_FCAT.

*********Workarea Declaration.
DATA W_EKKO   TYPE TY_EKKO,
              W_EKPO   TYPE TY_EKPO,
              W_FINAL  TYPE TY_FINAL,
              W_FINAL2 TYPE TY_FINAL,
              W_DOWN   TYPE TY_FINAL,
              W_FCAT   TYPE LVC_S_FCAT,
              W_FCAT1  TYPE LVC_S_FCAT,
              W_LAYOUT TYPE LVC_S_LAYO.

*********Constant Declaration.
DATA LV_EBELN TYPE EKKO-EBELN,
              P_COL    TYPE INT2.

*********
DATA GCL_CUS_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
              GCL_ALV_GRID      TYPE REF TO CL_GUI_ALV_GRID.

*********INITIALIZATION Event.
INITIALIZATION.
  REFRESH T_EKKO,
                      T_EKPO,
                      T_FINAL.

  CLEAR W_EKKO,
                  W_EKPO,
                  W_FINAL.

*********Selection Screen.
  SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE TEXT-001.
         SELECT-OPTIONS S_EBELN FOR LV_EBELN.
  SELECTION-SCREEN END OF BLOCK A.

*&---------------------------------------------------------------------*
*&      Form  GET_EKKO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
CLASS EVENT DEFINITION.

  PUBLIC SECTION.
************TOOLBAR Event for Adding Button.
    METHODS ADD_TOOL_BAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
      IMPORTING E_OBJECT,

************User Command Event for Save Data.
      HANDLER_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
        IMPORTING E_UCOMM.

************Double Click Event .
  METHODSHANDLER_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
           IMPORTING E_ROW E_COLUMN.

  PRIVATE SECTION.
    DATA LS_STB_BUTTON TYPE STB_BUTTON,
           LV_UCOMM      TYPE SY-UCOMM.

ENDCLASS.

CLASS EVENT IMPLEMENTATION.
*******Implement TOOLBAR Event.
  METHOD ADD_TOOL_BAR .
*******Add Download Button.
******This Information Available for ICON Data Base Table**********.
    LS_STB_BUTTON-FUNCTION 'DOWN'.       "Function Code.
    LS_STB_BUTTON-ICON '@DJ@'.           "Icon Code
    LS_STB_BUTTON-BUTN_TYPE 0.           "Button Type (Normal)
    LS_STB_BUTTON-QUICKINFO 'Download'.  "Sort Test.
    LS_STB_BUTTON-TEXT 'Download'.       "Button Text.

    APPEND LS_STB_BUTTON TO E_OBJECT->MT_TOOLBAR.
    CLEAR LS_STB_BUTTON.

  ENDMETHOD.

**********Implement USER_COMMAND Event.
  METHOD HANDLER_USER_COMMAND.
    IF E_UCOMM 'DOWN'.
      PERFORM DOWNLOAD_DATA.
    ENDIF.
  ENDMETHOD.

**********Implementation Doubel Click Event
  METHOD HANDLER_DOUBLE_CLICK.
    PERFORM DOUBLE_CLICK USING E_ROW E_COLUMN.
  ENDMETHOD.

ENDCLASS.


START-OF-SELECTION.
  PERFORM GET_EKKO.
  PERFORM GET_EKPO.

END-OF-SELECTION.
  PERFORM GET_POP_FINAL.
  PERFORM CUSTOM_CONTANER.

*&---------------------------------------------------------------------*
*&      Form  GET_EKKO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_EKKO .
  SELECT EBELN
                BUKRS
                BSTYP
                BSART
                LIFNR
    FROM EKKO INTO TABLE T_EKKO WHERE EBELN IN S_EBELN.

  IF T_EKKO IS INITIAL.
    MESSAGE 'Data Not Found' TYPE 'E' DISPLAY LIKE 'I'.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GET_EKPO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_EKPO .
  IF T_EKKO IS NOT INITIAL.
    SELECT EBELN
                  EBELP
                  TXZ01
                  MATNR
                  WERKS
                  MENGE
                  MEINS
                  NETPR
                  NETWR
      FROM EKPO INTO TABLE T_EKPO FOR ALL ENTRIES IN T_EKKO
      WHERE EBELN T_EKKO-EBELN.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GET_POP_FINAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_POP_FINAL .
  SORT T_EKPO BY EBELN.
  SORT T_EKKO BY EBELN.

  CLEAR W_EKPO.
  LOOP AT T_EKPO INTO W_EKPO.
    W_FINAL-EBELN W_EKPO-EBELN.
    W_FINAL-EBELP W_EKPO-EBELP.
    W_FINAL-MEINS W_EKPO-MEINS.
    W_FINAL-MATNR W_EKPO-MATNR.
    W_FINAL-TXZ01 W_EKPO-TXZ01.
    W_FINAL-MENGE W_FINAL-MENGE + W_EKPO-MENGE.
    W_FINAL-NETPR W_FINAL-NETPR + W_EKPO-NETPR.

    READ TABLE T_EKKO INTO W_EKKO WITH KEY EBELN W_EKPO-EBELN BINARY SEARCH.
    IF SY-SUBRC 0.
      W_FINAL-LIFNR W_EKKO-LIFNR.
      W_FINAL-BUKRS W_EKKO-BUKRS.
    ENDIF.

    AT END OF EBELN.
      APPEND W_FINAL TO T_FINAL.
      CLEAR W_FINAL.
    ENDAT.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CUSTOM_CONTANER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CUSTOM_CONTANER .
  CALL SCREEN 9001.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
  SET PF-STATUS 'ZSTATUS_9001'.
  SET TITLEBAR 'ZTITLE_9001'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  FILL_FIELDCAT  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE FILL_FIELDCAT OUTPUT.

  PERFORM FILL_FIELDCAT USING P_COL 'CHK' ' ' 'X' 'X' 'X' '1' ' ',
                                                          P_COL 'EBELN' 'Purchase Doc.No' ' ' ' ' ' ' ' ' 'X',
                                                          P_COL 'EBELP' 'Item No' ' ' ' ' ' ' ' ' ' ',
                                                          P_COL 'BUKRS' 'Company Code' ' ' ' ' ' ' ' ' ' ',
                                                          P_COL 'LIFNR' 'Vendor' ' ' ' ' ' ' ' ' ' ',
                                                          P_COL 'MATNR' 'Material No' ' ' ' ' ' ' ' ' ' ',
                                                P_COL 'TXZ01' 'Material Description' ' ' ' ' ' ' ' ' ' ',
                                                         P_COL 'MENGE' 'Quantity' ' ' ' ' 'X' ' ' ' ',
                                                         P_COL 'MEINS' 'Uom' ' ' ' ' ' ' ' ' ' ',
                                                         P_COL 'NETPR' 'Price' ' ' ' ' 'X' ' ' ' '.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
  IF SY-UCOMM 'BACK' OR SY-UCOMM 'EXIT' OR SY-UCOMM 'CANCEL'.
    LEAVE TO SCREEN 1.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Form  FILL_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FILL_FIELDCAT USING P_COL
                           P_FIELD TYPE CHAR20
                           P_DES   TYPE CHAR40
                           P_KEY   TYPE CHAR1
                           P_CHEK  TYPE CHAR1
                           P_EDIT  TYPE CHAR4
                           P_LENTH TYPE INT2
                           P_HOTSP TYPE CHAR1.

  W_FCAT-COL_POS   P_COL.
  W_FCAT-FIELDNAME P_FIELD.
  W_FCAT-COLTEXT   P_DES.
  W_FCAT-KEY       P_KEY.
  W_FCAT-CHECKBOX  P_CHEK.
  W_FCAT-EDIT      P_EDIT.
  W_FCAT-OUTPUTLEN P_LENTH.
  W_FCAT-HOTSPOT   P_HOTSP.
  APPEND W_FCAT TO T_FCAT.
  CLEAR W_FCAT.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  DISPLAY_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE DISPLAY_DATA OUTPUT.

  W_LAYOUT-CWIDTH_OPT 'X'.
  W_LAYOUT-EDIT_MODE 'X'.
  W_LAYOUT-ZEBRA 'X'.

  DATA OBJ_EVENT TYPE REF TO EVENT.

*********Create Object for Container.
  CREATE OBJECT GCL_CUS_CONTAINER
    EXPORTING
*     PARENT                      = PARENT
      CONTAINER_NAME              'CC'
*     STYLE                       = STYLE
*     LIFETIME                    = lifetime_default
*     REPID                       = REPID
*     DYNNR                       = DYNNR
*     NO_AUTODEF_PROGID_DYNNR     = NO_AUTODEF_PROGID_DYNNR
    EXCEPTIONS
      CNTL_ERROR                  1
      CNTL_SYSTEM_ERROR           2
      CREATE_ERROR                3
      LIFETIME_ERROR              4
      LIFETIME_DYNPRO_DYNPRO_LINK 5
      OTHERS                      6.

*********Create Object for Event Class.
  CREATE OBJECT OBJ_EVENT.

**********Create Object for Display Data.
  CREATE OBJECT GCL_ALV_GRID
    EXPORTING
      I_PARENT          GCL_CUS_CONTAINER
    EXCEPTIONS
      ERROR_CNTL_CREATE 1
      ERROR_CNTL_INIT   2
      ERROR_CNTL_LINK   3
      ERROR_DP_CREATE   4
      OTHERS            5.

*********Register Event.
*&----Register TOOLBAR Event.
  SET HANDLER OBJ_EVENT->ADD_TOOL_BAR FOR GCL_ALV_GRID.
*&----Register USER_COMMAND Event.
  SET HANDLER OBJ_EVENT->HANDLER_USER_COMMAND FOR GCL_ALV_GRID.
*&----Register DOUBLE_CLICK Event.
  SET HANDLER OBJ_EVENT->HANDLER_DOUBLE_CLICK FOR GCL_ALV_GRID.

**********Dispaly Data using Method.
  GCL_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY(
    EXPORTING
      I_SAVE                        'X'
      I_DEFAULT                     'X'
     IS_LAYOUT                     W_LAYOUT
    CHANGING
      IT_OUTTAB                     T_FINAL
      IT_FIELDCATALOG               T_FCAT
    EXCEPTIONS
      INVALID_PARAMETER_COMBINATION 1
      PROGRAM_ERROR                 2
      TOO_MANY_LINES                3
         ).

ENDMODULE.

*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_SY_UCOMM  text
*----------------------------------------------------------------------*
FORM DOWNLOAD_DATA.

  DATA FILENAME TYPE STRING.
  DATA PROGRAM_NAME  TYPE SY-REPID.
  DATA FILE_NAME     TYPE IBIPPARMS-PATH.

*******Get Selected Record.
  LOOP AT T_FINAL INTO W_FINAL WHERE CHK 'X'.
    W_DOWN-EBELN W_FINAL-EBELN.
    W_DOWN-BUKRS W_FINAL-BUKRS.
    W_DOWN-LIFNR W_FINAL-LIFNR.
    W_DOWN-EBELP W_FINAL-EBELP.
    W_DOWN-TXZ01 W_FINAL-TXZ01.
    W_DOWN-MATNR W_FINAL-MATNR.
    W_DOWN-MENGE W_FINAL-MENGE.
    W_DOWN-MEINS W_FINAL-MEINS.
    W_DOWN-NETPR W_FINAL-NETPR.
    APPEND W_DOWN TO T_DOWN.
    CLEAR W_DOWN.
  ENDLOOP.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME PROGRAM_NAME
*     DYNPRO_NUMBER       = SYST-DYNNR
*     FIELD_NAME   = ' '
    IMPORTING
      FILE_NAME    FILE_NAME.

  FILENAME FILE_NAME.

************Download Data
  CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD(
    EXPORTING
       FILENAME                  FILENAME
       FILETYPE                  'ASC'
       WRITE_FIELD_SEPARATOR     'X'
    CHANGING
      DATA_TAB                  T_DOWN
    EXCEPTIONS
      FILE_WRITE_ERROR          1
      NO_BATCH                  2
      GUI_REFUSE_FILETRANSFER   3
      INVALID_TYPE              4
      NO_AUTHORITY              5
      UNKNOWN_ERROR             6
      HEADER_NOT_ALLOWED        7
      SEPARATOR_NOT_ALLOWED     8
      FILESIZE_NOT_ALLOWED      9
      HEADER_TOO_LONG           10
      DP_ERROR_CREATE           11
      DP_ERROR_SEND             12
      DP_ERROR_WRITE            13
      UNKNOWN_DP_ERROR          14
      ACCESS_DENIED             15
      DP_OUT_OF_MEMORY          16
      DISK_FULL                 17
      DP_TIMEOUT                18
      FILE_NOT_FOUND            19
      DATAPROVIDER_EXCEPTION    20
      CONTROL_FLUSH_ERROR       21
      NOT_SUPPORTED_BY_GUI      22
      ERROR_NO_GUI              23
         ).
  IF SY-SUBRC 0.
    MESSAGE 'Download Data Sucessfully...!' TYPE 'S'.
  ENDIF.

********Delete Selected Record.
  DELETE T_FINAL WHERE CHK 'X'.

***********Refresh Internal Table Data.
  GCL_ALV_GRID->REFRESH_TABLE_DISPLAY(
    EXPORTING
      I_SOFT_REFRESH 'X'
    EXCEPTIONS
      FINISHED       1
         ).
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_ROW  text
*      -->P_E_COLUMN  text
*----------------------------------------------------------------------*
FORM DOUBLE_CLICK  USING  E_ROW TYPE LVC_S_ROW
                          E_COLUMN TYPE LVC_S_COL.

  CLEAR W_FINAL.
  READ TABLE T_FINAL INTO W_FINAL INDEX E_ROW-INDEX.
  IF SY-SUBRC 0.
    IF E_COLUMN 'EBELN'.
      REFRESH T_FINAL2.
      CLEAR W_EKPO.
      LOOP AT T_EKPO INTO W_EKPO WHERE EBELN W_FINAL-EBELN.
        W_FINAL2-EBELN W_EKPO-EBELN.
        W_FINAL2-EBELP W_EKPO-EBELP.
        W_FINAL2-MATNR W_EKPO-MATNR.
        W_FINAL2-MENGE W_EKPO-MENGE.
        W_FINAL2-MEINS W_EKPO-MEINS.
        W_FINAL2-NETPR W_EKPO-NETPR.
        APPEND W_FINAL2 TO T_FINAL2.
        CLEAR W_FINAL2.
      ENDLOOP.

**********Filling Secound Fillcat log Table
      REFRESH T_FCAT1.
      PERFORM FILL_FIELDCAT2 USING P_COL 'EBELN' 'Puc.Order No',
                                     P_COL 'EBELP' 'Item No',
                                     P_COL 'MATNR' 'Material No',
                                     P_COL 'MENGE' 'Quantity',
                                     P_COL 'MEINS' 'UOM',
                                     P_COL 'NETPR' 'Prices'.


      GCL_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY(
        EXPORTING
          I_SAVE                        'X'
          I_DEFAULT                     'X'
        CHANGING
          IT_OUTTAB                     T_FINAL2
          IT_FIELDCATALOG               T_FCAT1
        EXCEPTIONS
          INVALID_PARAMETER_COMBINATION 1
          PROGRAM_ERROR                 2
          TOO_MANY_LINES                3
             ).

    ENDIF.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FILL_FIELDCAT2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FILL_FIELDCAT2 USING P_COL
                            P_FIELD TYPE CHAR20
                            P_DES TYPE CHAR40.

  W_FCAT1-COL_POS P_COL.
  W_FCAT1-FIELDNAME P_FIELD.
  W_FCAT1-COLTEXT P_DES.
  APPEND W_FCAT1 TO T_FCAT1.
  CLEAR W_FCAT1.

ENDFORM.

Output:

No comments:

Post a Comment