REPORT z_sapcrawler.
* 1.0.1 - Anydida descarga de pantallas
* 1.0.2 - Anydida rutina de cambio de parmetros y ttulo
* 1.0.3 - Anydimos ms parmetros a la seleccin
* 1.0.4 - Anydimos las descargas de las clases
* 1.0.5 - Anydimos estructura jerarquica de directorios
* 1.0.6 - Evitamos descargar los includes ya descargados y las vistas VIEWFRAME y VIEWPROC.
* Anydirmos Busqueda por autor.
* Arreglado bug de SE11
* 1.0.7 - Descarga las tablas como PDF
* - Descarga SmartForms en XML ** Problemas de dilogo.
* - Descarga SapScripts
* 1.0.8 - Buscamos la impresora SAPWIN para simular LOCL
* - Eliminamos los spools que hemos creado.
* 1.0.9 - Anydimos los mensajes (SE91)
* 1.0.10 - Arreglado error de descarga de las pantallas
CONSTANTS version(10) VALUE 'v1.0.10'.
TABLES:
*--[ Tabla de Spool
tsp01,
*--[ Objetos
tadir,
*--[ Diccionario
dd04l, dd04t, dd07l, dd07t, dd01l, dd02l, dd03l, dd02t,
*--[ Transacciones
tstc,
*--[ Funciones
v_fdir, tfdir,
*--[Pantallas
d020s, d020t,
*--[ Mensajes
t100,
*--[ Clases
seosubco,
seocompo,
seocompodf,
seosubcodf.
SELECT-OPTIONS: s_pack FOR tadir-devclass,
s_obj FOR tadir-object,
s_objn FOR tadir-obj_name,
s_author FOR tadir-author.
SELECTION-SCREEN SKIP 1.
PARAMETERS dest(80) DEFAULT 'T:\'.
*--[ Variables
DATA: i_tadir LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA: i_list TYPE string OCCURS 0 WITH HEADER LINE.
DATA: i_prog TYPE STANDARD TABLE OF string.
DATA: i_prog_2 TYPE STANDARD TABLE OF string.
DATA: i_prog_tmp TYPE STANDARD TABLE OF string.
DATA: c_i_prog TYPE string.
DATA: i_to_find TYPE string OCCURS 0 WITH HEADER LINE.
DATA: i_includes(255) OCCURS 0 WITH HEADER LINE.
DATA: i_seocompodf LIKE seocompodf OCCURS 0 WITH HEADER LINE.
DATA: ss TYPE string.
DATA: raiz TYPE string,
BEGIN OF i_download OCCURS 0,
prog TYPE string,
END OF i_download.
DATA: i_d020s LIKE d020s OCCURS 0 WITH HEADER LINE,
_d021s LIKE d021s OCCURS 0 WITH HEADER LINE,
_flowlogic TYPE dyn_flowlist,
h LIKE d020s.
DATA: mtdkey TYPE seocpdkey,
printer LIKE tsp03-padest,
incname(40).
* Ini : SAYME v 1.2 ------------------ 21.12.2004
DATA say_me_max TYPE i.
DATA say_me_now TYPE i VALUE 0.
DEFINE say_me.
CHECK sy-batch IS INITIAL.
ADD 1 TO say_me_now.
IF say_me_now > say_me_max. say_me_now = 1. ENDIF.
syst-prcop = 100.
IF say_me_max NE 0. syst-prcop = say_me_now * 100 / say_me_max. ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING percentage = syst-prcop
text = &1
EXCEPTIONS OTHERS = 1.
END-OF-DEFINITION.
* Fin : SAYME v 1.2 ------------------ 21.12.2004
INITIALIZATION.
PERFORM text_pool.
*--[ Seleccionamos una impresora de Front-End para imprimir de forma virtual
SELECT SINGLE padest INTO printer FROM tsp03 WHERE patype = 'SAPWIN'.
END-OF-SELECTION.
*--[ Ejemplo de Volcado de pantallas
*h-dnum = '0500'.
*h-prog = 'SAPLS38E'.
*break-point.
*perFORM rs_dynpro_download USING h 't:\002.txt'.
*exit.
*--[ Descargamos Programas
SELECT * FROM tadir INTO TABLE i_tadir
WHERE devclass IN s_pack AND
object IN s_obj AND
obj_name IN s_objn AND
author IN s_author.
DESCRIBE TABLE i_tadir LINES say_me_max.
LOOP AT i_tadir.
say_me i_tadir-obj_name.
CASE i_tadir-object.
WHEN 'DTEL'.
*--[ Elementos de texto
SELECT SINGLE * FROM dd04l WHERE rollname = i_tadir-obj_name.
CONCATENATE 'DTEL' 'TECH' i_tadir-obj_name
dd04l-domname dd04l-datatype dd04l-leng INTO i_list
SEPARATED BY ':'.
APPEND i_list.
SELECT * FROM dd04t WHERE rollname = i_tadir-obj_name.
CONCATENATE 'DTEL' 'LANG' dd04t-ddlanguage dd04t-scrtext_s dd04t-scrtext_m dd04t-scrtext_l INTO i_list SEPARATED BY ':'.
APPEND i_list.
ENDSELECT.
*--[ Descargar Sapscript
WHEN 'FORM'.
CONCATENATE dest 'SAPSCRIPTS\' INTO ss.
CALL METHOD cl_gui_frontend_services=>directory_create
EXPORTING
directory = ss
CHANGING
rc = sy-pagno
EXCEPTIONS
directory_create_failed = 1
cntl_error = 2
error_no_gui = 3
directory_access_denied = 4
directory_already_exists = 5
path_not_found = 6
unknown_error = 7
not_supported_by_gui = 8
wrong_parameter = 9
OTHERS = 10.
CONCATENATE dest 'SAPSCRIPTS\' i_tadir-obj_name '.abp' INTO ss.
SUBMIT rstxscrp WITH localfile = 'X'
WITH dataset = ss
WITH obj_name = i_tadir-obj_name
AND RETURN.
WHEN 'DOMA'.
SELECT SINGLE * FROM dd01l WHERE domname = i_tadir-obj_name.
CONCATENATE 'DOMA' 'TECH' dd01l-datatype dd01l-leng dd01l-decimals INTO i_list SEPARATED BY ':'.
APPEND i_list.
SELECT * FROM dd07l WHERE domname = i_tadir-obj_name.
CONCATENATE 'DOMA' 'VALUE' 'L' dd07l-domvalue_l 'H' dd07l-domvalue_h INTO i_list SEPARATED BY ':'. APPEND i_list.
ENDSELECT.
SELECT * FROM dd04t WHERE rollname = i_tadir-obj_name.
CONCATENATE 'DOMA' 'LANG' dd04t-ddlanguage dd04t-scrtext_s dd04t-scrtext_m dd04t-scrtext_l INTO i_list SEPARATED BY ':'.
APPEND i_list.
ENDSELECT.
WHEN 'TABL'.
CONCATENATE dest '~SE11~' i_tadir-obj_name '.pdf' INTO ss.
TRANSLATE ss USING '/_'.
TRANSLATE ss USING '~/'.
PERFORM print_table USING i_tadir-obj_name.
* SELECT SINGLE * FROM dd02l WHERE tabname = i_tadir-obj_name.
* SELECT SINGLE * FROM dd02t WHERE tabname = i_tadir-obj_name AND ddlanguage = sy-langu.
* CONCATENATE 'TABL' 'TECH' dd02l-tabname dd02l-tabname dd02t-ddtext INTO i_list SEPARATED BY ':'. APPEND i_list.
* SELECT * FROM dd03l WHERE tabname = i_tadir-obj_name.
* CONCATENATE 'TABL' 'FIELD' dd03l-fieldname dd03l-position dd03l-keyflag
* dd03l-rollname dd03l-datatype dd03l-leng dd03l-decimals INTO i_list SEPARATED BY ':'.
* APPEND i_list.
* ENDSELECT.
WHEN 'TRAN'.
SELECT SINGLE * FROM tstc WHERE tcode = i_tadir-obj_name.
CONCATENATE 'TRAN' 'TECH' tstc-tcode tstc-pgmna tstc-dypno INTO i_list SEPARATED BY ':'. APPEND i_list.
WHEN 'PROG'.
READ REPORT i_tadir-obj_name INTO i_prog.
CONCATENATE dest i_tadir-obj_name '.' INTO raiz .
CONCATENATE raiz i_tadir-object INTO ss.
PERFORM download USING ss.
REFRESH i_to_find.
i_to_find = i_tadir-obj_name. APPEND i_to_find.
DATA(l_raiz) = raiz.
raiz = |{ dest }~|.
PERFORM buscar_pantallas USING i_tadir-obj_name.
raiz = l_raiz.
PERFORM buscar_includes.
*--[ SmartForms
WHEN 'SSFO'.
BREAK-POINT.
DATA: formname TYPE tdsfname.
formname = i_tadir-obj_name.
CALL FUNCTION 'FB_DOWNLOAD_FORM'
EXPORTING
i_formname = formname
i_with_dialog = ' '
* IMPORTING
* O_FORMNAME =
EXCEPTIONS
no_name = 1
no_form = 2
no_access_permission = 3
illegal_language = 4
illegal_formtype = 5
OTHERS = 6.
*--[ Es una Clase
WHEN 'CLAS'.
SELECT * FROM seocompodf INTO TABLE i_seocompodf
WHERE clsname = i_tadir-obj_name.
CLEAR c_i_prog. REFRESH i_prog.
*--[ Atributos
DATA: i_seocompo LIKE seocompo OCCURS 0 WITH HEADER LINE,
attr TYPE vseoattrib.
SELECT * FROM seocompo INTO TABLE i_seocompo
WHERE clsname = i_tadir-obj_name AND
cmptype = '0'.
LOOP AT i_seocompo.
AT FIRST.
CONCATENATE i_tadir-obj_name ':Atributos' INTO c_i_prog. APPEND c_i_prog TO i_prog.
ENDAT.
CLEAR c_i_prog.
DATA: attkey TYPE seocmpkey.
attkey-clsname = i_tadir-obj_name.
attkey-cmpname = i_seocompo-cmpname.
CALL FUNCTION 'SEO_ATTRIBUTE_GET'
EXPORTING
attkey = attkey
IMPORTING
attribute = attr.
CASE attr-typtype.
WHEN 0. c_i_prog = 'Privado'.
WHEN 1. c_i_prog = 'Protegido'.
WHEN 2. c_i_prog = 'Publico'.
ENDCASE.
CLEAR ss.
IF NOT attr-attvalue IS INITIAL.
CONCATENATE 'default=' attr-attvalue INTO ss.
ENDIF.
IF NOT attr-descript IS INITIAL.
CONCATENATE ss '(' attr-descript ')' INTO ss.
CONDENSE ss.
ENDIF.
CONCATENATE '~~~~~' i_seocompo-cmpname 'TYPE' attr-type attr-tableof ss
INTO c_i_prog SEPARATED BY ' '.
TRANSLATE c_i_prog USING '~ '. APPEND c_i_prog TO i_prog.
AT LAST.
CLEAR c_i_prog. APPEND c_i_prog TO i_prog.
ENDAT.
ENDLOOP.
*--[ Mtodos
LOOP AT i_seocompodf.
CLEAR c_i_prog.
CASE i_seocompodf-exposure.
WHEN 0. c_i_prog = 'Privado'.
WHEN 1. c_i_prog = 'Protegido'.
WHEN 2. c_i_prog = 'Publico'.
ENDCASE.
CONCATENATE i_tadir-obj_name '=>' i_seocompodf-cmpname ' (' c_i_prog ')' INTO c_i_prog.
APPEND c_i_prog TO: i_prog, i_prog_tmp.
SELECT * FROM seosubco
WHERE clsname = i_tadir-obj_name
AND cmpname = i_seocompodf-cmpname
ORDER BY scotype.
CLEAR c_i_prog.
IF seosubco-scotype IS INITIAL.
CLEAR ss.
SELECT SINGLE * FROM seosubcodf
WHERE clsname = i_tadir-obj_name
AND cmpname = i_seocompodf-cmpname
AND sconame = seosubco-sconame.
CASE seosubcodf-pardecltyp.
WHEN 0. ss = '(IMP)'.
WHEN 1. ss = '(EXP)'.
WHEN 2. ss = '(CHG)'.
WHEN 3. ss = '(RTN)'.
ENDCASE.
CONCATENATE ' Param' ss seosubco-sconame 'TYPE' seosubcodf-type seosubcodf-tableof INTO c_i_prog SEPARATED BY ' '.
ELSE.
CLEAR ss.
CONCATENATE ' Raise' seosubco-sconame INTO c_i_prog SEPARATED BY ' '.
ENDIF.
APPEND c_i_prog TO: i_prog, i_prog_tmp.
ENDSELECT.
*--[ Cdigo Fuente
mtdkey-clsname = i_tadir-obj_name.
mtdkey-cpdname = i_seocompodf-cmpname.
CALL FUNCTION 'SEO_METHOD_GET_SOURCE'
EXPORTING
mtdkey = mtdkey
IMPORTING
incname = incname.
IF NOT incname IS INITIAL.
i_prog_2[] = i_prog[].
READ REPORT incname INTO i_prog.
LOOP AT i_prog INTO c_i_prog.
APPEND c_i_prog TO i_prog_tmp.
ENDLOOP.
i_prog[] = i_prog_tmp[].
CONCATENATE dest 'CLASS~' i_tadir-obj_name '~MTH~' i_seocompodf-cmpname '.abp' INTO ss.
PERFORM download USING ss.
CLEAR i_prog_tmp. REFRESH i_prog_tmp.
i_prog[] = i_prog_2[].
ENDIF.
CLEAR c_i_prog. APPEND c_i_prog TO i_prog.
AT LAST.
CONCATENATE dest 'CLASS~' i_tadir-obj_name '.abp' INTO ss.
PERFORM download USING ss.
ENDAT.
ENDLOOP.
WHEN 'FUGR'.
DATA: i_v_fdir LIKE v_fdir OCCURS 0 WITH HEADER LINE.
REFRESH i_v_fdir.
SELECT * FROM v_fdir INTO TABLE i_v_fdir WHERE area = i_tadir-obj_name.
LOOP AT i_v_fdir INTO v_fdir.
*--[ Evitamos SM30
IF v_fdir-funcname CP 'TABLEFRAME*' OR
v_fdir-funcname CP 'TABLEPROC*' OR
v_fdir-funcname CP 'VIEWFRAME*' OR
v_fdir-funcname CP 'VIEWPROC*'.
CONTINUE.
ENDIF.
SELECT SINGLE * FROM tfdir WHERE funcname = v_fdir-funcname.
READ REPORT tfdir-pname INTO i_prog.
CONCATENATE dest 'FUGR~' i_tadir-obj_name '~PRG~' tfdir-pname '~FUNC~' v_fdir-funcname '.' INTO raiz.
CONCATENATE raiz i_tadir-object INTO ss.
PERFORM download USING ss.
PERFORM buscar_pantallas USING i_tadir-obj_name.
REFRESH i_to_find.
i_to_find = tfdir-pname. APPEND i_to_find.
PERFORM buscar_includes.
ENDLOOP.
WHEN 'MSAG'.
CLEAR c_i_prog. REFRESH i_prog.
SELECT * FROM t100 WHERE arbgb = i_tadir-obj_name.
CONCATENATE '"'t100-sprsl '";"'
t100-arbgb '";"'
t100-msgnr '";"'
t100-text'"' INTO c_i_prog.
APPEND c_i_prog TO i_prog_tmp.
ENDSELECT.
CONCATENATE dest 'MSG~' i_tadir-obj_name '.msg' INTO raiz.
PERFORM download USING ss.
ENDCASE.
ENDLOOP.
CLEAR i_prog.
LOOP AT i_list.
AT FIRST.
CONCATENATE dest 'SE11.lst' INTO ss.
ENDAT.
raiz = i_list.
APPEND raiz TO i_prog.
AT LAST.
PERFORM download USING ss.
ENDAT.
ENDLOOP.
FORM print_table USING nom_obj.
DATA: optgen LIKE ddprtgen,
optitcpo LIKE itcpo,
objlist LIKE ddprtlist OCCURS 0 WITH HEADER LINE.
*--[ Por Defecto
optgen-langu = 'E'.
optgen-device = 'SPOOL'.
optgen-state = 'M'.
*--[ Por Defecto
optitcpo-tdcopies = 1.
optitcpo-tddest = printer.
optitcpo-tddataset = 'LIST1S'.
optitcpo-tdlifetime = 8.
optitcpo-tdreceiver = sy-uname.
optitcpo-tdcover = 'D'.
optitcpo-tdnewid = 'X'.
optitcpo-tdnoprev = 'X'.
optitcpo-tdnoprint = 'X'.
optitcpo-tdimmed = ' '.
*--[ Nombre de la tabla a imprimir
objlist-objtyp = 'TABL'.
objlist-objname = nom_obj.
APPEND objlist.
CALL FUNCTION 'DDIF_OBJECT_PRINT'
EXPORTING
optgen = optgen
optitcpo = optitcpo
TABLES
objlist = objlist.
*--[ Obtenemos el ltimo spool
DATA: rqident LIKE tsp01-rqident.
SELECT * FROM tsp01 WHERE rqowner = sy-uname
ORDER BY rqcretime DESCENDING.
rqident = tsp01-rqident.
EXIT.
ENDSELECT.
DATA: tline LIKE tline OCCURS 0 WITH HEADER LINE.
DATA: data_tab TYPE STANDARD TABLE OF tline.
*--[ Convertimos a PDF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = rqident
no_dialog = 'X'
IMPORTING
pdf_bytecount = sy-pagno
TABLES
pdf = tline.
data_tab[] = tline[].
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = ss
filetype = 'BIN'
CHANGING
data_tab = data_tab.
*--[ Borramos el Spool
DATA: spoolreq LIKE tsp01sys,
rc LIKE rspotype-rc,
status LIKE sy-subrc.
spoolreq-rqident = rqident.
CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ'
EXPORTING
spoolreq = spoolreq
IMPORTING
rc = rc
status = status
EXCEPTIONS
error = 1
OTHERS = 2.
ENDFORM.
FORM buscar_pantallas USING programa.
SELECT * FROM d020s INTO TABLE i_d020s
WHERE prog = programa.
DESCRIBE TABLE i_d020s LINES sy-fdpos.
ADD sy-fdpos TO say_me_max.
LOOP AT i_d020s.
DATA: _file TYPE string.
CONCATENATE raiz programa '~DYNP~' i_d020s-dnum '.dyn' INTO ss.
sy-fdpos = strlen( ss ).
IF sy-fdpos > 126.
CONCATENATE dest programa '~DYNP~' i_d020s-dnum '.dyn' INTO ss.
ENDIF.
_file = ss.
h-dnum = i_d020s-dnum.
h-prog = i_d020s-prog.
say_me ss.
PERFORM rs_dynpro_download USING h _file.
ENDLOOP.
ENDFORM. "buscar_pantallas
FORM rs_dynpro_download USING header LIKE d020s
file TYPE string.
* tables FIELDS like D021S occurs 0
* flowlogic type DYN_FLOWLIST.
CONSTANTS:
stars(64) VALUE
'****************************************************************',
"#EC NOTEXT
comment1(64) VALUE
'* THIS FILE IS GENERATED BY THE SCREEN PAINTER. *',
"#EC NOTEXT
comment2(64) VALUE
'* NEVER CHANGE IT MANUALLY, PLEASE ! *',
"#EC NOTEXT
dynpro_text(8) VALUE '%_DYNPRO', "#EC NOTEXT
header_text(8) VALUE '%_HEADER', "#EC NOTEXT
params_text(8) VALUE '%_PARAMS', "#EC NOTEXT
descript_text(13) VALUE '%_DESCRIPTION', "#EC NOTEXT
fields_text(8) VALUE '%_FIELDS', "#EC NOTEXT
kreuz(1) VALUE 'x', "#EC NOTEXT
flowlogic_text(11) VALUE '%_FLOWLOGIC'. "#EC NOTEXT
DATA: filename TYPE string,
path TYPE string,
fullpath TYPE string,
user_action TYPE i.
DATA: filter TYPE string,
encoding(20),
filelength TYPE i.
DATA header_char LIKE scr_chhead.
DATA dynp_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE.
DATA:
* HEADER LIKE D020S,
* FILE LIKE RLGRAP-FILENAME,
fields LIKE d021s OCCURS 0,
flowlogic TYPE dyn_flowlist,
c_flowlogic LIKE d022s,
t_m LIKE d023s OCCURS 0.
DATA prog_len TYPE p.
DATA fields_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE.
*--[ Preparamos la pantalla
CALL FUNCTION 'RS_SCRP_PREPARE_START'
EXPORTING
i_progname = header-prog
i_dynnr = header-dnum
TABLES
t_f = fields
t_e = flowlogic
t_m = t_m.
*--[
CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR'
EXPORTING
header_int = header
IMPORTING
header_char = header_char
EXCEPTIONS
OTHERS = 1.
REFRESH dynp_char.
* Comment
dynp_char = stars. APPEND dynp_char.
dynp_char = comment1. APPEND dynp_char.
dynp_char = comment2. APPEND dynp_char.
dynp_char = stars. APPEND dynp_char.
* Identification
dynp_char = dynpro_text. APPEND dynp_char. " '%_DYNPRO'
dynp_char = header_char-prog. APPEND dynp_char.
dynp_char = header_char-dnum. APPEND dynp_char.
dynp_char = sy-saprl. APPEND dynp_char.
DESCRIBE FIELD d020t-prog LENGTH prog_len IN CHARACTER MODE.
dynp_char(16) = prog_len. APPEND dynp_char.
* Header
dynp_char = header_text. APPEND dynp_char. " '%_HEADER'
APPEND header_char TO dynp_char.
* Description
* dynp_char = descript_text. APPEND dynp_char. " '%_DESCRIPTION'
* APPEND descript TO dynp_char.
* Fieldlist
dynp_char = fields_text. " '%_FIELDS'
APPEND dynp_char.
CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR'
TABLES
fields_int = fields
fields_char = fields_char
EXCEPTIONS
OTHERS = 1.
LOOP AT fields_char.
APPEND fields_char TO dynp_char.
ENDLOOP.
* Flowlogic
dynp_char = flowlogic_text. " '%_FLOWLOGIC'
APPEND dynp_char.
LOOP AT flowlogic INTO c_flowlogic .
APPEND c_flowlogic TO dynp_char.
ENDLOOP.
fullpath = file.
DATA: down_file TYPE STANDARD TABLE OF string.
LOOP AT dynp_char.
filter = dynp_char.
APPEND filter TO down_file.
ENDLOOP.
TRANSLATE file USING '/_'.
TRANSLATE file USING '~\'.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = file
filetype = 'ASC'
trunc_trailing_blanks = 'X'
IMPORTING
filelength = filelength
CHANGING
data_tab = down_file.
ENDFORM. "rs_dynpro_download
FORM buscar_includes.
DATA: buscar(255), sx TYPE string,
sytabix LIKE sy-tabix.
LOOP AT i_to_find.
sytabix = sy-tabix.
buscar = i_to_find.
CALL FUNCTION 'GET_INCLUDETAB'
EXPORTING
progname = buscar
TABLES
incltab = i_includes.
*--[ Anydimos nuevos includes.
LOOP AT i_includes INTO sx.
i_to_find = sx.
APPEND i_to_find.
ENDLOOP.
*--[ Descargamos actual
CHECK sytabix NE 1.
READ TABLE i_download WITH KEY prog = buscar.
CHECK sy-subrc NE 0.
ADD 1 TO say_me_max.
say_me buscar.
i_download-prog = buscar. APPEND i_download.
READ REPORT buscar INTO i_prog.
CONCATENATE raiz '~' buscar '.abp' INTO ss.
PERFORM download USING ss.
PERFORM buscar_pantallas USING buscar.
ENDLOOP.
ENDFORM. "buscar_includes
FORM download USING destino TYPE string.
READ TABLE i_download WITH KEY prog = destino.
CHECK sy-subrc NE 0.
i_download-prog = ss. APPEND i_download.
TRANSLATE destino USING '/_'.
TRANSLATE destino USING '~\'.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = destino
filetype = 'ASC'
confirm_overwrite = space
CHANGING
data_tab = i_prog
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
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
ENDFORM. "download
FORM text_pool.
DATA: texttab LIKE textpool OCCURS 0 WITH HEADER LINE.
READ TEXTPOOL sy-repid INTO texttab LANGUAGE sy-langu.
LOOP AT texttab.
CASE texttab-id.
WHEN 'R'.
CONCATENATE 'SAPCrawler :: MassDownloader' version INTO texttab-entry
SEPARATED BY ' '.
WHEN 'S'.
CASE texttab-key.
WHEN 'S_PACK'. texttab-entry = ' Paquete'. "<- Espacios Obligatorios
WHEN 'S_OBJ'. texttab-entry = ' Objeto'.. "<- Espacios Obligatorios
WHEN 'S_OBJN'.texttab-entry = ' Nombre objeto'.. "<- Espacios Obligatorios
WHEN 'S_AUTHOR'.texttab-entry = ' Usuario/Autor'.. "<- Espacios Obligatorios
WHEN 'DEST'. texttab-entry = ' Directorio Destino'.
ENDCASE.
ENDCASE.
CLEAR texttab-length. " = 255.
MODIFY texttab INDEX sy-tabix.
ENDLOOP.
INSERT TEXTPOOL sy-repid FROM texttab LANGUAGE sy-langu STATE 'A'.
ENDFORM.