REPORT z_sapcrawler.
* 1.0.1 - Añadida descarga de pantallas
* 1.0.2 - Añadida rutina de cambio de parmetros y ttulo
* 1.0.3 - Añadimos ms parmetros a la seleccin
* 1.0.4 - Añadimos las descargas de las clases
* 1.0.5 - Añadimos estructura jerarquica de directorios
* 1.0.6 - Evitamos descargar los includes ya descargados y las vistas VIEWFRAME y VIEWPROC.
* Añadirmos 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 - Añadimos los mensajes (SE91)
CONSTANTS version(10) VALUE 'v1.0.9'.
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.
PERFORM buscar_pantallas USING i_tadir-object.
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-object.
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
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PROGRAMA text
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->HEADER text
* -->FILE text
*----------------------------------------------------------------------*
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.
** Dynpro Parameters
* IF params IS REQUESTED.
* dynp_char = params_text.
* APPEND dynp_char.
*
* LOOP AT params.
* APPEND params TO dynp_char.
* ENDLOOP.
* ENDIF.
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.
* CALL FUNCTION 'GUI_DOWNLOAD'
* EXPORTING
* filename = fullpath
* filetype = 'ASC'
* write_field_separator = 'X'
* trunc_trailing_blanks = 'X'
* codepage = encoding
* IMPORTING
* filelength = filelength
* TABLES
* data_tab = dynp_char
* EXCEPTIONS
* OTHERS = 1.
ENDFORM. "rs_dynpro_download
*&---------------------------------------------------------------------*
*& Form buscar_includes
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
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.
*--[ Añadimos 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
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
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.