Header orange

Gestione dei files in ABAP

Guida publicata da: Anonymous
Parole chiave: SAP, ABAP, file, download, upload, archiviazione, compressione zip, copiare, spostare.

-Sei uno sviluppatore ABAP? Salva il tuo codice (o la tua guida) su You-Specialist, lo troverai sempre disponibile su internet! Usa questo link, inserisci il codice nel form e noi lo pubblicheremo. Ricorda di dare una breve descrizione sull'utilizzo del codice o sulla sua funzione-

Browser di filesystem
A volte è necessario far individuare all'utente la directory, sul PC locale, in cui si vuole scaricare un file. Piuttosto che chiedere all'utente di scrivere un path del tipo C:\ è meglio utilizzare il classico browser grafico di directory:


PARAMETER: p_folder TYPE string MODIF ID two.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_folder.
IF p_server = ' '.
PERFORM search_help_for_path CHANGING p_folder.
ENDIF.

FORM search_help_for_path CHANGING lf_folder.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Select the folder to download files in'
CHANGING
selected_folder = lf_folder
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " search_help_for_path


Zippare un file
Per comprimere un file presente sul server si può utilizzare la classe standard ABAP cl_abap_zip. Ecco come:

DATA: lw_data TYPE x255,
lt_data TYPE TABLE OF x255,
lo_zip TYPE REF TO cl_abap_zip,
lf_source_directory TYPE char40,
lf_target_directory TYPE char40,
lf_path TYPE string,
lf_filename_char(255),
lf_filename TYPE string,
lf_filename_output(255),
lf_content TYPE xstring,
lf_zip_content TYPE xstring ,
lf_file_length TYPE i ,
lf_zip TYPE string.

CREATE OBJECT lo_zip.
CONCATENATE lf_source_directory '/' lf_filename_char INTO lf_path.

OPEN DATASET lf_path FOR INPUT IN BINARY MODE.
IF sy-subrc <> 0 .
ENDIF.

READ DATASET lf_path INTO lf_content .
IF sy-subrc <> 0 .
ENDIF.

CLOSE DATASET lf_path.
IF sy-subrc <> 0 .
ENDIF.

MOVE lf_filename_char TO lf_filename.
lo_zip->add( name = lf_filename content = lf_content ).
lf_zip_content = lo_zip->save( ).

* Conver the xstring content to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lf_zip_content
IMPORTING
output_length = lf_file_length
TABLES
binary_tab = lt_data.

CONCATENATE lf_target_directory lf_filename_output '.zip' INTO lf_zip.

OPEN DATASET lf_zip FOR OUTPUT IN BINARY MODE.
IF sy-subrc <> 0 .
ENDIF.

LOOP AT lt_data INTO lw_data.
TRANSFER lw_data TO lf_zip.
ENDLOOP.

CLOSE DATASET lf_zip.
IF sy-subrc <> 0 .
ENDIF.


Selezionare un file dal PC locale


A volte è necessario far individuare all'utente un file, sul PC locale, per effettuarne un upload. Piuttosto che chiedere all'utente di scrivere il path completo del tipo C:\... è meglio utilizzare il classico browser grafico di file:

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(20) text-001. "Local path/filename
SELECTION-SCREEN POSITION 25.
PARAMETERS p_pcfile LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\'.
SELECTION-SCREEN PUSHBUTTON 71(5) file_x USER-COMMAND file.
SELECTION-SCREEN END OF LINE.

DATA: gf_path LIKE ibipparms-path.

INCLUDE < icon >.
INITIALIZATION.
FILE_X = ICON_SEARCH.

AT SELECTION-SCREEN.
CASE sy-ucomm.
WHEN 'FILE'.
PERFORM search_file.
ENDCASE.

*&---------------------------------------------------------------------*
*& Form search_file
*&---------------------------------------------------------------------*
FORM search_file .

CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = gf_path.
MOVE gf_path TO p_pcfile.

ENDFORM. " search_file


Download file di testo su PC locale o su server
Ecco come scaricare un file di testo, il cui contenuto proviene da una tabella interna, su PC locale o su una directory del server.


PARAMETERS: p_server RADIOBUTTON GROUP g1 DEFAULT 'X',
p_local RADIOBUTTON GROUP g1,
p_path TYPE pathintern MODIF ID two LOWER CASE DEFAULT '/root/', "For server use
p_folder TYPE string MODIF ID two. "For local PC use

DATA: lf_filesize TYPE i,
lf_file_fullname(128),
lf_fullpath TYPE string.

IF p_server = 'X'.
CONCATENATE p_path '_nomefile.txt' INTO lf_file_fullname.
ELSE.
CONCATENATE p_folder '\' '_nomefile.txt' INTO lf_file_fullname.
ENDIF.

IF p_server = false.
MOVE lf_file_fullname TO lf_fullpath.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lf_fullpath
filetype = 'ASC'
IMPORTING
filelength = lf_filesize
TABLES
data_tab = lt_itab
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.
ENDIF.

ELSE.

OPEN DATASET lf_file_fullname FOR OUTPUT IN TEXT MODE.
IF sy-subrc NE 0.
ENDIF.

LOOP AT lt_itab.
TRANSFER lt_itab TO lf_file_fullname.
IF sy-subrc NE 0.
ENDIF.
ENDLOOP.

CLOSE DATASET lf_file_fullname.
IF sy-subrc NE 0.
ENDIF.

ENDIF.


Funzioni varie di upload e download (ASCII e BIN)

C13Z_FILE_DOWNLOAD_BINARY
C13Z_FILE_DOWNLOAD_ASCII
C13Z_FILE_UPLOAD_BINARY
C13Z_FILE_UPLOAD_ASCII


Transazioni utili

AL11 - Visualizza file sul server
CG3Y - Download file
CG3Z - Upload file


-Questo contenuto ti sembra utile? Clicca il pulsante "Mi Piace" qui sotto!-



ADS LINK LARGO 2