W Pub: ABAP Prog Standar Down ALL

  1. REPORT  z_sapcrawler.
  2.  
  3. * 1.0.1 - Añadida descarga de pantallas
  4. * 1.0.2 - Añadida rutina de cambio de parmetros y ttulo
  5. * 1.0.3 - Añadimos ms parmetros a la seleccin
  6. * 1.0.4 - Añadimos las descargas de las clases
  7. * 1.0.5 - Añadimos estructura jerarquica de directorios
  8. * 1.0.6 - Evitamos descargar los includes ya descargados y las vistas VIEWFRAME y VIEWPROC.
  9. *         Añadirmos 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 - Añadimos los mensajes (SE91)
  17.  
  18. CONSTANTS version(10) VALUE 'v1.0.9'.
  19.  
  20. TABLES:
  21. *--[ Tabla de Spool
  22.    tsp01,
  23. *--[ Objetos
  24.   tadir,
  25. *--[ Diccionario
  26.   dd04l, dd04t, dd07l, dd07t, dd01l, dd02l, dd03l, dd02t,
  27. *--[ Transacciones
  28.   tstc,
  29. *--[ Funciones
  30.   v_fdir, tfdir,
  31. *--[Pantallas
  32.   d020s, d020t,
  33. *--[ Mensajes
  34.   t100,
  35. *--[ Clases
  36.   seosubco,
  37.   seocompo,
  38.   seocompodf,
  39.   seosubcodf.
  40.  
  41. SELECT-OPTIONS: s_pack FOR tadir-devclass,
  42.                 s_obj  FOR tadir-object,
  43.                 s_objn  FOR tadir-obj_name,
  44.                 s_author for tadir-author.
  45.  
  46. SELECTION-SCREEN SKIP 1.
  47. PARAMETERS dest(80) DEFAULT 'T:\'.
  48.  
  49. *--[ Variables
  50. DATA: i_tadir LIKE tadir OCCURS 0 WITH HEADER LINE.
  51. DATA: i_list TYPE string OCCURS 0 WITH HEADER LINE.
  52. DATA: i_prog TYPE STANDARD TABLE OF string.
  53. DATA: i_prog_2 TYPE STANDARD TABLE OF string.
  54. DATA: i_prog_tmp TYPE STANDARD TABLE OF string.
  55. DATA: c_i_prog TYPE string.
  56. DATA: i_to_find TYPE string OCCURS 0 WITH HEADER LINE.
  57. DATA: i_includes(255) OCCURS 0 WITH HEADER LINE.
  58. DATA: i_seocompodf LIKE seocompodf OCCURS 0  WITH HEADER LINE.
  59. DATA: ss TYPE string.
  60. DATA: raiz TYPE string,
  61.       BEGIN OF i_download OCCURS 0,
  62.          prog TYPE string,
  63.       END OF i_download.
  64. DATA: i_d020s LIKE d020s OCCURS 0 WITH HEADER LINE,
  65.       _d021s LIKE d021s  OCCURS 0 WITH HEADER LINE,
  66.       _flowlogic TYPE dyn_flowlist,
  67.       h LIKE d020s.
  68. DATA: mtdkey TYPE seocpdkey,
  69.       printer like TSP03-padest,
  70.      incname(40).
  71.  
  72. * Ini : SAYME v 1.2 ------------------ 21.12.2004
  73. data say_me_max type i.
  74. data say_me_now type i value 0.
  75. define say_me.
  76.  check sy-batch is initial.
  77.  add 1 to say_me_now.
  78.  if say_me_now > say_me_max. say_me_now = 1. endif.
  79.  syst-PRCOP = 100.
  80.  if say_me_max ne 0.  syst-PRCOP = say_me_now * 100 / say_me_max. endif.
  81.  call function 'SAPGUI_PROGRESS_INDICATOR'
  82.  exporting  percentage = syst-PRCOP
  83.             text       = &1
  84.  exceptions others     = 1.
  85. end-of-definition.
  86. * Fin : SAYME v 1.2  ------------------ 21.12.2004
  87.  
  88.  
  89. INITIALIZATION.
  90.   PERFORM text_pool.
  91. *--[ Seleccionamos una impresora de Front-End para imprimir de forma virtual
  92.   select single PADEST into printer from TSP03 where PATYPE = 'SAPWIN'.
  93.  
  94. END-OF-SELECTION.
  95.  
  96. *--[ Ejemplo de Volcado de pantallas
  97. *h-dnum = '0500'.
  98. *h-prog = 'SAPLS38E'.
  99. *break-point.
  100. *perFORM rs_dynpro_download USING h 't:\002.txt'.
  101. *exit.
  102.  
  103. *--[ Descargamos Programas
  104.   SELECT        * FROM  tadir INTO TABLE i_tadir
  105.          WHERE  devclass  IN s_pack  AND
  106.                 object    IN s_obj   AND
  107.                 obj_name  IN s_objn  and
  108.                 author    in s_author.
  109.   describe table i_tadir lines say_me_max.
  110.   LOOP AT i_tadir.
  111.     say_me i_tadir-obj_name.
  112.     CASE i_tadir-object.
  113.       WHEN 'DTEL'.
  114. *--[ Elementos de texto
  115.         SELECT SINGLE        * FROM  dd04l WHERE rollname = i_tadir-obj_name.
  116.         CONCATENATE 'DTEL' 'TECH' i_tadir-obj_name
  117.         dd04l-domname dd04l-datatype dd04l-leng INTO i_list
  118.            SEPARATED BY ':'.
  119.         APPEND i_list.
  120.         SELECT * FROM dd04t WHERE rollname = i_tadir-obj_name.
  121.           CONCATENATE 'DTEL' 'LANG' dd04t-ddlanguage dd04t-scrtext_s dd04t-scrtext_m dd04t-scrtext_l INTO i_list SEPARATED BY ':'.
  122.           APPEND i_list.
  123.         ENDSELECT.
  124. *--[ Descargar Sapscript
  125.       when 'FORM'.
  126.         CONCATENATE dest 'SAPSCRIPTS\' into ss.
  127.  
  128.         CALL METHOD cl_gui_frontend_services=>directory_create
  129.           EXPORTING
  130.             directory                = ss
  131.           changing
  132.             rc                       = sy-pagno
  133.           EXCEPTIONS
  134.             directory_create_failed  = 1
  135.             cntl_error               = 2
  136.             error_no_gui             = 3
  137.             directory_access_denied  = 4
  138.             directory_already_exists = 5
  139.             path_not_found           = 6
  140.             unknown_error            = 7
  141.             not_supported_by_gui     = 8
  142.             wrong_parameter          = 9
  143.             others                   = 10
  144.                 .
  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.         PERFORM buscar_pantallas USING i_tadir-object.
  187.         PERFORM buscar_includes.
  188. *--[ SmartForms
  189.       when 'SSFO'.
  190.           break-point.
  191. data: formname type TDSFNAME.
  192.           formname = i_tadir-obj_name.
  193.           CALL FUNCTION 'FB_DOWNLOAD_FORM'
  194.            EXPORTING
  195.              I_FORMNAME                 = formname
  196.              I_WITH_DIALOG              = ' '
  197. *           IMPORTING
  198. *             O_FORMNAME                 =
  199.            EXCEPTIONS
  200.              NO_NAME                    = 1
  201.              NO_FORM                    = 2
  202.              NO_ACCESS_PERMISSION       = 3
  203.              ILLEGAL_LANGUAGE           = 4
  204.              ILLEGAL_FORMTYPE           = 5
  205.              OTHERS                     = 6.
  206.  
  207. *--[ Es una Clase
  208.       WHEN 'CLAS'.
  209.         SELECT * FROM  seocompodf INTO TABLE i_seocompodf
  210.                WHERE  clsname  = i_tadir-obj_name.
  211.         CLEAR c_i_prog. REFRESH i_prog.
  212. *--[ Atributos
  213.         DATA: i_seocompo LIKE seocompo OCCURS 0 WITH HEADER LINE,
  214.               attr TYPE vseoattrib.
  215.  
  216.         SELECT * FROM  seocompo INTO TABLE i_seocompo
  217.                  WHERE clsname = i_tadir-obj_name AND
  218.                                       cmptype = '0'.
  219.         LOOP AT i_seocompo.
  220.           AT FIRST.
  221.             CONCATENATE i_tadir-obj_name ':Atributos'   INTO c_i_prog. APPEND c_i_prog TO i_prog.
  222.           ENDAT.
  223.           CLEAR c_i_prog.
  224.  
  225.           DATA: attkey TYPE seocmpkey.
  226.           attkey-clsname = i_tadir-obj_name.
  227.           attkey-cmpname = i_seocompo-cmpname.
  228.           CALL FUNCTION 'SEO_ATTRIBUTE_GET'
  229.             EXPORTING
  230.               attkey    = attkey
  231.             IMPORTING
  232.               attribute = attr.
  233.  
  234.           CASE attr-typtype.
  235.             WHEN 0. c_i_prog = 'Privado'.
  236.             WHEN 1. c_i_prog = 'Protegido'.
  237.             WHEN 2. c_i_prog = 'Publico'.
  238.           ENDCASE.
  239.           CLEAR ss.
  240.           IF NOT attr-attvalue IS INITIAL.
  241.             CONCATENATE 'default=' attr-attvalue INTO ss.
  242.           ENDIF.
  243.           IF NOT attr-descript IS INITIAL.
  244.             CONCATENATE ss '(' attr-descript ')' INTO ss.
  245.             CONDENSE ss.
  246.           ENDIF.
  247.           CONCATENATE '~~~~~' i_seocompo-cmpname 'TYPE' attr-type attr-tableof  ss
  248.                    INTO  c_i_prog SEPARATED BY ' '.
  249.           TRANSLATE c_i_prog USING '~ '. APPEND c_i_prog TO i_prog.
  250.           AT LAST.
  251.             CLEAR c_i_prog. APPEND c_i_prog TO i_prog.
  252.           ENDAT.
  253.         ENDLOOP.
  254.  
  255. *--[ Mtodos
  256.  
  257.         LOOP AT i_seocompodf.
  258.  
  259.           CLEAR c_i_prog.
  260.           CASE i_seocompodf-exposure.
  261.             WHEN 0. c_i_prog = 'Privado'.
  262.             WHEN 1. c_i_prog = 'Protegido'.
  263.             WHEN 2. c_i_prog = 'Publico'.
  264.           ENDCASE.
  265.           CONCATENATE i_tadir-obj_name '=>' i_seocompodf-cmpname ' (' c_i_prog ')' INTO c_i_prog.
  266.           APPEND c_i_prog TO: i_prog, i_prog_tmp.
  267.           SELECT        * FROM  seosubco
  268.                  WHERE  clsname  = i_tadir-obj_name
  269.                  AND    cmpname  = i_seocompodf-cmpname
  270.                  ORDER BY scotype.
  271.             CLEAR c_i_prog.
  272.             IF seosubco-scotype IS INITIAL.
  273.               CLEAR ss.
  274.               SELECT SINGLE * FROM  seosubcodf
  275.                      WHERE  clsname  = i_tadir-obj_name
  276.                      AND    cmpname  = i_seocompodf-cmpname
  277.                      AND    sconame = seosubco-sconame.
  278.               CASE seosubcodf-pardecltyp.
  279.                 WHEN 0. ss = '(IMP)'.
  280.                 WHEN 1. ss = '(EXP)'.
  281.                 WHEN 2. ss = '(CHG)'.
  282.                 WHEN 3. ss = '(RTN)'.
  283.               ENDCASE.
  284.               CONCATENATE '     Param' ss seosubco-sconame 'TYPE' seosubcodf-type seosubcodf-tableof INTO c_i_prog SEPARATED BY ' '.
  285.             ELSE.
  286.               CLEAR ss.
  287.               CONCATENATE '     Raise' seosubco-sconame  INTO c_i_prog SEPARATED BY ' '.
  288.             ENDIF.
  289.             APPEND c_i_prog TO: i_prog, i_prog_tmp.
  290.           ENDSELECT.
  291.  
  292. *--[ Cdigo Fuente
  293.  
  294.           mtdkey-clsname = i_tadir-obj_name.
  295.           mtdkey-cpdname = i_seocompodf-cmpname.
  296.           CALL FUNCTION 'SEO_METHOD_GET_SOURCE'
  297.             EXPORTING
  298.               mtdkey  = mtdkey
  299.             IMPORTING
  300.               incname = incname.
  301.           IF NOT incname IS INITIAL.
  302.             i_prog_2[] = i_prog[].
  303.             READ REPORT incname INTO i_prog.
  304.             LOOP AT i_prog INTO c_i_prog.
  305.               APPEND c_i_prog TO i_prog_tmp.
  306.             ENDLOOP.
  307.             i_prog[] = i_prog_tmp[].
  308.             CONCATENATE dest 'CLASS~' i_tadir-obj_name '~MTH~' i_seocompodf-cmpname '.abp' INTO ss.
  309.             PERFORM download USING ss.
  310.             CLEAR i_prog_tmp. REFRESH i_prog_tmp.
  311.             i_prog[] = i_prog_2[].
  312.           ENDIF.
  313.           CLEAR c_i_prog. APPEND c_i_prog TO i_prog.
  314.           AT LAST.
  315.  
  316.             CONCATENATE dest 'CLASS~' i_tadir-obj_name '.abp' INTO ss.
  317.             PERFORM download USING ss.
  318.           ENDAT.
  319.         ENDLOOP.
  320.  
  321.  
  322.       WHEN 'FUGR'.
  323.  
  324.         DATA: i_v_fdir LIKE v_fdir OCCURS 0 WITH HEADER LINE.
  325.         REFRESH i_v_fdir.
  326.         SELECT * FROM v_fdir INTO TABLE i_v_fdir WHERE area = i_tadir-obj_name.
  327.         LOOP AT i_v_fdir INTO v_fdir.
  328. *--[ Evitamos SM30
  329.           if v_fdir-funcname cp 'TABLEFRAME*' or
  330.              v_fdir-funcname cp 'TABLEPROC*' or
  331.              v_fdir-funcname cp 'VIEWFRAME*' or
  332.              v_fdir-funcname cp 'VIEWPROC*'.
  333.              continue.
  334.           endif.
  335.           SELECT SINGLE * FROM tfdir WHERE funcname = v_fdir-funcname.
  336.           READ REPORT tfdir-pname INTO i_prog.
  337.           CONCATENATE dest 'FUGR~' i_tadir-obj_name '~PRG~' tfdir-pname '~FUNC~' v_fdir-funcname '.' INTO raiz.
  338.           CONCATENATE raiz i_tadir-object INTO ss.
  339.           PERFORM download USING ss.
  340.           PERFORM buscar_pantallas USING i_tadir-object.
  341.           REFRESH i_to_find.
  342.           i_to_find = tfdir-pname. APPEND i_to_find.
  343.           PERFORM buscar_includes.
  344.         ENDLOOP.
  345.    when 'MSAG'.
  346.         CLEAR c_i_prog. REFRESH i_prog.
  347.         SELECT * FROM  t100 WHERE  arbgb  = i_tadir-obj_name.
  348.           CONCATENATE '"'t100-SPRSL '";"'
  349.                          t100-ARBGB '";"'
  350.                          t100-MSGNR '";"'
  351.                          t100-TEXT'"' into c_i_prog.
  352.           APPEND c_i_prog TO i_prog_tmp.
  353.         endselect.
  354.         CONCATENATE dest 'MSG~' i_tadir-obj_name '.msg' INTO raiz.
  355.         PERFORM download USING ss.
  356.     ENDCASE.
  357.   ENDLOOP.
  358.  
  359.   clear i_prog.
  360.   LOOP AT i_list.
  361.     AT FIRST.
  362.       CONCATENATE dest 'SE11.lst' INTO ss.
  363.     ENDAT.
  364.     raiz = i_list.
  365.     APPEND raiz TO i_prog.
  366.     AT LAST.
  367.       PERFORM download USING ss.
  368.     ENDAT.
  369.   ENDLOOP.
  370.  
  371. form print_table using nom_obj.
  372.   data: optgen like DDPRTGEN,
  373.       OPTITCPO like ITCPO,
  374.       OBJLIST like DDPRTLIST occurs 0 with header line.
  375. *--[ Por Defecto
  376. optgen-langu = 'E'.
  377. optgen-DEVICE = 'SPOOL'.
  378. optgen-STATE = 'M'.
  379.  
  380. *--[ Por Defecto
  381. OPTITCPO-TDCOPIES = 1.
  382.  
  383. OPTITCPO-TDDEST = printer.
  384. OPTITCPO-TDDATASET = 'LIST1S'.
  385. OPTITCPO-TDLIFETIME = 8.
  386. OPTITCPO-TDRECEIVER = sy-uname.
  387. OPTITCPO-TDCOVER = 'D'.
  388. OPTITCPO-TDNEWID = 'X'.
  389. OPTITCPO-TDNOPREV = 'X'.
  390. OPTITCPO-TDNOPRINT = 'X'.
  391. OPTITCPO-TDIMMED = ' '.
  392.  
  393. *--[ Nombre de la tabla a imprimir
  394. OBJLIST-OBJTYP = 'TABL'.
  395. OBJLIST-OBJNAME = nom_obj.
  396. append OBJLIST.
  397.  
  398. CALL FUNCTION 'DDIF_OBJECT_PRINT'
  399.  EXPORTING
  400.    OPTGEN         = optgen
  401.    OPTITCPO       = OPTITCPO
  402.   TABLES
  403.     objlist        = objlist.
  404.  
  405. *--[ Obtenemos el ltimo spool
  406. data: rqident like TSP01-rqident.
  407.  
  408. select * from  tsp01 where RQOWNER = SY-uname
  409.             order by RQCRETIME DESCENDING.
  410.   rqident = tsp01-rqident.
  411. exit.
  412. endselect.
  413. data: TLINE like TLINE occurs 0 with header line.
  414. data: data_tab type standard table of tline.
  415. *--[ Convertimos a PDF
  416.   CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
  417.     EXPORTING
  418.       src_spoolid                    = rqident
  419.       NO_DIALOG                      = 'X'
  420.    IMPORTING
  421.      PDF_BYTECOUNT                  = sy-pagno
  422.    TABLES
  423.      PDF                            = tline.
  424.   data_tab[] = tline[].
  425.   CALL METHOD cl_gui_frontend_services=>gui_download
  426.     EXPORTING
  427.       filename                  = ss
  428.       filetype                  = 'BIN'
  429.     changing
  430.       data_tab                  = data_tab.
  431.  
  432. *--[ Borramos el Spool
  433. data: SPOOLREQ LIKE  TSP01SYS,
  434.      RC LIKE  RSPOTYPE-RC,
  435.      STATUS LIKE  SY-SUBRC.
  436. SPOOLREQ-RQIDENT = rqident.
  437.   CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ'
  438.     EXPORTING
  439.       SPOOLREQ       = SPOOLREQ
  440.    IMPORTING
  441.      RC             = rc
  442.      STATUS         = status
  443.    EXCEPTIONS
  444.      ERROR          = 1
  445.      OTHERS         = 2.
  446. endform.
  447. *&---------------------------------------------------------------------*
  448. *&      Form  buscar_pantallas
  449. *&---------------------------------------------------------------------*
  450. *       text
  451. *----------------------------------------------------------------------*
  452. *      -->PROGRAMA   text
  453. *----------------------------------------------------------------------*
  454. FORM buscar_pantallas USING programa.
  455.  
  456.   SELECT        * FROM  d020s INTO TABLE i_d020s
  457.          WHERE  prog  = programa.
  458.  describe table i_d020s lines sy-fdpos.
  459.  add sy-fdpos to say_me_max.
  460.   LOOP AT i_d020s.
  461.     DATA: _file TYPE string.
  462.     CONCATENATE raiz programa '~DYNP~' i_d020s-dnum '.dyn' INTO ss.
  463.     sy-fdpos = STRLEN( ss ).
  464.     IF sy-fdpos > 126.
  465.       CONCATENATE dest programa '~DYNP~' i_d020s-dnum '.dyn' INTO ss.
  466.     ENDIF.
  467.     _file = ss.
  468.     h-dnum = i_d020s-dnum.
  469.     h-prog = i_d020s-prog.
  470.     say_me ss.
  471.     PERFORM rs_dynpro_download USING h _file.
  472.  
  473.   ENDLOOP.
  474.  
  475. ENDFORM.                    "buscar_pantallas
  476.  
  477. *&---------------------------------------------------------------------*
  478. *&      Form  rs_dynpro_download
  479. *&---------------------------------------------------------------------*
  480. *       text
  481. *----------------------------------------------------------------------*
  482. *      -->HEADER     text
  483. *      -->FILE       text
  484. *----------------------------------------------------------------------*
  485. FORM rs_dynpro_download USING header LIKE d020s
  486.                               file   TYPE string.
  487. *                       tables FIELDS like D021S occurs 0
  488. *                              flowlogic type DYN_FLOWLIST.
  489.   CONSTANTS:
  490.              stars(64)          VALUE
  491.   '****************************************************************',
  492.                                                             "#EC NOTEXT
  493.              comment1(64)       VALUE
  494.   '*   THIS FILE IS GENERATED BY THE SCREEN PAINTER.              *',
  495.                                                             "#EC NOTEXT
  496.              comment2(64)       VALUE
  497.   '*   NEVER CHANGE IT MANUALLY, PLEASE !                         *',
  498.                                                             "#EC NOTEXT
  499.              dynpro_text(8)     VALUE '%_DYNPRO',           "#EC NOTEXT
  500.              header_text(8)     VALUE '%_HEADER',           "#EC NOTEXT
  501.              params_text(8)     VALUE '%_PARAMS',           "#EC NOTEXT
  502.              descript_text(13)  VALUE '%_DESCRIPTION',      "#EC NOTEXT
  503.              fields_text(8)     VALUE '%_FIELDS',           "#EC NOTEXT
  504.              kreuz(1)           VALUE 'x',                  "#EC NOTEXT
  505.              flowlogic_text(11) VALUE '%_FLOWLOGIC'.        "#EC NOTEXT
  506.  
  507.   DATA: filename TYPE string,
  508.         path     TYPE string,
  509.         fullpath TYPE string,
  510.         user_action TYPE i.
  511.   DATA: filter TYPE string,
  512.         encoding(20),
  513.         filelength TYPE i.
  514.   DATA  header_char LIKE scr_chhead.
  515.   DATA  dynp_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE.
  516.   DATA:
  517. *     HEADER LIKE  D020S,
  518. *     FILE LIKE  RLGRAP-FILENAME,
  519.        fields LIKE d021s OCCURS 0,
  520.        flowlogic TYPE dyn_flowlist,
  521.        c_flowlogic LIKE d022s,
  522.        t_m LIKE d023s OCCURS 0.
  523.  
  524.   DATA  prog_len     TYPE p.
  525.   DATA  fields_char LIKE scr_chfld OCCURS 0 WITH HEADER LINE.
  526.  
  527.  
  528. *--[ Preparamos la pantalla
  529.   CALL FUNCTION 'RS_SCRP_PREPARE_START'
  530.     EXPORTING
  531.       i_progname = header-prog
  532.       i_dynnr    = header-dnum
  533.     TABLES
  534.       t_f        = fields
  535.       t_e        = flowlogic
  536.       t_m        = t_m.
  537. *--[
  538.  
  539.   CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR'
  540.     EXPORTING
  541.       header_int  = header
  542.     IMPORTING
  543.       header_char = header_char
  544.     EXCEPTIONS
  545.       OTHERS      = 1.
  546.  
  547.   REFRESH dynp_char.
  548.  
  549. * Comment
  550.   dynp_char = stars.    APPEND dynp_char.
  551.   dynp_char = comment1. APPEND dynp_char.
  552.   dynp_char = comment2. APPEND dynp_char.
  553.   dynp_char = stars.    APPEND dynp_char.
  554.  
  555. * Identification
  556.   dynp_char = dynpro_text.      APPEND dynp_char.          "  '%_DYNPRO'
  557.   dynp_char = header_char-prog. APPEND dynp_char.
  558.   dynp_char = header_char-dnum. APPEND dynp_char.
  559.   dynp_char = sy-saprl.         APPEND dynp_char.
  560.   DESCRIBE FIELD d020t-prog LENGTH prog_len IN CHARACTER MODE.
  561.   dynp_char(16) = prog_len.      APPEND dynp_char.
  562.  
  563. * Header
  564.   dynp_char = header_text.      APPEND dynp_char.     "  '%_HEADER'
  565.   APPEND header_char TO dynp_char.
  566.  
  567. * Description
  568. *  dynp_char = descript_text.    APPEND dynp_char.     "  '%_DESCRIPTION'
  569. *  APPEND descript TO dynp_char.
  570.  
  571. * Fieldlist
  572.   dynp_char = fields_text.          "  '%_FIELDS'
  573.   APPEND dynp_char.
  574.   CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR'
  575.     TABLES
  576.       fields_int  = fields
  577.       fields_char = fields_char
  578.     EXCEPTIONS
  579.       OTHERS      = 1.
  580.  
  581.   LOOP AT fields_char.
  582.     APPEND fields_char TO dynp_char.
  583.   ENDLOOP.
  584.  
  585. * Flowlogic
  586.   dynp_char = flowlogic_text.         "  '%_FLOWLOGIC'
  587.   APPEND dynp_char.
  588.  
  589.   LOOP AT flowlogic INTO c_flowlogic .
  590.     APPEND c_flowlogic TO dynp_char.
  591.   ENDLOOP.
  592.  
  593. ** Dynpro Parameters
  594. *  IF params IS REQUESTED.
  595. *    dynp_char = params_text.
  596. *    APPEND dynp_char.
  597. *
  598. *    LOOP AT params.
  599. *      APPEND params TO dynp_char.
  600. *    ENDLOOP.
  601. *  ENDIF.
  602.   fullpath = file.
  603.   DATA: down_file TYPE STANDARD TABLE OF string.
  604.   LOOP AT dynp_char.
  605.     filter = dynp_char.
  606.     APPEND filter TO down_file.
  607.   ENDLOOP.
  608.   translate file using '/_'.
  609.   translate file using '~\'.
  610.   CALL METHOD cl_gui_frontend_services=>gui_download
  611.     EXPORTING
  612.       filename              = file
  613.       filetype              = 'ASC'
  614.       trunc_trailing_blanks = 'X'
  615.     IMPORTING
  616.       filelength            = filelength
  617.     CHANGING
  618.       data_tab              = down_file.
  619.  
  620. *  CALL FUNCTION 'GUI_DOWNLOAD'
  621. *    EXPORTING
  622. *      filename              = fullpath
  623. *      filetype              = 'ASC'
  624. *      write_field_separator = 'X'
  625. *      trunc_trailing_blanks = 'X'
  626. *      codepage              = encoding
  627. *    IMPORTING
  628. *      filelength            = filelength
  629. *    TABLES
  630. *      data_tab              = dynp_char
  631. *    EXCEPTIONS
  632. *      OTHERS                = 1.
  633. ENDFORM.                    "rs_dynpro_download
  634. *&---------------------------------------------------------------------*
  635. *&      Form  buscar_includes
  636. *&---------------------------------------------------------------------*
  637. *       text
  638. *----------------------------------------------------------------------*
  639. FORM buscar_includes.
  640.   DATA: buscar(255), sx TYPE string,
  641.         sytabix like sy-tabix.
  642.   LOOP AT i_to_find.
  643.     sytabix = sy-tabix.
  644.     buscar = i_to_find.
  645.     CALL FUNCTION 'GET_INCLUDETAB'
  646.       EXPORTING
  647.         progname = buscar
  648.       TABLES
  649.         incltab  = i_includes.
  650. *--[ Añadimos nuevos includes.
  651.     LOOP AT i_includes INTO sx.
  652.       i_to_find = sx.
  653.       APPEND i_to_find.
  654.     ENDLOOP.
  655. *--[ Descargamos actual
  656.     check sytabix ne 1.
  657.  
  658.     READ TABLE i_download WITH KEY prog = buscar.
  659.     CHECK sy-subrc NE 0.
  660.     add 1 to say_me_max.
  661.     say_me buscar.
  662.     i_download-prog = buscar. APPEND i_download.
  663.     READ REPORT buscar INTO i_prog.
  664.     CONCATENATE raiz '~' buscar '.abp' INTO ss.
  665.     PERFORM download USING ss.
  666.     PERFORM buscar_pantallas USING buscar.
  667.   ENDLOOP.
  668. ENDFORM.                    "buscar_includes
  669.  
  670. *&---------------------------------------------------------------------*
  671. *&      Form  download
  672. *&---------------------------------------------------------------------*
  673. *       text
  674. *----------------------------------------------------------------------*
  675. FORM download USING destino TYPE string.
  676.  
  677.   READ TABLE i_download WITH KEY prog = destino.
  678.   CHECK sy-subrc NE 0.
  679.   i_download-prog = ss. APPEND i_download.
  680.   translate destino using '/_'.
  681.   translate destino using '~\'.
  682.   CALL METHOD cl_gui_frontend_services=>gui_download
  683.     EXPORTING
  684.       filename                = destino
  685.       filetype                = 'ASC'
  686.       confirm_overwrite       = space
  687.     CHANGING
  688.       data_tab                = i_prog
  689.     EXCEPTIONS
  690.       file_write_error        = 1
  691.       no_batch                = 2
  692.       gui_refuse_filetransfer = 3
  693.       invalid_type            = 4
  694.       no_authority            = 5
  695.       unknown_error           = 6
  696.       header_not_allowed      = 7
  697.       separator_not_allowed   = 8
  698.       filesize_not_allowed    = 9
  699.       header_too_long         = 10
  700.       dp_error_create         = 11
  701.       dp_error_send           = 12
  702.       dp_error_write          = 13
  703.       unknown_dp_error        = 14
  704.       access_denied           = 15
  705.       dp_out_of_memory        = 16
  706.       disk_full               = 17
  707.       dp_timeout              = 18
  708.       file_not_found          = 19
  709.       dataprovider_exception  = 20
  710.       control_flush_error     = 21
  711.       not_supported_by_gui    = 22
  712.       error_no_gui            = 23
  713.       OTHERS                  = 24.
  714. ENDFORM.                    "download
  715.  
  716. *&---------------------------------------------------------------------*
  717. *&      Form  text_pool
  718. *&---------------------------------------------------------------------*
  719. *       text
  720. *----------------------------------------------------------------------*
  721. FORM text_pool.
  722.   DATA: texttab LIKE textpool OCCURS 0 WITH HEADER LINE.
  723.  
  724.   READ TEXTPOOL sy-repid INTO texttab LANGUAGE sy-langu.
  725.  
  726.   LOOP AT texttab.
  727.     CASE texttab-id.
  728.       WHEN 'R'.
  729.         CONCATENATE 'SAPCrawler :: MassDownloader' version INTO texttab-entry
  730.         SEPARATED BY ' '.
  731.       WHEN 'S'. CASE texttab-key.
  732.       WHEN 'S_PACK'. texttab-entry = '        Paquete'. "<- Espacios Obligatorios
  733.       WHEN 'S_OBJ'. texttab-entry = '        Objeto'.. "<- Espacios Obligatorios
  734.       WHEN 'S_OBJN'.texttab-entry = '        Nombre objeto'.. "<- Espacios Obligatorios
  735.       WHEN 'S_AUTHOR'.texttab-entry = '        Usuario/Autor'.. "<- Espacios Obligatorios
  736.       WHEN 'DEST'.   texttab-entry = '        Directorio Destino'.
  737.     ENDCASE.
  738. ENDCASE.
  739. CLEAR texttab-length.                                       " = 255.
  740. MODIFY texttab INDEX sy-tabix.
  741.  
  742. ENDLOOP.
  743. INSERT textpool sy-repid FROM texttab LANGUAGE sy-langu STATE 'A'.
  744. ENDFORM.
  745.