Subscribe

RSS Feed (xml)



Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Friday, October 15, 2010

abap Program to download/upload table data dynamically

This program allows the user to enter the table name and have the program download the data to a PC file.
Changing the radio button allows the user to upload the data to the specified table name.



Has function for append or clear/insert.

<>









*----------------------------------------------------------------------

* N Overton : Created ( T/Code ZTUD)

*

* Dynamic table export / import facility.

*

* Restrictions - Table definition MUST exist on target

* system for import.

* - Entire table is exported / imported

* - Must be WIN95/98 WIN-NT long filenames

*----------------------------------------------------------------------

* TEXTS

*

* List Header...: For SAP Table: &1............................

*

* Column Heading: | Function Status(48 spaces)# Records |

*

* Selection Texts: PATH Folder Path for file

* P_CLEAR Delete Existing Records

* P_EXP Export to PC File

* P_IMP Import from PC File

* TABNAME SAP table name

*

* Text Symbols: B00 Dynamic Import/Export of SAP data

* B01 SAP Table Name

* B02 Program Function

* B03 Folder For Data File

* B04 Existing Records Deletion Selection

* ER2 File not found. Please check.

* PGE Page

*----------------------------------------------------------------------

* This program once created will allow you to download or upload table

* data from any SAP table. It has the functionality to allow you to

* select whether data should be appended or original data cleaed before

* inserting new data.

* This is very useful when attempting to transfer data from one client

* to another

*----------------------------------------------------------------------



REPORT zsptud01 LINE-SIZE 80

LINE-COUNT 65

NO STANDARD PAGE HEADING.



TABLES: dd02l, dd03l.



* selection screen

SELECTION-SCREEN BEGIN OF BLOCK b00 WITH FRAME TITLE text-b00.

*

SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.

PARAMETERS: tabname LIKE dd02l-tabname OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b01.

*

SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE text-b03.

PARAMETERS: path(30) TYPE c DEFAULT 'C:\SAPWorkdir'.

SELECTION-SCREEN END OF BLOCK b03.

*

SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE text-b04.

PARAMETERS: p_exp RADIOBUTTON GROUP radi,

p_imp RADIOBUTTON GROUP radi,

p_clear AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK b04.



SELECTION-SCREEN END OF BLOCK b00.



* data

DATA: q_return LIKE syst-subrc,

err_flag(1) TYPE c,

answer(1) TYPE c,

w_text1(62) TYPE c,

w_text2(40) TYPE c,

winfile(128) TYPE c,

w_system(40) TYPE c,

winsys(7) TYPE c,

zname(8) TYPE c,

w_line(80) TYPE c.



* internal tables

DATA : BEGIN OF textpool_tab OCCURS 0.

INCLUDE STRUCTURE textpool.

DATA : END OF textpool_tab.



* table for subroutine pool

DATA : itab(80) OCCURS 0.



* events

INITIALIZATION.

PERFORM check_system.

*

AT SELECTION-SCREEN ON tabname.

PERFORM check_table_exists.

*

START-OF-SELECTION.

PERFORM init_report_texts.

PERFORM request_confirmation.

*

END-OF-SELECTION.

IF answer = 'J'.

PERFORM execute_program_function.

ENDIF.

*

TOP-OF-PAGE.

PERFORM process_top_of_page.



* forms

*---------------------------------------------------------------------*

* FORM CHECK_TABLE_EXISTS *

*---------------------------------------------------------------------*

FORM check_table_exists.

SELECT SINGLE * FROM dd02l

INTO CORRESPONDING FIELDS OF dd02l

WHERE tabname = tabname.

CHECK syst-subrc NE 0.

MESSAGE e402(mo) WITH tabname.

ENDFORM.

*---------------------------------------------------------------------*

* FORM INIT_REPORT_TEXTS *

*---------------------------------------------------------------------*

FORM init_report_texts.

READ TEXTPOOL syst-repid

INTO textpool_tab LANGUAGE syst-langu.

LOOP AT textpool_tab

WHERE id EQ 'R' OR id EQ 'T'.

REPLACE '&1............................'

WITH tabname INTO textpool_tab-entry.

MODIFY textpool_tab.

ENDLOOP.

ENDFORM.

*---------------------------------------------------------------------*

* FORM REQUEST_CONFIRMATION *

*---------------------------------------------------------------------*

FORM request_confirmation.



* import selected, confirm action

IF p_imp = 'X'.

* build message text for popup

