Systémové funkce pro práci se soubory v ABAPu

Existují dvě základní operace se soubory, které běžný ABAP programátor potřebuje realizovat ze všeho nejčastěji. Jedná se o:
- uložení souboru (download)
- načtení souboru (upload)
K tomu má v SAPu k dispozici dvě systémové funkce ze známe funkční skupiny (function group) SFES.
1. Uložení souboru postaru
K uložení souboru slouží funkční modul GUI_DOWNLOAD, jehož nejdůležitějšími parametry jsou:
filename- název soubor, který je ukládán, včetně cestyfiletype- typ souboru určující znakovou sadu (BIN, DBF, WK1, ASC, VSS)append- pokud je parametr nastaven na hodnotu "X" (abap_true) a soubor s názvem filename již existuje, pak jsou data přidána na konec tohoto souborudata_tab- interní tabulka, jejíž data budou uložena do souboru; jednotlivá pole (sloupce) budou oddělena tabulátoryfieldnames- interní tabulka obsahující názvy jednotlivých sloupců, respektive hlavičku, která bude zapsána do souboru jako první řádekfilelength- importní parametr, ze kterého lze zjistit velikost souboru
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* bin_filesize =
filename = g_fname
filetype = 'ASC'
append = ' '
write_field_separator = ' '
header = '00'
trunc_trailing_blanks = ' '
write_lf = 'X'
col_select = ' '
col_select_mask = ' '
dat_mode = ' '
confirm_overwrite = ' '
no_auth_check = ' '
codepage = ' '
ignore_cerr = abap_true
replacement = '#'
write_bom = ' '
trunc_trailing_blanks_eol = 'X'
wk1_n_format = ' '
wk1_n_size = ' '
wk1_t_format = ' '
wk1_t_size = ' '
write_lf_after_last_line = abap_true
show_transfer_status = abap_true
IMPORTING
filelength = g_flen
TABLES
data_tab = gt_data
fieldnames = gt_fnames
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.
2. Načtení souboru postaru
K načtení souboru v ABAP programu lze použít funkční modul GUI_UPLOAD, který má opět parametry filename, filetype, data_tab a filelength a jeho použití je podobné:
CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = g_fname filetype = 'ASC' has_field_separator = ' ' header_length = 0 read_by_line = 'X' dat_mode = ' ' codepage = ' ' ignore_cerr = abap_true replacement = '#' check_bom = ' ' virus_scan_profile = no_auth_check = ' ' IMPORTING filelength = g_flen * header = TABLES data_tab = gt_data 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.
Od SAPu verze 6 však nastává změna a uvedené funkce jsou obsolete, neboli zastaralé. V dokumentaci se můžeme dočíst, že je místo nich doporučeno používat statické metody třídy cl_gui_frontend_services. Nejedná se však o nic jiného, než o objektové zapouzdření starých známých funkcí z grupy SFES. Jak na to?
1. Uložení souboru po novu
Jedná se o metodu cl_gui_frontend_services=>gui_download. Jediný podstatný rozdíl, který jsem objevil, spočívá ve zrušení parametru fieldnames pro předávání hlavičky. Smůla, je to obsolete! Jinak vše podstatné máte uvnitř:
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
* bin_filesize =
filename = g_fname
filetype = 'ASC'
append = ' '
IMPORTING
filelength = g_flen
CHANGING
data_tab = gt_data
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 = 24.
2. Načtení souboru po novu
Metoda cl_gui_frontend_services=>gui_upload je opět to samé v bledě modrém:
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = g_fname
filetype = 'ASC'
IMPORTING
filelength = g_flen
CHANGING
data_tab = gt_data
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
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
Uživatelský dialog pro výběr souboru/ů
Před samotným otevřením souboru může být užitečné zavolat uživatelský dialog pro výběr souboru cl_gui_frontend_services=>file_open_dialog, který umožňuje i výběr více souborů najednou, jejichž názvy vrací v tabulce file_table:
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = g_title
file_filter = g_file_filter
CHANGING
file_table = gt_files
rc = g_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
Otevření souboru v aplikaci na lokálním počítači
Dále tu máme velmi užitečnou funkci pro otevření souboru v klientské aplikaci (tedy například v internetovém prohlížeči nebo v Excelu). Obecně se jedná o funkci, která umožňuje spuštění jakéhokoliv programu na lokální stanici i bez nutnosti předávat cestu k souboru (např. MS Calc).
Funkce z grupy SFES má název GUI_EXEC a jejími parametry jsou:
command- cesta k programuparameter- cesta k souborureturncode- návratová hodnota (pokud je různá od nuly, nastala chyba)
CALL FUNCTION 'GUI_EXEC'
EXPORTING
command = g_prog_path
parameter = g_file_path
IMPORTING
returncode = g_rc.
Od SAPu verze 6 se opět doporučuje používám objektovou alternativu cl_gui_frontend_services=>execute, která má název parametru command změněný na application a místo návratového kódu používá výjimky:
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
* document =
application = g_prog_path
parameter = g_file_path
* default_directory =
* maximized =
* minimized =
* synchronous =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
OTHERS = 8.
Určení cesty k programu asociovaným s daným typem souboru
Na závěr jsem si nechal opět velmi důležitou funkci, která umí přečíst z Windows registrů cestu k programu asociovaným s daným typem souboru. Jejími parametry jsou:
doctype- přípona souboru (bohužel je délka parametru omezena pouze na 3 znaky)pathname- vrácena cesta k asociovanému programure- tabulka s klíči hledanými ve Windows registry
CALL FUNCTION 'SO_PROGNAME_GET_WITH_PATH'
EXPORTING
doctype = g_file_type "HTM, XLS, DOC...
IMPORTING
pathname = g_prog_path
TABLES
re = exceptions
path_not_found = 1
program_not_found = 2
no_batch = 3
x_error = 4
OTHERS = 5.
Tip: Pro kerektní běh výše uvedených funkcí a metod doporučuji upgradovat na nejnovější SAP logon (frontend). Já osobně používám build 815416, patch level 18.






