ABAP Prog Standar Down ALL

  1. REPORT  z_sapcrawler.
  2.  
  3. * 1.0.1 - Anydida descarga de pantallas
  4. * 1.0.2 - Anydida rutina de cambio de parmetros y ttulo
  5. * 1.0.3 - Anydimos ms parmetros a la seleccin
  6. * 1.0.4 - Anydimos las descargas de las clases
  7. * 1.0.5 - Anydimos estructura jerarquica de directorios
  8. * 1.0.6 - Evitamos descargar los includes ya descargados y las vistas VIEWFRAME y VIEWPROC.
  9. *         Anydirmos Busqueda por autor.
  10. *         Arreglado bug de SE11
  11. * 1.0.7 - Descarga las tablas como PDF
  12. *       - Descarga SmartForms en XML ** Problemas de dilogo.
  13. *       - Descarga SapScripts
  14. * 1.0.8 - Buscamos la impresora SAPWIN para simular LOCL
  15. *       - Eliminamos los spools que hemos creado.
  16. * 1.0.9 - Anydimos los mensajes (SE91)
  17. * 1.0.10 - Arreglado error de descarga de las pantallas
  18.  
  19. CONSTANTS version(10) VALUE 'v1.0.10'.
  20.  
  21. TABLES:
  22. *--[ Tabla de Spool
  23.   tsp01,
  24. *--[ Objetos
  25.   tadir,
  26. *--[ Diccionario
  27.   dd04l, dd04t, dd07l, dd07t, dd01l, dd02l, dd03l, dd02t,
  28. *--[ Transacciones
  29.   tstc,
  30. *--[ Funciones
  31.   v_fdir, tfdir,
  32. *--[Pantallas
  33.   d020s, d020t,
  34. *--[ Mensajes
  35.   t100,
  36. *--[ Clases
  37.   seosubco,
  38.   seocompo,
  39.   seocompodf,
  40.   seosubcodf.
  41.  
  42. SELECT-OPTIONS: s_pack FOR tadir-devclass,
  43.                 s_obj  FOR tadir-object,
  44.                 s_objn  FOR tadir-obj_name,
  45.                 s_author FOR tadir-author.
  46.  
  47. SELECTION-SCREEN SKIP 1.
  48. PARAMETERS dest(80) DEFAULT 'T:\'.
  49.  
  50. *--[ Variables
  51. DATA: i_tadir LIKE tadir OCCURS 0 WITH HEADER LINE.
  52. DATA: i_list TYPE string OCCURS 0 WITH HEADER LINE.
  53. DATA: i_prog TYPE STANDARD TABLE OF string.
  54. DATA: i_prog_2 TYPE STANDARD TABLE OF string.
  55. DATA: i_prog_tmp TYPE STANDARD TABLE OF string.
  56. DATA: c_i_prog TYPE string.
  57. DATA: i_to_find TYPE string OCCURS 0 WITH HEADER LINE.
  58. DATA: i_includes(255) OCCURS 0 WITH HEADER LINE.
  59. DATA: i_seocompodf LIKE seocompodf OCCURS 0  WITH HEADER LINE.
  60. DATA: ss TYPE string.
  61. DATA: raiz TYPE string,
  62.       BEGIN OF i_download OCCURS 0,
  63.         prog TYPE string,
  64.       END OF i_download.
  65. DATA: i_d020s    LIKE d020s OCCURS 0 WITH HEADER LINE,
  66.       _d021s     LIKE d021s  OCCURS 0 WITH HEADER LINE,
  67.       _flowlogic TYPE dyn_flowlist,
  68.       h          LIKE d020s.
  69. DATA: mtdkey      TYPE seocpdkey,
  70.       printer     LIKE tsp03-padest,
  71.       incname(40).
  72.  
  73. * Ini : SAYME v 1.2 ------------------ 21.12.2004
  74. DATA say_me_max TYPE i.
  75. DATA say_me_now TYPE i VALUE 0.
  76. DEFINE say_me.
  77.   CHECK sy-batch IS INITIAL.
  78.   ADD 1 TO say_me_now.
  79.   IF say_me_now > say_me_max. say_me_now = 1. ENDIF.
  80.   syst-prcop = 100.
  81.   IF say_me_max NE 0.  syst-prcop = say_me_now * 100 / say_me_max. ENDIF.
  82.   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  83.   EXPORTING  percentage = syst-prcop
  84.              text       = &1
  85.   EXCEPTIONS OTHERS     = 1.
  86. END-OF-DEFINITION.
  87. * Fin : SAYME v 1.2  ------------------ 21.12.2004
  88.  
  89.  
  90. INITIALIZATION.
  91.   PERFORM text_pool.
  92. *--[ Seleccionamos una impresora de Front-End para imprimir de forma virtual
  93.   SELECT SINGLE padest INTO printer FROM tsp03 WHERE patype = 'SAPWIN'.
  94.  
  95. END-OF-SELECTION.
  96.  
  97. *--[ Ejemplo de Volcado de pantallas
  98. *h-dnum = '0500'.
  99. *h-prog = 'SAPLS38E'.
  100. *break-point.
  101. *perFORM rs_dynpro_download USING h 't:\002.txt'.
  102. *exit.
  103.  
  104. *--[ Descargamos Programas
  105.   SELECT        * FROM  tadir INTO TABLE i_tadir
  106.          WHERE  devclass  IN s_pack  AND
  107.                 object    IN s_obj   AND
  108.                 obj_name  IN s_objn  AND
  109.                 author    IN s_author.
  110.   DESCRIBE TABLE i_tadir LINES say_me_max.
  111.   LOOP AT i_tadir.
  112.     say_me i_tadir-obj_name.
  113.     CASE i_tadir-object.
  114.       WHEN 'DTEL'.
  115. *--[ Elementos de texto
  116.         SELECT SINGLE        * FROM  dd04l WHERE rollname = i_tadir-obj_name.
  117.         CONCATENATE 'DTEL' 'TECH' i_tadir-obj_name
  118.         dd04l-domname dd04l-datatype dd04l-leng INTO i_list
  119.            SEPARATED BY ':'.
  120.         APPEND i_list.
  121.         SELECT * FROM dd04t WHERE rollname = i_tadir-obj_name.
  122.           CONCATENATE 'DTEL' 'LANG' dd04t-ddlanguage dd04t-scrtext_s dd04t-scrtext_m dd04t-scrtext_l INTO i_list SEPARATED BY ':'.
  123.           APPEND i_list.
  124.         ENDSELECT.
  125. *--[ Descargar Sapscript
  126.       WHEN 'FORM'.
  127.         CONCATENATE dest 'SAPSCRIPTS\' INTO ss.
  128.  
  129.         CALL METHOD cl_gui_frontend_services=>directory_create
  130.           EXPORTING
  131.             directory                = ss
  132.           CHANGING
  133.             rc                       = sy-pagno
  134.           EXCEPTIONS
  135.             directory_create_failed  = 1
  136.             cntl_error               = 2
  137.             error_no_gui             = 3
  138.             directory_access_denied  = 4
  139.             directory_already_exists = 5
  140.             path_not_found           = 6
  141.             unknown_error            = 7
  142.             not_supported_by_gui     = 8
  143.             wrong_parameter          = 9
  144.             OTHERS                   = 10.
  145.         CONCATENATE dest 'SAPSCRIPTS\' i_tadir-obj_name '.abp' INTO ss.
  146.         SUBMIT rstxscrp WITH localfile = 'X'
  147.                     WITH dataset = ss
  148.                         WITH obj_name = i_tadir-obj_name
  149.                         AND RETURN.
  150.       WHEN 'DOMA'.
  151.         SELECT SINGLE * FROM dd01l WHERE domname = i_tadir-obj_name.
  152.         CONCATENATE 'DOMA' 'TECH' dd01l-datatype dd01l-leng dd01l-decimals INTO i_list SEPARATED BY ':'.
  153.         APPEND i_list.
  154.         SELECT * FROM  dd07l WHERE domname = i_tadir-obj_name.
  155.           CONCATENATE 'DOMA' 'VALUE' 'L' dd07l-domvalue_l 'H' dd07l-domvalue_h INTO i_list SEPARATED BY ':'. APPEND i_list.
  156.  
  157.         ENDSELECT.
  158.         SELECT * FROM dd04t WHERE rollname = i_tadir-obj_name.
  159.           CONCATENATE 'DOMA' 'LANG' dd04t-ddlanguage dd04t-scrtext_s dd04t-scrtext_m dd04t-scrtext_l INTO i_list SEPARATED BY ':'.
  160.           APPEND i_list.
  161.         ENDSELECT.
  162.       WHEN 'TABL'.
  163.         CONCATENATE dest '~SE11~' i_tadir-obj_name '.pdf' INTO ss.
  164.         TRANSLATE ss USING '/_'.
  165.         TRANSLATE ss USING '~/'.
  166.         PERFORM print_table USING i_tadir-obj_name.
  167.  
  168. *        SELECT SINGLE * FROM dd02l WHERE tabname = i_tadir-obj_name.
  169. *        SELECT SINGLE * FROM dd02t WHERE tabname = i_tadir-obj_name AND ddlanguage = sy-langu.
  170. *        CONCATENATE 'TABL' 'TECH' dd02l-tabname dd02l-tabname dd02t-ddtext INTO i_list SEPARATED BY ':'. APPEND i_list.
  171. *        SELECT * FROM dd03l WHERE tabname = i_tadir-obj_name.
  172. *          CONCATENATE 'TABL' 'FIELD' dd03l-fieldname dd03l-position dd03l-keyflag
  173. *          dd03l-rollname dd03l-datatype dd03l-leng dd03l-decimals   INTO i_list SEPARATED BY ':'.
  174. *          APPEND i_list.
  175. *        ENDSELECT.
  176.       WHEN 'TRAN'.
  177.         SELECT SINGLE * FROM tstc WHERE tcode = i_tadir-obj_name.
  178.         CONCATENATE 'TRAN' 'TECH' tstc-tcode tstc-pgmna tstc-dypno INTO i_list SEPARATED BY ':'. APPEND i_list.
  179.       WHEN 'PROG'.
  180.         READ REPORT i_tadir-obj_name INTO i_prog.
  181.         CONCATENATE dest i_tadir-obj_name '.' INTO raiz .
  182.         CONCATENATE raiz i_tadir-object INTO ss.
  183.         PERFORM download USING ss.
  184.         REFRESH i_to_find.
  185.         i_to_find = i_tadir-obj_name. APPEND i_to_find.
  186.         DATA(l_raiz) = raiz.
  187.         raiz = |{ dest }~|.
  188.         PERFORM buscar_pantallas USING i_tadir-obj_name.
  189.         raiz = l_raiz.
  190.         PERFORM buscar_includes.
  191. *--[ SmartForms
  192.       WHEN 'SSFO'.
  193.         BREAK-POINT.
  194.         DATA: formname TYPE tdsfname.
  195.         formname = i_tadir-obj_name.
  196.         CALL FUNCTION 'FB_DOWNLOAD_FORM'
  197.           EXPORTING
  198.             i_formname           = formname
  199.             i_with_dialog        = ' '
  200. *           IMPORTING
  201. *           O_FORMNAME           =
  202.           EXCEPTIONS
  203.             no_name              = 1
  204.             no_form              = 2
  205.             no_access_permission = 3
  206.             illegal_language     = 4
  207.             illegal_formtype     = 5
  208.             OTHERS               = 6.
  209.  
  210. *--[ Es una Clase
  211.       WHEN 'CLAS'.
  212.         SELECT * FROM  seocompodf INTO TABLE i_seocompodf
  213.                WHERE  clsname  = i_tadir-obj_name.
  214.         CLEAR c_i_prog. REFRESH i_prog.
  215. *--[ Atributos
  216.         DATA: i_seocompo LIKE seocompo OCCURS 0 WITH HEADER LINE,
  217.               attr       TYPE vseoattrib.
  218.  
  219.         SELECT * FROM  seocompo INTO TABLE i_seocompo
  220.                  WHERE clsname = i_tadir-obj_name AND
  221.                                       cmptype = '0'.
  222.         LOOP AT i_seocompo.
  223.           AT FIRST.
  224.             CONCATENATE i_tadir-obj_name ':Atributos'   INTO c_i_prog. APPEND c_i_prog TO i_prog.
  225.           ENDAT.
  226.           CLEAR c_i_prog.
  227.  
  228.           DATA: attkey TYPE seocmpkey.
  229.           attkey-clsname = i_tadir-obj_name.
  230.           attkey-cmpname = i_seocompo-cmpname.
  231.           CALL FUNCTION 'SEO_ATTRIBUTE_GET'
  232.             EXPORTING
  233.               attkey    = attkey
  234.             IMPORTING
  235.               attribute = attr.
  236.  
  237.           CASE attr-typtype.
  238.             WHEN 0. c_i_prog = 'Privado'.
  239.             WHEN 1. c_i_prog = 'Protegido'.
  240.             WHEN 2. c_i_prog = 'Publico'.
  241.           ENDCASE.
  242.           CLEAR ss.
  243.           IF NOT attr-attvalue IS INITIAL.
  244.             CONCATENATE 'default=' attr-attvalue INTO ss.
  245.           ENDIF.
  246.           IF NOT attr-descript IS INITIAL.
  247.             CONCATENATE ss '(' attr-descript ')' INTO ss.
  248.             CONDENSE ss.
  249.           ENDIF.
  250.           CONCATENATE '~~~~~' i_seocompo-cmpname 'TYPE' attr-type attr-tableof  ss
  251.                    INTO  c_i_prog SEPARATED BY ' '.
  252.           TRANSLATE c_i_prog USING '~ '. APPEND c_i_prog TO i_prog.
  253.           AT LAST.
  254.             CLEAR c_i_prog. APPEND c_i_prog TO i_prog.
  255.           ENDAT.
  256.         ENDLOOP.
  257.  
  258. *--[ Mtodos
  259.  
  260.         LOOP AT i_seocompodf.
  261.  
  262.           CLEAR c_i_prog.
  263.           CASE i_seocompodf-exposure.
  264.             WHEN 0. c_i_prog = 'Privado'.
  265.             WHEN 1. c_i_prog = 'Protegido'.
  266.             WHEN 2. c_i_prog = 'Publico'.
  267.           ENDCASE.
  268.           CONCATENATE i_tadir-obj_name '=>' i_seocompodf-cmpname ' (' c_i_prog ')' INTO c_i_prog.
  269.           APPEND c_i_prog TO: i_prog, i_prog_tmp.
  270.           SELECT        * FROM  seosubco
  271.                  WHERE  clsname  = i_tadir-obj_name
  272.                  AND    cmpname  = i_seocompodf-cmpname
  273.                  ORDER BY scotype.
  274.             CLEAR c_i_prog.
  275.             IF seosubco-scotype IS INITIAL.
  276.               CLEAR ss.
  277.               SELECT SINGLE * FROM  seosubcodf
  278.                      WHERE  clsname  = i_tadir-obj_name
  279.                      AND    cmpname  = i_seocompodf-cmpname
  280.                      AND    sconame = seosubco-sconame.
  281.               CASE seosubcodf-pardecltyp.
  282.                 WHEN 0. ss = '(IMP)'.
  283.                 WHEN 1. ss = '(EXP)'.
  284.                 WHEN 2. ss = '(CHG)'.
  285.                 WHEN 3. ss = '(RTN)'.
  286.               ENDCASE.
  287.               CONCATENATE '     Param' ss seosubco-sconame 'TYPE' seosubcodf-type seosubcodf-tableof INTO c_i_prog SEPARATED BY ' '.
  288.             ELSE.
  289.               CLEAR ss.
  290.               CONCATENATE '     Raise' seosubco-sconame  INTO c_i_prog SEPARATED BY ' '.
  291.             ENDIF.
  292.             APPEND c_i_prog TO: i_prog, i_prog_tmp.
  293.           ENDSELECT.
  294.  
  295. *--[ Cdigo Fuente
  296.  
  297.           mtdkey-clsname = i_tadir-obj_name.
  298.           mtdkey-cpdname = i_seocompodf-cmpname.
  299.           CALL FUNCTION 'SEO_METHOD_GET_SOURCE'
  300.             EXPORTING
  301.               mtdkey  = mtdkey
  302.             IMPORTING
  303.               incname = incname.
  304.           IF NOT incname IS INITIAL.
  305.             i_prog_2[] = i_prog[].
  306.             READ REPORT incname INTO i_prog.
  307.             LOOP AT i_prog INTO c_i_prog.
  308.               APPEND c_i_prog TO i_prog_tmp.
  309.             ENDLOOP.
  310.             i_prog[] = i_prog_tmp[].
  311.             CONCATENATE dest 'CLASS~' i_tadir-obj_name '~MTH~' i_seocompodf-cmpname '.abp' INTO ss.
  312.             PERFORM download USING ss.
  313.             CLEAR i_prog_tmp. REFRESH i_prog_tmp.
  314.             i_prog[] = i_prog_2[].
  315.           ENDIF.
  316.           CLEAR c_i_prog. APPEND c_i_prog TO i_prog.
  317.           AT LAST.
  318.  
  319.             CONCATENATE dest 'CLASS~' i_tadir-obj_name '.abp' INTO ss.
  320.             PERFORM download USING ss.
  321.           ENDAT.
  322.         ENDLOOP.
  323.  
  324.  
  325.       WHEN 'FUGR'.
  326.  
  327.         DATA: i_v_fdir LIKE v_fdir OCCURS 0 WITH HEADER LINE.
  328.         REFRESH i_v_fdir.
  329.         SELECT * FROM v_fdir INTO TABLE i_v_fdir WHERE area = i_tadir-obj_name.
  330.         LOOP AT i_v_fdir INTO v_fdir.
  331. *--[ Evitamos SM30
  332.           IF v_fdir-funcname CP 'TABLEFRAME*' OR
  333.              v_fdir-funcname CP 'TABLEPROC*' OR
  334.              v_fdir-funcname CP 'VIEWFRAME*' OR
  335.              v_fdir-funcname CP 'VIEWPROC*'.
  336.             CONTINUE.
  337.           ENDIF.
  338.           SELECT SINGLE * FROM tfdir WHERE funcname = v_fdir-funcname.
  339.           READ REPORT tfdir-pname INTO i_prog.
  340.           CONCATENATE dest 'FUGR~' i_tadir-obj_name '~PRG~' tfdir-pname '~FUNC~' v_fdir-funcname '.' INTO raiz.
  341.           CONCATENATE raiz i_tadir-object INTO ss.
  342.           PERFORM download USING ss.
  343.           PERFORM buscar_pantallas USING i_tadir-obj_name.
  344.           REFRESH i_to_find.
  345.           i_to_find = tfdir-pname. APPEND i_to_find.
  346.           PERFORM buscar_includes.
  347.         ENDLOOP.
  348.       WHEN 'MSAG'.
  349.         CLEAR c_i_prog. REFRESH i_prog.
  350.         SELECT * FROM  t100 WHERE  arbgb  = i_tadir-obj_name.
  351.           CONCATENATE '"'t100-sprsl '";"'
  352.                          t100-arbgb '";"'
  353.                          t100-msgnr '";"'
  354.                          t100-text'"' INTO c_i_prog.
  355.           APPEND c_i_prog TO i_prog_tmp.
  356.         ENDSELECT.
  357.         CONCATENATE dest 'MSG~' i_tadir-obj_name '.msg' INTO raiz.
  358.         PERFORM download USING ss.
  359.     ENDCASE.
  360.   ENDLOOP.
  361.  
  362.   CLEAR i_prog.
  363.   LOOP AT i_list.
  364.     AT FIRST.
  365.       CONCATENATE dest 'SE11.lst' INTO ss.
  366.     ENDAT.
  367.     raiz = i_list.
  368.     APPEND raiz TO i_prog.
  369.     AT LAST.
  370.       PERFORM download USING ss.
  371.     ENDAT.
  372.   ENDLOOP.
  373.  
  374. FORM print_table USING nom_obj.
  375.   DATA: optgen   LIKE ddprtgen,
  376.         optitcpo LIKE itcpo,
  377.         objlist  LIKE ddprtlist OCCURS 0 WITH HEADER LINE.
  378. *--[ Por Defecto
  379.   optgen-langu = 'E'.
  380.   optgen-device = 'SPOOL'.
  381.   optgen-state = 'M'.
  382.  
  383. *--[ Por Defecto
  384.   optitcpo-tdcopies = 1.
  385.  
  386.   optitcpo-tddest = printer.
  387.   optitcpo-tddataset = 'LIST1S'.
  388.   optitcpo-tdlifetime = 8.
  389.   optitcpo-tdreceiver = sy-uname.
  390.   optitcpo-tdcover = 'D'.
  391.   optitcpo-tdnewid = 'X'.
  392.   optitcpo-tdnoprev = 'X'.
  393.   optitcpo-tdnoprint = 'X'.
  394.   optitcpo-tdimmed = ' '.
  395.  
  396. *--[ Nombre de la tabla a imprimir
  397.   objlist-objtyp = 'TABL'.
  398.   objlist-objname = nom_obj.
  399.   APPEND objlist.
  400.  
  401.   CALL FUNCTION 'DDIF_OBJECT_PRINT'
  402.     EXPORTING
  403.       optgen   = optgen
  404.       optitcpo = optitcpo
  405.     TABLES
  406.       objlist  = objlist.
  407.  
  408. *--[ Obtenemos el ltimo spool
  409.   DATA: rqident LIKE tsp01-rqident.
  410.  
  411.   SELECT * FROM  tsp01 WHERE rqowner = sy-uname
  412.               ORDER BY rqcretime DESCENDING.
  413.     rqident = tsp01-rqident.
  414.     EXIT.
  415.   ENDSELECT.
  416.   DATA: tline LIKE tline OCCURS 0 WITH HEADER LINE.
  417.   DATA: data_tab TYPE STANDARD TABLE OF tline.
  418. *--[ Convertimos a PDF
  419.   CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
  420.     EXPORTING
  421.       src_spoolid   = rqident
  422.       no_dialog     = 'X'
  423.     IMPORTING
  424.       pdf_bytecount = sy-pagno
  425.     TABLES
  426.       pdf           = tline.
  427.   data_tab[] = tline[].
  428.   CALL METHOD cl_gui_frontend_services=>gui_download
  429.     EXPORTING
  430.       filename = ss
  431.       filetype = 'BIN'
  432.     CHANGING
  433.       data_tab = data_tab.
  434.  
  435. *--[ Borramos el Spool
  436.   DATA: spoolreq LIKE  tsp01sys,
  437.         rc       LIKE  rspotype-rc,
  438.         status   LIKE  sy-subrc.
  439.   spoolreq-rqident = rqident.
  440.   CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ'
  441.     EXPORTING
  442.       spoolreq = spoolreq
  443.     IMPORTING
  444.       rc       = rc
  445.       status   = status
  446.     EXCEPTIONS
  447.       error    = 1
  448.       OTHERS   = 2.
  449. ENDFORM.
  450.  
  451. FORM buscar_pantallas USING programa.
  452.  
  453.   SELECT        * FROM  d020s INTO TABLE i_d020s
  454.          WHERE  prog  = programa.
  455.   DESCRIBE TABLE i_d020s LINES sy-fdpos.
  456.   ADD sy-fdpos TO say_me_max.
  457.   LOOP AT i_d020s.
  458.     DATA: _file TYPE string.
  459.     CONCATENATE raiz programa '~DYNP~' i_d020s-dnum '.dyn' INTO ss.
  460.     sy-fdpos = strlen( ss ).
  461.     IF sy-fdpos > 126.
  462.       CONCATENATE dest programa '~DYNP~' i_d020s-dnum '.dyn' INTO ss.
  463.     ENDIF.
  464.     _file = ss.
  465.     h-dnum = i_d020s-dnum.
  466.     h-prog = i_d020s-prog.
  467.     say_me ss.
  468.     PERFORM rs_dynpro_download USING h _file.
  469.  
  470.   ENDLOOP.
  471.  
  472. ENDFORM.                    "buscar_pantallas
  473.  
  474. FORM rs_dynpro_download USING header LIKE d020s
  475.                               file   TYPE string.
  476. *                       tables FIELDS like D021S occurs 0
  477. *                              flowlogic type DYN_FLOWLIST.
  478.   CONSTANTS:
  479.     stars(64)          VALUE
  480.                          '****************************************************************',
  481.                                                             "#EC NOTEXT
  482.     comment1(64)       VALUE
  483.                          '*   THIS FILE IS GENERATED BY THE SCREEN PAINTER.              *',
  484.                                                             "#EC NOTEXT
  485.     comment2(64)       VALUE
  486.                          '*   NEVER CHANGE IT MANUALLY, PLEASE !                         *',
  487.                                                             "#EC NOTEXT
  488.     dynpro_text(8)     VALUE '%_DYNPRO',                    "#EC NOTEXT
  489.     header_text(8)     VALUE '%_HEADER',                    "#EC NOTEXT
  490.     params_text(8)     VALUE '%_PARAMS',                    "#EC NOTEXT
  491.     descript_text(13)  VALUE '%_DESCRIPTION',               "#EC NOTEXT
  492.     fields_text(8)     VALUE '%_FIELDS',                    "#EC NOTEXT
  493.     kreuz(1)           VALUE 'x',                           "#EC NOTEXT
  494.     flowlogic_text(11) VALUE '%_FLOWLOGIC'.                 "#EC NOTEXT
  495.  
  496.   DATA: filename    TYPE string,
  497.         path        TYPE string,
  498.         fullpath    TYPE string,
  499.         user_action TYPE i.
  500.   DATA: filter       TYPE string,
  501.         encoding(20),
  502.         filelength   TYPE i.
  503.   DATA  header_char LIKE scr_chhead.
  504.   DATA  dynp_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE.
  505.   DATA:
  506. *     HEADER LIKE  D020S,
  507. *     FILE LIKE  RLGRAP-FILENAME,
  508.     fields      LIKE d021s OCCURS 0,
  509.     flowlogic   TYPE dyn_flowlist,
  510.     c_flowlogic LIKE d022s,
  511.     t_m         LIKE d023s OCCURS 0.
  512.  
  513.   DATA  prog_len     TYPE p.
  514.   DATA  fields_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE.
  515.  
  516.  
  517. *--[ Preparamos la pantalla
  518.   CALL FUNCTION 'RS_SCRP_PREPARE_START'
  519.     EXPORTING
  520.       i_progname = header-prog
  521.       i_dynnr    = header-dnum
  522.     TABLES
  523.       t_f        = fields
  524.       t_e        = flowlogic
  525.       t_m        = t_m.
  526. *--[
  527.  
  528.   CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR'
  529.     EXPORTING
  530.       header_int  = header
  531.     IMPORTING
  532.       header_char = header_char
  533.     EXCEPTIONS
  534.       OTHERS      = 1.
  535.  
  536.   REFRESH dynp_char.
  537.  
  538. * Comment
  539.   dynp_char = stars.    APPEND dynp_char.
  540.   dynp_char = comment1. APPEND dynp_char.
  541.   dynp_char = comment2. APPEND dynp_char.
  542.   dynp_char = stars.    APPEND dynp_char.
  543.  
  544. * Identification
  545.   dynp_char = dynpro_text.      APPEND dynp_char.          "  '%_DYNPRO'
  546.   dynp_char = header_char-prog. APPEND dynp_char.
  547.   dynp_char = header_char-dnum. APPEND dynp_char.
  548.   dynp_char = sy-saprl.         APPEND dynp_char.
  549.   DESCRIBE FIELD d020t-prog LENGTH prog_len IN CHARACTER MODE.
  550.   dynp_char(16) = prog_len.      APPEND dynp_char.
  551.  
  552. * Header
  553.   dynp_char = header_text.      APPEND dynp_char.     "  '%_HEADER'
  554.   APPEND header_char TO dynp_char.
  555.  
  556. * Description
  557. *  dynp_char = descript_text.    APPEND dynp_char.     "  '%_DESCRIPTION'
  558. *  APPEND descript TO dynp_char.
  559.  
  560. * Fieldlist
  561.   dynp_char = fields_text.          "  '%_FIELDS'
  562.   APPEND dynp_char.
  563.   CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR'
  564.     TABLES
  565.       fields_int  = fields
  566.       fields_char = fields_char
  567.     EXCEPTIONS
  568.       OTHERS      = 1.
  569.  
  570.   LOOP AT fields_char.
  571.     APPEND fields_char TO dynp_char.
  572.   ENDLOOP.
  573.  
  574. * Flowlogic
  575.   dynp_char = flowlogic_text.         "  '%_FLOWLOGIC'
  576.   APPEND dynp_char.
  577.  
  578.   LOOP AT flowlogic INTO c_flowlogic .
  579.     APPEND c_flowlogic TO dynp_char.
  580.   ENDLOOP.
  581.  
  582.   fullpath = file.
  583.   DATA: down_file TYPE STANDARD TABLE OF string.
  584.   LOOP AT dynp_char.
  585.     filter = dynp_char.
  586.     APPEND filter TO down_file.
  587.   ENDLOOP.
  588.   TRANSLATE file USING '/_'.
  589.   TRANSLATE file USING '~\'.
  590.   CALL METHOD cl_gui_frontend_services=>gui_download
  591.     EXPORTING
  592.       filename              = file
  593.       filetype              = 'ASC'
  594.       trunc_trailing_blanks = 'X'
  595.     IMPORTING
  596.       filelength            = filelength
  597.     CHANGING
  598.       data_tab              = down_file.
  599.  
  600. ENDFORM.                    "rs_dynpro_download
  601.  
  602. FORM buscar_includes.
  603.   DATA: buscar(255), sx TYPE string,
  604.   sytabix LIKE sy-tabix.
  605.   LOOP AT i_to_find.
  606.     sytabix = sy-tabix.
  607.     buscar = i_to_find.
  608.     CALL FUNCTION 'GET_INCLUDETAB'
  609.       EXPORTING
  610.         progname = buscar
  611.       TABLES
  612.         incltab  = i_includes.
  613. *--[ Anydimos nuevos includes.
  614.     LOOP AT i_includes INTO sx.
  615.       i_to_find = sx.
  616.       APPEND i_to_find.
  617.     ENDLOOP.
  618. *--[ Descargamos actual
  619.     CHECK sytabix NE 1.
  620.  
  621.     READ TABLE i_download WITH KEY prog = buscar.
  622.     CHECK sy-subrc NE 0.
  623.     ADD 1 TO say_me_max.
  624.     say_me buscar.
  625.     i_download-prog = buscar. APPEND i_download.
  626.     READ REPORT buscar INTO i_prog.
  627.     CONCATENATE raiz '~' buscar '.abp' INTO ss.
  628.     PERFORM download USING ss.
  629.     PERFORM buscar_pantallas USING buscar.
  630.   ENDLOOP.
  631. ENDFORM.                    "buscar_includes
  632.  
  633.  
  634. FORM download USING destino TYPE string.
  635.  
  636.   READ TABLE i_download WITH KEY prog = destino.
  637.   CHECK sy-subrc NE 0.
  638.   i_download-prog = ss. APPEND i_download.
  639.   TRANSLATE destino USING '/_'.
  640.   TRANSLATE destino USING '~\'.
  641.   CALL METHOD cl_gui_frontend_services=>gui_download
  642.     EXPORTING
  643.       filename                = destino
  644.       filetype                = 'ASC'
  645.       confirm_overwrite       = space
  646.     CHANGING
  647.       data_tab                = i_prog
  648.     EXCEPTIONS
  649.       file_write_error        = 1
  650.       no_batch                = 2
  651.       gui_refuse_filetransfer = 3
  652.       invalid_type            = 4
  653.       no_authority            = 5
  654.       unknown_error           = 6
  655.       header_not_allowed      = 7
  656.       separator_not_allowed   = 8
  657.       filesize_not_allowed    = 9
  658.       header_too_long         = 10
  659.       dp_error_create         = 11
  660.       dp_error_send           = 12
  661.       dp_error_write          = 13
  662.       unknown_dp_error        = 14
  663.       access_denied           = 15
  664.       dp_out_of_memory        = 16
  665.       disk_full               = 17
  666.       dp_timeout              = 18
  667.       file_not_found          = 19
  668.       dataprovider_exception  = 20
  669.       control_flush_error     = 21
  670.       not_supported_by_gui    = 22
  671.       error_no_gui            = 23
  672.       OTHERS                  = 24.
  673. ENDFORM.                    "download
  674.  
  675. FORM text_pool.
  676.   DATA: texttab LIKE textpool OCCURS 0 WITH HEADER LINE.
  677.  
  678.   READ TEXTPOOL sy-repid INTO texttab LANGUAGE sy-langu.
  679.  
  680.   LOOP AT texttab.
  681.     CASE texttab-id.
  682.       WHEN 'R'.
  683.         CONCATENATE 'SAPCrawler :: MassDownloader' version INTO texttab-entry
  684.         SEPARATED BY ' '.
  685.       WHEN 'S'.
  686.         CASE texttab-key.
  687.           WHEN 'S_PACK'. texttab-entry = '        Paquete'. "<- Espacios Obligatorios
  688.           WHEN 'S_OBJ'. texttab-entry = '        Objeto'.. "<- Espacios Obligatorios
  689.           WHEN 'S_OBJN'.texttab-entry = '        Nombre objeto'.. "<- Espacios Obligatorios
  690.           WHEN 'S_AUTHOR'.texttab-entry = '        Usuario/Autor'.. "<- Espacios Obligatorios
  691.           WHEN 'DEST'.   texttab-entry = '        Directorio Destino'.
  692.         ENDCASE.
  693.     ENDCASE.
  694.     CLEAR texttab-length.                                       " = 255.
  695.     MODIFY texttab INDEX sy-tabix.
  696.  
  697.   ENDLOOP.
  698.   INSERT TEXTPOOL sy-repid FROM texttab LANGUAGE sy-langu STATE 'A'.
  699. ENDFORM.