CONCATENATE 'Data for table'

tabname

'will be imported' INTO w_text1 SEPARATED BY space.

* check if delete existing selected, and change message text

IF p_clear = ' '.

w_text2 = 'and appended to the end of existing data'.

ELSE.

w_text2 = 'Existing Data will be deleted'.

ENDIF.



CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'

EXPORTING

defaultoption = 'N'

textline1 = w_text1

textline2 = w_text2

titel = 'Confirm Import of Data'

cancel_display = ' '

IMPORTING

answer = answer

EXCEPTIONS

OTHERS = 1.

ELSE.

* export selected, set answer to yes so export can continue

answer = 'J'.

ENDIF.

ENDFORM.

*---------------------------------------------------------------------*

* FORM EXECUTE_PROGRAM_FUNCTION *

*---------------------------------------------------------------------*

FORM execute_program_function.

PERFORM build_file_name.

CLEAR: q_return,err_flag.



IF p_imp = 'X'.

PERFORM check_file_exists.

CHECK err_flag = ' '.

PERFORM func_import.

ELSE.

PERFORM func_export.

ENDIF.

ENDFORM.

*---------------------------------------------------------------------*

* FORM BUILD_FILE_NAME *

*---------------------------------------------------------------------*

FORM build_file_name.

MOVE path TO winfile.

WRITE '\' TO winfile+30.

WRITE tabname TO winfile+31.

WRITE '.TAB' TO winfile+61(4).

CONDENSE winfile NO-GAPS.

ENDFORM.

*---------------------------------------------------------------------*

* FORM CHECK_FILE_EXISTS *

*---------------------------------------------------------------------*

FORM check_file_exists.



CALL FUNCTION 'WS_QUERY'

EXPORTING

filename = winfile

query = 'FE'

IMPORTING

return = q_return

EXCEPTIONS

OTHERS = 1.



IF syst-subrc NE 0 OR q_return NE 1.

err_flag = 'X'.

ENDIF.

ENDFORM.

*---------------------------------------------------------------------*

* FORM func_export *

*---------------------------------------------------------------------*

FORM func_export.

CLEAR itab. REFRESH itab.



APPEND 'PROGRAM SUBPOOL.' TO itab.



APPEND 'FORM DOWNLOAD.' TO itab.

APPEND 'DATA: BEGIN OF IT_TAB OCCURS 0.' TO itab.

CONCATENATE 'INCLUDE STRUCTURE'

tabname

'.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'DATA: END OF IT_TAB.' TO itab.



CONCATENATE 'SELECT * FROM'

tabname

'INTO TABLE IT_TAB.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.



APPEND 'CALL FUNCTION ''WS_DOWNLOAD''' TO itab.

APPEND 'EXPORTING' TO itab.

CONCATENATE 'filename = ' ''''

winfile '''' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'filetype = ''DAT''' TO itab.

APPEND 'TABLES' TO itab.

APPEND 'DATA_TAB = IT_TAB.' TO itab.



APPEND 'DESCRIBE TABLE IT_TAB LINES sy-index.' TO itab.



APPEND 'FORMAT COLOR COL_NORMAL INTENSIFIED OFF.' TO itab.

APPEND 'WRITE: /1 syst-vline,' TO itab.

APPEND '''EXPORT'',' TO itab.

APPEND '15 ''data line(s) have been exported'',' TO itab.

APPEND '68 syst-index,' TO itab.

APPEND '80 syst-vline.' TO itab.

APPEND 'ULINE.' TO itab.



APPEND 'ENDFORM.' TO itab.



GENERATE SUBROUTINE POOL itab NAME zname.

PERFORM download IN PROGRAM (zname).

ENDFORM.

*---------------------------------------------------------------------*

* FORM func_import *

*---------------------------------------------------------------------*

FORM func_import.

CLEAR itab. REFRESH itab.

APPEND 'PROGRAM SUBPOOL.' TO itab.



APPEND 'FORM UPLOAD.' TO itab.

APPEND 'DATA: BEGIN OF IT_TAB OCCURS 0.' TO itab.

CONCATENATE 'INCLUDE STRUCTURE'

tabname

'.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'DATA: END OF IT_TAB.' TO itab.

APPEND 'DATA: BEGIN OF IT_TAB2 OCCURS 0.' TO itab.

CONCATENATE 'INCLUDE STRUCTURE'

tabname

'.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'DATA: END OF IT_TAB2.' TO itab.



