* ====================================================================== * Stefanos Moschidis - SAP Certified Technical Consultant * ====================================================================== REPORT Z_DOWNLOAD_UPLOAD_ANY_TABLE . * ---------------------------------------------------------------------- * Program for * ---------------------------------------------------------------------- * 1. Downloading Data of any DB table to a tab delimited ASCII file * * ---------------------------------------------------------------------- * 2. Checking if a tab delimited ASCII file has the structure of a * DB table and showing its contents * ---------------------------------------------------------------------- * 3. Uploading a tab delimited ASCII file to a DB table with the same * structure * ---------------------------------------------------------------------- * 4. Showing the data of any DB table * * ====================================================================== * ====================================================================== * DATA DECLARATIONS * ====================================================================== TYPES : DATA_OBJECT TYPE REF TO DATA. DATA : MITAB TYPE REF TO DATA . TYPE-POOLS : SLIS . DATA : IT_FIELDCAT TYPE STANDARD TABLE OF slis_fieldcat_alv WITH HEADER LINE . DATA : IT_FIELDCATALOG Type LVC_T_FCAT . DATA : WA_FIELDCATALOG Type LVC_S_FCAT . DATA : I_STRUCTURE_NAME LIKE DD02L-TABNAME . DATA : I_CALLBACK_PROGRAM LIKE SY-REPID . DATA : DYN_LINE TYPE DATA_OBJECT . FIELD-SYMBOLS : TYPE STANDARD TABLE . DATA : TABLE_NAME_IS_VALID TYPE C . DATA : DYNAMIC_IT_INSTANTIATED TYPE C . CONSTANTS BUTTONSELECTED TYPE C VALUE 'X' . * ====================================================================== * SELECTION SCREEN DEFAULT * ====================================================================== selection-screen begin of line. SELECTION-SCREEN COMMENT 5(29) T_tabl. PARAMETERS : MTABLE_N LIKE RSRD1-TBMA_VAL mATCHCODE OBJECT DD_DBTB_16 OBLIGATORY . selection-screen end of line. selection-screen begin of line. SELECTION-SCREEN COMMENT 5(29) T_file. PARAMETERS : MFILENAM LIKE RLGRAP-FILENAME . selection-screen end of line. selection-screen begin of line. SELECTION-SCREEN COMMENT 5(29) T_down. PARAMETERS : P_DOWNLD RADIOBUTTON GROUP GRP1 user-command M_UCOMM . selection-screen end of line. selection-screen begin of line. SELECTION-SCREEN COMMENT 5(29) T_chkf. PARAMETERS : P_chkfil RADIOBUTTON GROUP GRP1 . selection-screen end of line. selection-screen begin of line. SELECTION-SCREEN COMMENT 5(29) T_upld. PARAMETERS : P_UPLOAD RADIOBUTTON GROUP GRP1 . selection-screen end of line. selection-screen begin of line. SELECTION-SCREEN COMMENT 5(29) T_show. PARAMETERS : P_show_t RADIOBUTTON GROUP GRP1 . selection-screen end of line. * ====================================================================== * AT SELECTION SCREEN OUTPUT * ====================================================================== AT SELECTION-SCREEN OUTPUT . PERFORM CHECK_FILENAME . * ====================================================================== * AT SELECTION SCREEN ON VALUE REQUEST FOR FILENAME * ====================================================================== AT SELECTION-SCREEN ON VALUE-REQUEST FOR MFILENAM . PERFORM F4_FOR_FILENAME . * ====================================================================== * Initialization . * ====================================================================== Initialization . T_tabl = 'Table Name' . T_file = 'File Name' . T_down = 'Download Table' . T_chkf = 'Check File to Upload' . T_upld = 'Upload File' . T_show = 'Show Table Contents' . * ====================================================================== * START OF SELECTION * ====================================================================== START-OF-SELECTION . PERFORM CHECK_TABLE_NAME_IS_VALID . * ====================================================================== * END OF SELECTION * ====================================================================== END-OF-SELECTION . IF TABLE_NAME_IS_VALID EQ ' ' . message i398(00) with 'INVALID TABLE NAME' . ELSE . PERFORM INSTANTIATE_DYNAMIC_INTERNAL_T . CHECK DYNAMIC_IT_INSTANTIATED = 'X' . CASE BUTTONSELECTED . WHEN P_DOWNLD . PERFORM SELECT_AND_DOWNLOAD . when P_chkfil . perform CHECK_FILE_TO_UPLOAD . WHEN P_UPLOAD . PERFORM UPLOAD_FROM_FILE . when P_SHOW_T . PERFORM SHOW_CONTENTS . ENDCASE . ENDIF . *&---------------------------------------------------------------------* *& Form CHECK_TABLE_NAME_IS_VALID *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM CHECK_TABLE_NAME_IS_VALID. DATA MCOUNT TYPE I . tables dd02l . CLEAR TABLE_NAME_IS_VALID . SELECT COUNT(*) INTO MCOUNT FROM TADIR WHERE PGMID = 'R3TR' AND OBJECT = 'TABL' AND OBJ_NAME = MTABLE_N . IF MCOUNT EQ 1 . clear dd02l . select single * from dd02l where TABNAME = MTABLE_N . IF SY-SUBRC eq 0. if dd02l-tabclass = 'TRANSP' . TABLE_NAME_IS_VALID = 'X' . endif . ENDIF. ENDIF . ENDFORM. " CHECK_TABLE_NAME_IS_VALID *&---------------------------------------------------------------------* *& Form SELECT_AND_DOWNLOAD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM SELECT_AND_DOWNLOAD. CLEAR : . SELECT * FROM (MTABLE_N) INTO CORRESPONDING FIELDS OF TABLE . PERFORM CHECK_FILENAME. CALL FUNCTION 'WS_DOWNLOAD' EXPORTING FILENAME = MFILENAM FILETYPE = 'DAT' TABLES DATA_TAB = EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_WRITE_ERROR = 2 INVALID_FILESIZE = 3 INVALID_TYPE = 4 NO_BATCH = 5 UNKNOWN_ERROR = 6 INVALID_TABLE_WIDTH = 7 GUI_REFUSE_FILETRANSFER = 8 CUSTOMER_ERROR = 9 OTHERS = 10. IF SY-SUBRC eq 0. MESSAGE I398(00) WITH 'Table' mtable_n 'successfully downloaded to ' mfilenam . ENDIF. ENDFORM. " SELECT_AND_DOWNLOAD *&---------------------------------------------------------------------* *& Form UPLOAD_FROM_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM UPLOAD_FROM_FILE. DATA : ANS TYPE C . DATA : lines_of_itab TYPE I . DATA : MSY_SUBRC TYPE I . CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING TEXTLINE1 = 'Are you sure you wish to upload' TEXTLINE2 = 'data from ASCII File to DB table ' TITEL = 'Confirmation of Data Upload' IMPORTING ANSWER = ANS. if ans = 'J' . PERFORM CHECK_FILENAME. CLEAR MSY_SUBRC . CALL FUNCTION 'WS_UPLOAD' EXPORTING FILENAME = MFILENAM FILETYPE = 'DAT' TABLES DATA_TAB = EXCEPTIONS CONVERSION_ERROR = 1 FILE_OPEN_ERROR = 2 FILE_READ_ERROR = 3 INVALID_TYPE = 4 NO_BATCH = 5 UNKNOWN_ERROR = 6 INVALID_TABLE_WIDTH = 7 GUI_REFUSE_FILETRANSFER = 8 CUSTOMER_ERROR = 9 OTHERS = 10. MSY_SUBRC = MSY_SUBRC + SY-SUBRC . IF SY-SUBRC eq 0. describe table lines lines_of_itab . IF LINES_OF_ITAB GT 0 . DELETE (MTABLE_N) FROM TABLE . commit work . insert (MTABLE_N) FROM TABLE . MSY_SUBRC = MSY_SUBRC + SY-SUBRC . ENDIF . ENDIF. IF MSY_SUBRC EQ 0 . MESSAGE I398(00) WITH LINES_OF_ITAB 'Record(s) inserted in table' MTABLE_N . ELSE . MESSAGE I398(00) WITH 'Errors occurred No Records inserted in table' MTABLE_N . ENDIF . endif . ENDFORM. " UPLOAD_FROM_FILE *&---------------------------------------------------------------------* *& Form F4_FOR_FILENAME *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM F4_FOR_FILENAME. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_PATH = 'C:\' MASK = ',*.*,*.*.' MODE = '0' IMPORTING FILENAME = MFILENAM EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. ENDFORM. " F4_FOR_FILENAME *&---------------------------------------------------------------------* *& Form CHECK_FILENAME *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM CHECK_FILENAME. IF MFILENAM IS INITIAL and not ( MTABLE_N is initial ) AND P_show_t ne BUTTONSELECTED. CONCATENATE 'C:\' MTABLE_N '.TXT' INTO MFILENAM. ENDIF . ENDFORM. " CHECK_FILENAME *&---------------------------------------------------------------------* *& Form INSTANTIATE_DYNAMIC_INTERNAL_T *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM INSTANTIATE_DYNAMIC_INTERNAL_T. CLEAR DYNAMIC_IT_INSTANTIATED . * -----> Step 1 - Finding Field Names and ALV GRID Fieldcatalog I_STRUCTURE_NAME = MTABLE_N . CLEAR IT_FIELDCAT[] . CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING I_STRUCTURE_NAME = I_STRUCTURE_NAME CHANGING CT_FIELDCAT = IT_FIELDCAT[] EXCEPTIONS INCONSISTENT_INTERFACE = 1 PROGRAM_ERROR = 2 OTHERS = 3. IF SY-SUBRC EQ 0. * -----> Step 2 - Creating Field Catalog of the Object * cl_alv_table_create LOOP AT IT_FIELDCAT . CLEAR WA_FIELDCATALOG . MOVE-CORRESPONDING IT_FIELDCAT TO WA_FIELDCATALOG . WA_FIELDCATALOG-REF_FIELD = IT_FIELDCAT-fieldname . WA_FIELDCATALOG-REF_TABLE = mtable_n . APPEND WA_FIELDCATALOG TO it_fieldcatALOG . ENDLOOP . * -----> Step 3 - Creating Internal Table Dynamicaly CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcatALOG IMPORTING ep_table = MITAB . ASSIGN MITAB->* TO . DYNAMIC_IT_INSTANTIATED = 'X' . ENDIF. ENDFORM. " INSTANTIATE_DYNAMIC_INTERNAL_T *&---------------------------------------------------------------------* *& Form SHOW_CONTENTS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM SHOW_CONTENTS. CLEAR : . SELECT * FROM (MTABLE_N) INTO CORRESPONDING FIELDS OF TABLE . I_CALLBACK_PROGRAM = SY-REPID . CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = I_CALLBACK_PROGRAM IT_FIELDCAT = IT_FIELDCAT[] TABLES T_OUTTAB = EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. ENDFORM. " SHOW_CONTENTS *&---------------------------------------------------------------------* *& Form CHECK_FILE_TO_UPLOAD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM CHECK_FILE_TO_UPLOAD. PERFORM CHECK_FILENAME. * CLEAR MSY_SUBRC . CALL FUNCTION 'WS_UPLOAD' EXPORTING FILENAME = MFILENAM FILETYPE = 'DAT' TABLES DATA_TAB = EXCEPTIONS CONVERSION_ERROR = 1 FILE_OPEN_ERROR = 2 FILE_READ_ERROR = 3 INVALID_TYPE = 4 NO_BATCH = 5 UNKNOWN_ERROR = 6 INVALID_TABLE_WIDTH = 7 GUI_REFUSE_FILETRANSFER = 8 CUSTOMER_ERROR = 9 OTHERS = 10. * MSY_SUBRC = MSY_SUBRC + SY-SUBRC . IF SY-SUBRC eq 0. I_CALLBACK_PROGRAM = SY-REPID . CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = I_CALLBACK_PROGRAM IT_FIELDCAT = IT_FIELDCAT[] TABLES T_OUTTAB = EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. endif . ENDFORM. " CHECK_FILE_TO_UPLOAD