Thanks to Frank.
*&-----------------------------------------------------------*
*& Report Z_UPLOAD_TOOL
*&
*&-----------------------------------------------------------*
*&
*& Loads every file up and down
*&-----------------------------------------------------------*
REPORT Z_UPLOAD_TOOL.
tYPE-POOLS: abap.
PARAMETERS: tabname TYPE tabname16,
download RADIOBUTTON GROUP radi,
upload RADIOBUTTON GROUP radi.
DATA l_tab TYPE TABLE OF sdokpath.
DATA l_wa_tab TYPE sdokpath.
DATA l_path TYPE string.
DATA l_wa_ref TYPE REF TO data.
DATA l_offset TYPE i.
DATA load(2) TYPE c.
FIELD-SYMBOLS: <l_string> TYPE ANY,
<f1> TYPE abap_compdescr,
<l_wa_tab> TYPE ANY.
DATA l_wa_data_tab(2000) TYPE c.
DATA l_data_tab LIKE TABLE OF l_wa_data_tab.
DATA l_descr_ref TYPE REF TO cl_abap_typedescr.
DATA l_struc_ref TYPE REF TO cl_abap_structdescr.
CONSTANTS: con_download(2) TYPE c VALUE 'DL',
con_upload(2) TYPE c VALUE 'UL'.
START-OF-SELECTION.
IF download EQ 'X'.
load = con_download.
ELSE.
load = con_upload.
ENDIF.
CASE load.
WHEN con_download.
CREATE DATA l_wa_ref TYPE (tabname).
ASSIGN l_wa_ref->* TO <l_wa_tab>.
SELECT * FROM (tabname) INTO <l_wa_tab>.
l_wa_data_tab = <l_wa_tab>.
APPEND l_wa_data_tab TO l_data_tab.
ENDSELECT.
CALL FUNCTION 'TMP_GUI_FILE_OPEN_DIALOG'
EXPORTING
window_title = 'DOWNLOAD'
TABLES
file_table = l_tab
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
READ TABLE l_tab INTO l_wa_tab INDEX 1.
l_path = l_wa_tab.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = l_path
TABLES
data_tab = l_data_tab
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
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE e063(5v).
* No records down/uploaded
ENDIF.
WHEN con_upload.
CALL FUNCTION 'TMP_GUI_FILE_OPEN_DIALOG'
EXPORTING
window_title = 'UPLOAD'
TABLES
file_table = l_tab
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
READ TABLE l_tab INTO l_wa_tab INDEX 1.
l_path = l_wa_tab.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_path
TABLES
data_tab = l_data_tab
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE e063(5v).
* No records down/uploaded
ENDIF.
CREATE DATA l_wa_ref TYPE (tabname).
ASSIGN l_wa_ref->* TO <l_wa_tab>.
CALL METHOD cl_abap_typedescr=>describe_by_name
EXPORTING
p_name = tabname
RECEIVING
p_descr_ref = l_descr_ref
EXCEPTIONS
type_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
.
ENDIF.
l_struc_ref ?= l_descr_ref.
LOOP AT l_data_tab ASSIGNING <l_string>.
CLEAR l_offset.
LOOP AT l_struc_ref->components ASSIGNING <f1>.
<l_wa_tab>+l_offset(<f1>-length) =
<l_string>+l_offset(<f1>-length).
l_offset = l_offset + <f1>-length.
ENDLOOP.
MODIFY (tabname) FROM <l_wa_tab>.
ENDLOOP.
endcase.
Montag, 1. August 2011
Abonnieren
Kommentare zum Post (Atom)

0 Kommentare:
Kommentar veröffentlichen