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

SAP logo

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:

  1. uložení souboru (download)
  2. 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ě cesty
  • filetype - 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 souboru
  • data_tab - interní tabulka, jejíž data budou uložena do souboru; jednotlivá pole (sloupce) budou oddělena tabulátory
  • fieldnames - interní tabulka obsahující názvy jednotlivých sloupců, respektive hlavičku, která bude zapsána do souboru jako první řádek
  • filelength - 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 programu
  • parameter - cesta k souboru
  • returncode - 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 programu
  • re - 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.


Podělte se o tento článek s ostatními… Sdílet

Komentáře

Zatím žádné komentáře

Přidat komentář

Upozornění: Komentář musí být před publikováním schválen!
: *
: *

: *

:



  • Pole označená hvězdičkou jsou povinná.
  • Můžete použít Texy! syntaxi. HTML tagy nejsou povolené!
    Příklad syntaxe: **tučně**, *kurzíva*.
  • Odkazy začínající http(s)://, ftp:// a mailto: se zformátují automaticky.
  • Na jiné komentáře se můžete odkazovat např. zápisem [1].
  • Gravatar připojený k Vaší e-mailové bude zobrazen u komentáře.
  • Upozorňuji, že komentáře, které se netýkají tématu článku, jsou vulgární nebo urážlivé, mohou být smazány.

Začátek článku Nahoru | Začátek komentářů Nahoru

© Pavel Jaroš [Sektor PJ] · Nahoru Nahoru