APPEND 'CALL FUNCTION ''WS_UPLOAD''' TO itab.

APPEND 'EXPORTING' TO itab.

CONCATENATE 'filename = ' ''''

winfile '''' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'filetype = ''DAT''' TO itab.

APPEND 'TABLES' TO itab.

APPEND 'DATA_TAB = IT_TAB.' TO itab.



IF p_clear = 'X'.

CONCATENATE 'SELECT * FROM'

tabname

'INTO TABLE IT_TAB2.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.



APPEND 'LOOP AT IT_TAB2.' TO itab.

CONCATENATE 'DELETE'

tabname

'FROM IT_TAB2.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'ENDLOOP.' TO itab.

APPEND 'COMMIT WORK.' TO itab.

ENDIF.



APPEND 'LOOP AT IT_TAB.' TO itab.

CONCATENATE 'MODIFY'

tabname

'FROM IT_TAB.' INTO w_line SEPARATED BY space.

APPEND w_line TO itab.

APPEND 'ENDLOOP.' TO itab.



APPEND 'DESCRIBE TABLE IT_TAB LINES sy-index.' TO itab.



APPEND 'FORMAT COLOR COL_NORMAL INTENSIFIED OFF.' TO itab.

APPEND 'WRITE: /1 syst-vline,' TO itab.

APPEND '''IMPORT'',' TO itab.

APPEND '15 ''data line(s) have been imported'',' TO itab.

APPEND '68 syst-index,' TO itab.

APPEND '80 syst-vline.' TO itab.

APPEND 'ULINE.' TO itab.



APPEND 'ENDFORM.' TO itab.



GENERATE SUBROUTINE POOL itab NAME zname.

PERFORM upload IN PROGRAM (zname).

ENDFORM.

*---------------------------------------------------------------------*

* Form CHECK_SYSTEM

* Check users workstation is running

* WINDOWS 95, or WINDOWS NT.

* OS/2 uses 8.3 file names which are no good for

* this application as filenames created are 30 char

* same as table name.

* You could change the logic to only use the first 8 chars

* of the table name for the filename, but you could possibly

* get problems if users had exported already with a table

* with the same first 8 chars.

* As an alternate method you could request the user to input

* the full path including filename and remove the logic to

* build the path using the table name.

*---------------------------------------------------------------------*

FORM check_system.

CALL FUNCTION 'WS_QUERY'

EXPORTING

query = 'WS'

IMPORTING

return = winsys.



IF winsys NE 'WN32_95'.

WRITE: 'Windows NT or Windows 95/98 is required'.

EXIT.

ENDIF.



ENDFORM. " CHECK_SYSTEM

*---------------------------------------------------------------------*

* FORM PROCESS_TOP_OF_PAGE *

*---------------------------------------------------------------------*

FORM process_top_of_page.

FORMAT COLOR COL_HEADING INTENSIFIED ON.

ULINE.



CONCATENATE syst-sysid

syst-saprl

syst-host INTO w_system SEPARATED BY space.



WRITE : AT /1(syst-linsz) w_system CENTERED.

WRITE : AT 1 syst-vline, syst-uname.

syst-linsz = syst-linsz - 11.

WRITE : AT syst-linsz syst-repid(008).

syst-linsz = syst-linsz + 11.

WRITE : AT syst-linsz syst-vline.



LOOP AT textpool_tab WHERE id EQ 'R'.

WRITE : AT /1(syst-linsz) textpool_tab-entry CENTERED.

ENDLOOP.

WRITE : AT 1 syst-vline, syst-datum.

syst-linsz = syst-linsz - 11.

WRITE : AT syst-linsz syst-tcode(004).

syst-linsz = syst-linsz + 11.

WRITE : AT syst-linsz syst-vline.



LOOP AT textpool_tab WHERE id EQ 'T'.

WRITE : AT /1(syst-linsz) textpool_tab-entry CENTERED.

ENDLOOP.

WRITE : AT 1 syst-vline, syst-uzeit.

syst-linsz = syst-linsz - 11.

WRITE : AT syst-linsz 'Page', syst-pagno.

syst-linsz = syst-linsz + 11.

WRITE : AT syst-linsz syst-vline.

ULINE.



FORMAT COLOR COL_HEADING INTENSIFIED OFF.

LOOP AT textpool_tab WHERE id EQ 'H'.

WRITE : AT /1(syst-linsz) textpool_tab-entry.

ENDLOOP.



ULINE.

ENDFORM.

No comments:

Blog Archive