W Pub: ABAPSFEXTRACT

  1. REPORT ZNADARXXX.
  2.  
  3. CONSTANTS: c_comment TYPE tLINE-tdformat VALUE '--',
  4.            c_COMMAND TYPE tline-tdformat VALUE '>>',
  5.            c_delete  TYPE tline-tdformat VALUE '>D'.
  6.  
  7. SELECTION-SCREEN BEGIN OF BLOCK b00 WITH FRAME.
  8.   PARAMETER: p_sf TYPE ssfscreen-fname DEFAULT 'ZNEW' OBLIGATORY,
  9.              p_sty TYPE stxschar-stylename DEFAULT 'ZPLANTILLA_DOC',
  10.              p_spras TYPE sy-langu DEFAULT sy-langu.
  11. SELECTION-SCREEN END OF BLOCK b00.
  12.  
  13. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
  14.   PARAMETER: p_file  TYPE char1024 LOWER CASE,
  15.              p_down RADIOBUTTON GROUP mod DEFAULT 'X',
  16.              p_up RADIOBUTTON GROUP mod.
  17. SELECTION-SCREEN END OF BLOCK b01.
  18.  
  19. PARAMETERS: "p_compi AS CHECKBOX DEFAULT ' ',
  20.             p_test  AS CHECKBOX DEFAULT 'X'.
  21.  
  22. TYPES: BEGIN OF ty_file,
  23.          tdformat TYPE tline-tdformat,
  24.          espacio  TYPE c LENGTH 1,
  25.          tdline   TYPE tline-tdline,
  26.        END OF ty_file.
  27.  
  28. DATA: t_tab   TYPE STANDARD TABLE OF tline,
  29.       l_tab   TYPE tline,
  30.       t_obj   TYPE STANDARD TABLE OF stxfobjt,
  31.       l_obj   TYPE stxfobjt,
  32.       t_text  TYPE STANDARD TABLE OF stxftxt,
  33.       l_text  TYPE stxftxt,
  34.       t_file  TYPE STANDARD TABLE OF ty_file,
  35.       l_file  TYPE ty_file,
  36.       nt_tab  TYPE STANDARD TABLE OF tline,
  37.       nl_tab  TYPE tline,
  38.       l_ruler TYPE tline-tdline.
  39.  
  40. *--[ De aquí se puede sacar el styles...
  41. data: sf type REF TO CL_SSF_FB_SMART_FORM.
  42.  
  43. INITIALIZATION.
  44.   p_file = 't:\nada.txt'.
  45.  
  46. end-of-SELECTION.
  47.  
  48.   PERFORM data_load.
  49.   PERFORM data_work.
  50.   PERFORM data_down.
  51.   PERFORM data_up.
  52.   PERFORM data_save.
  53.  
  54.  
  55. FORM data_up.
  56.   CHECK NOT p_up IS INITIAL.
  57.  
  58.   DATA: l_filename TYPE string.
  59.  
  60.   l_filename = p_file.
  61.   CALL METHOD cl_gui_frontend_services=>gui_upload
  62.     EXPORTING
  63.       filename                = l_filename
  64.       filetype                = 'ASC'
  65. *     has_field_separator     = SPACE
  66. *     header_length           = 0
  67. *     read_by_line            = 'X'
  68. *     dat_mode                = SPACE
  69. *     codepage                = SPACE
  70. *     ignore_cerr             = ABAP_TRUE
  71. *     replacement             = '#'
  72. *     virus_scan_profile      =
  73. *  IMPORTING
  74. *     filelength              =
  75. *     header                  =
  76.     CHANGING
  77.       data_tab                = t_file
  78. *     isscanperformed         = SPACE
  79.     EXCEPTIONS
  80.       file_open_error         = 1
  81.       file_read_error         = 2
  82.       no_batch                = 3
  83.       gui_refuse_filetransfer = 4
  84.       invalid_type            = 5
  85.       no_authority            = 6
  86.       unknown_error           = 7
  87.       bad_data_format         = 8
  88.       header_not_allowed      = 9
  89.       separator_not_allowed   = 10
  90.       header_too_long         = 11
  91.       unknown_dp_error        = 12
  92.       access_denied           = 13
  93.       dp_out_of_memory        = 14
  94.       disk_full               = 15
  95.       dp_timeout              = 16
  96.       not_supported_by_gui    = 17
  97.       error_no_gui            = 18
  98.       OTHERS                  = 19.
  99.  
  100. *--[ Borramos comentarios
  101.   DELETE t_file WHERE tdformat = c_comment OR
  102.                       ( tdformat IS INITIAL AND tdline IS INITIAL ).
  103.  
  104.   IF sy-subrc <> 0 AND lines( t_file ) > 0.
  105.  
  106.     LOOP AT t_file INTO l_file.
  107.       CLEAR l_tab.
  108.       MOVE-CORRESPONDING l_file TO l_tab.
  109.       APPEND l_tab TO nt_tab.
  110.     ENDLOOP.
  111.   ENDIF.
  112.  
  113. ENDFORM.
  114.  
  115. FORM data_save.
  116.   DATA: l_linenr TYPE stxftxt-linenr.
  117.  
  118.   CHECK NOT p_up IS INITIAL.
  119.   CHECK lines( t_file ) > 0.
  120.   CHECK t_tab[] NE t_file[].
  121. *--[ Podemos grabar :D
  122.   CLEAR l_file.
  123. *  l_file-TDFORMAT = C_COMMENT. L_FILE-tdline = 'EOF'. APPEND l_file TO t_file.
  124.   LOOP AT t_file INTO l_file.
  125.  
  126. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  127. *--[ Línea de control
  128.     IF l_file-tdformat = c_COMMAND.
  129.       IF l_file-tdline CP '*|*|*'.
  130. *--[ Estoy en línea de control
  131.         SPLIT l_file-tdline AT '|' INTO l_obj-objtype
  132.                                        l_obj-iname
  133.                                        l_obj-caption.
  134.  
  135.         READ TABLE t_obj INTO DATA(l_obj_new) WITH KEY objtype = l_obj-objtype
  136.                                                          iname   = l_obj-iname.
  137.         IF sy-subrc EQ 0 AND l_obj_new-caption NE l_obj-caption.
  138.  
  139.  
  140.           IF p_test IS INITIAL.
  141.             UPDATE stxfobjt
  142.                SET caption = l_obj-caption
  143.               WHERE formname = p_sf
  144.                 AND objtype  = l_obj-objtype
  145.                 AND iname    = l_obj-iname.
  146.  
  147.           ENDIF.
  148.  
  149.         ENDIF.
  150.         CLEAR l_LINENR. "<-- RESET contador
  151. *--[ Puede que sea un nuevo objeto o que no ha cambiado. Lo ignoramos.
  152.         CONTINUE. "<-- Vamos al siguiente registro
  153.  
  154.       ENDIF.
  155.     ENDIF.
  156.  
  157.     IF l_file-tdformat = c_delete.
  158.       SELECT * FROM stxftxt INTO @DATA(to_delete)
  159.         WHERE spras    = @p_spras AND
  160.               formname = @p_sf AND
  161.               iname    = @l_obj-iname AND
  162.               tdline   = @l_file-tdline.
  163.       ENDSELECT.
  164.       IF sy-subrc EQ 0.
  165.         IF p_test IS INITIAL.
  166.           DELETE FROM stxftxt
  167.             WHERE spras    = p_spras AND
  168.                   formname = p_sf AND
  169.                   iname    = l_obj-iname AND
  170.                   tdline   = l_file-tdline.
  171.         ENDIF.
  172.       ENDIF.
  173.       CONTINUE. "<-- Vamos al siguiente
  174.     ENDIF.
  175. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  176. *--[ Línea de cuerpo.
  177.     l_LINENR = l_LINENR + 1.
  178.  
  179.     READ TABLE t_text INTO l_text WITH KEY formname = p_sf
  180.                                            iname    = l_obj-iname
  181.                                            linenr   = l_LINENR
  182.                                            tdformat = l_file-tdformat
  183.                                            tdline   = l_file-tdline.
  184.     IF sy-subrc EQ 0.
  185. *--[ No he cambiado, no hacer nada.
  186.     ELSE.
  187. *--[ He cambiado o no existo
  188.       READ TABLE t_text INTO l_text WITH KEY formname = p_sf
  189.                                              iname    = l_obj-iname
  190.                                              linenr   = l_LINENR.
  191.       IF sy-subrc EQ 0.
  192. *--[ He cambiado
  193.         IF p_test IS INITIAL.
  194.           UPDATE stxftxt
  195.           SET tdformat = l_file-tdformat
  196.               tdline   = l_file-tdline
  197.           WHERE spras    = p_spras AND
  198.                 formname = l_text-formname AND
  199.                 iname    = l_text-iname AND
  200.                 linenr   = l_text-linenr.
  201.         ENDIF.
  202.  
  203.       ELSE.
  204. *--[ No existo
  205.         CLEAR l_text.
  206.  
  207.         l_text-spras = p_spras.
  208.         l_text-txtype = 'F'.
  209.         l_text-formname = p_sf.
  210.         l_text-iname    = l_obj-iname.
  211. *l_text-VARI
  212.         l_text-linenr   = l_LINENR.
  213.         l_text-tdformat = l_file-tdformat.
  214.         l_text-tdline   = l_file-tdline.
  215.         IF p_test IS INITIAL.
  216.           INSERT stxftxt FROM l_text.
  217.         ENDIF.
  218.  
  219.  
  220.       ENDIF.
  221.     ENDIF.
  222.  
  223.     DATA: sform TYPE REF TO cl_ssf_fb_smart_form.
  224.  
  225.  
  226.   ENDLOOP.
  227. ENDFORM.
  228.  
  229.  
  230. FORM file_cab.
  231.  
  232.   l_file-tdformat = c_comment. l_file-tDline = ''. APPEND l_file TO t_file.
  233.   l_file-tDline = 'LANGUAGE:' && p_spras && ' SMARTFORM:' && p_sf. APPEND l_file TO t_file.
  234.   l_file-tDline = 'DATE:' && sy-datum && ' TIME:' && sy-uzeit. APPEND l_file TO t_file.
  235.   l_file-tDline = ''. APPEND l_file TO t_file.
  236.   l_file-tDline = '** NO DISCLAIRMER. NO WARRANTY. FIRST MAKE A BACKUP OF YOUR SMARTFORM. **'.
  237.   APPEND l_file TO t_file.
  238.   l_file-tDline = ''. APPEND l_file TO t_file.
  239.   l_file-tDline = 'Respect the file format. You cannot introduce new objects. '. APPEND l_file TO t_file.
  240.   l_file-tDline = 'It''s like a tdline of 132 positions'. APPEND l_file TO t_file.
  241.   l_file-tDline = 'If you don''t know what it means, I recommend that you don''t touch it.'. APPEND l_file TO t_file.
  242.   l_file-tDline = ''. APPEND l_file TO t_file.
  243.   l_file-tDline = 'COMMANDS:'. APPEND l_file TO t_file.
  244.   l_file-tDline = c_command && ' : The presence of an object. Format:' &&
  245.                   'TYPE|NAME|CAPTION'.  APPEND l_file TO t_file.
  246.   l_file-tDline = c_comment && ' : Commented line. Not imported.'. APPEND l_file TO t_file.
  247.   l_file-tDline = c_delete && ' : That line will be erased. Be careful, because it' &&
  248.                    ' uses the description as a key and it can get messy.'.
  249.   APPEND l_file TO t_file.
  250.  
  251.   l_file-tDline = ''. APPEND l_file TO t_file.
  252.  
  253.   IF NOT p_sty IS INITIAL.
  254.     l_file-tDline = '*--[ BEGIN OF STYLES'. APPEND l_file TO t_file.
  255.     SELECT * FROM stxspara INTO @DATA(l_para)
  256.        WHERE active    = 'A'
  257.         AND stylename = @p_sty.
  258.  
  259.       l_file-tdline = 'Paragraph [' && l_para-tDPARGRAPH && ']~' &&
  260.                       'Family [' && l_para-tdfamily && ']~' &&
  261.                       'Height [' && l_para-tdheight && ']' &&
  262.                      COND string( WHEN l_para-tdbold = 'X' THEN '~Bold~' ELSE '' ) &&
  263.                      COND string( WHEN l_para-tditalic = 'X' THEN '~Italic~' ELSE '' ) &&
  264.                      COND string( WHEN l_para-tdunderlin = 'X' THEN '~Underlined~' ELSE '' ) &&
  265.                      '~' && l_para-tdpjustify.
  266.  
  267.       TRANSLATE l_file-tdline USING '~ '.
  268.       APPEND l_file TO t_file.
  269.     ENDSELECT.
  270.  
  271.  
  272.     SELECT * FROM stxschar INTO @DATA(l_stxschar)
  273.       WHERE active    = 'A'
  274.         AND stylename = @p_sty.
  275.  
  276.       l_file-tdline = 'Character~~[' && l_stxschar-tdstring && ']~' &&
  277.                       'Family [' && l_stxschar-tdfamily && ']~' &&
  278.                       'Height [' && l_stxschar-tdheight && ']' &&
  279.                       COND string( WHEN l_stxschar-tdbold = 'X' THEN '~Bold~' ELSE '' ) &&
  280.                       COND string( WHEN l_stxschar-tditalic = 'X' THEN '~Italic~' ELSE '' ) &&
  281.                       COND string( WHEN l_stxschar-tdunderlin = 'X' THEN '~Underlined~' ELSE '' ).
  282.       TRANSLATE l_file-tdline USING '~ '.
  283.       APPEND l_file TO t_file.
  284.  
  285.     ENDSELECT.
  286.     l_file-tDline = '*--[ END OF STYLES'. APPEND l_file TO t_file.
  287.     l_file-tdformat = '--'. l_file-tDline = ''. APPEND l_file TO t_file.
  288.     l_file-tDline = '*--[ BEGIN OF BODY'. APPEND l_file TO t_file.
  289.     l_file-tdformat = '--'. l_file-tDline = ''. APPEND l_file TO t_file.
  290.     CONCATENATE '.........1.........2.........3.........4.........5.........6'
  291.                 '.........7.........8.........9.........0.........1.........2'
  292.                 '.........3..'
  293.     INTO l_file-tDline. APPEND l_file TO t_file.
  294.     l_ruler = l_file-tDline.
  295.   ENDIF.
  296. ENDFORM.
  297.  
  298. FORM data_down.
  299.   CHECK NOT p_down IS INITIAL.
  300.   DATA: l_filename TYPE string.
  301.   l_filename = p_file.
  302.  
  303.   PERFORM file_cab.
  304.  
  305.   LOOP AT t_tab INTO l_tab.
  306.     CLEAR l_file.
  307.     IF strlen( l_tab-tdline ) >= 100.
  308.       l_file-tdformat = '--'.
  309.       l_file-tdline = l_ruler.
  310.       APPEND l_file TO t_file.
  311.     ENDIF.
  312.     CLEAR l_file.
  313.     MOVE-CORRESPONDING l_tab TO l_file.
  314.     APPEND l_file TO t_file.
  315.   ENDLOOP.
  316.  
  317.   CALL METHOD cl_gui_frontend_services=>gui_download
  318.     EXPORTING
  319. *     bin_filesize            = 'ASC'
  320.       filename                = l_filename
  321.       filetype                = 'ASC'
  322. *     append                  = SPACE
  323. *     write_field_separator   = SPACE
  324. *     header                  = '00'
  325. *     trunc_trailing_blanks   = SPACE
  326. *     write_lf                = 'X'
  327. *     col_select              = SPACE
  328. *     col_select_mask         = SPACE
  329. *     dat_mode                = SPACE
  330. *     confirm_overwrite       = SPACE
  331. *     no_auth_check           = SPACE
  332. *     codepage                = SPACE
  333. *     ignore_cerr             = ABAP_TRUE
  334. *     replacement             = '#'
  335. *     write_bom               = SPACE
  336. *     trunc_trailing_blanks_eol = 'X'
  337. *     wk1_n_format            = SPACE
  338. *     wk1_n_size              = SPACE
  339. *     wk1_t_format            = SPACE
  340. *     wk1_t_size              = SPACE
  341. *     show_transfer_status    = 'X'
  342. *     fieldnames              =
  343. *     write_lf_after_last_line  = 'X'
  344. *     virus_scan_profile      = '/SCET/GUI_DOWNLOAD'
  345. *    IMPORTING
  346. *     filelength              =
  347.     CHANGING
  348.       data_tab                = t_file
  349.     EXCEPTIONS
  350.       file_write_error        = 1
  351.       no_batch                = 2
  352.       gui_refuse_filetransfer = 3
  353.       invalid_type            = 4
  354.       no_authority            = 5
  355.       unknown_error           = 6
  356.       header_not_allowed      = 7
  357.       separator_not_allowed   = 8
  358.       filesize_not_allowed    = 9
  359.       header_too_long         = 10
  360.       dp_error_create         = 11
  361.       dp_error_send           = 12
  362.       dp_error_write          = 13
  363.       unknown_dp_error        = 14
  364.       access_denied           = 15
  365.       dp_out_of_memory        = 16
  366.       disk_full               = 17
  367.       dp_timeout              = 18
  368.       file_not_found          = 19
  369.       dataprovider_exception  = 20
  370.       control_flush_error     = 21
  371.       not_supported_by_gui    = 22
  372.       error_no_gui            = 23
  373.       OTHERS                  = 24.
  374.   IF sy-subrc EQ 0.
  375.     CALL METHOD cl_gui_frontend_services=>execute
  376.       EXPORTING
  377. *       document               =
  378.         application            = l_filename
  379. *       parameter              =
  380. *       default_directory      =
  381. *       maximized              =
  382. *       minimized              =
  383. *       synchronous            =
  384. *       operation              = 'OPEN'
  385.       EXCEPTIONS
  386.         cntl_error             = 1
  387.         error_no_gui           = 2
  388.         bad_parameter          = 3
  389.         file_not_found         = 4
  390.         path_not_found         = 5
  391.         file_extension_unknown = 6
  392.         error_execute_failed   = 7
  393.         synchronous_failed     = 8
  394.         not_supported_by_gui   = 9
  395.         OTHERS                 = 10.
  396.     IF sy-subrc <> 0.
  397. *     Implement suitable error handling here
  398.     ENDIF.
  399.  
  400.   ENDIF.
  401.  
  402. ENDFORM.
  403.  
  404. *include LSTXBTOP.
  405.  
  406. types: t_tab_page        type tsffbcntpa,
  407.        t_tab_window      type tsffbcntwi,
  408.        t_tab_text_item   type tsffbcntti,
  409.        t_tab_graphic     type tsffbcntgr,
  410.        t_tab_address     type tsffbcntad,
  411.        t_tab_command     type tsffbcntcm,
  412.        t_tab_code        type tsffbcntco,
  413.        t_tab_condition   type tsffbcntcd,
  414.        t_tab_section     type tsffbcntse,
  415.        t_tab_event       type tsffbcntev,
  416. *      T_TAB_REFERENCE   TYPE tsffbcntre,
  417.        t_tab_outattr     type tsffbcntoa.
  418.  
  419. data:
  420.       g_pages             type t_tab_page         with header line,
  421.       g_windows           type t_tab_window       with header line,
  422.       g_text_items        type t_tab_text_item    with header line,
  423.       g_graphics          type t_tab_graphic      with header line,
  424.       g_addresses         type t_tab_address      with header line,
  425.       g_commands          type t_tab_command      with header line,
  426.       g_codes             type t_tab_code         with header line,
  427.       g_conditions        type t_tab_condition    with header line,
  428.       g_sections          type t_tab_section      with header line,
  429.       g_events            type t_tab_event        with header line,
  430. *     g_references        type t_tab_reference    with header line,
  431.       g_outattrs          type t_tab_outattr      with header line.
  432.  
  433. FORM data_load.
  434.  
  435.   SELECT * FROM stxfobjt INTO CORRESPONDING FIELDS OF TABLE t_obj
  436.     WHERE langu    = p_spras
  437.       AND formname =  p_sf.
  438.  
  439.   SELECT * FROM stxftxt INTO CORRESPONDING FIELDS OF TABLE t_text
  440.     WHERE spras    = p_spras
  441.       AND formname = p_sf.
  442. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  443. *--[ INETUM:INI 20210726
  444.     exit.
  445.     create OBJECT sf.
  446.     sf->load( EXPORTING IM_FORMNAME = p_sf
  447.                         IM_LANGUAGE = p_spras ).
  448.  
  449.  
  450.   perform get_all_nodes
  451.   in PROGRAM SAPLSTXB
  452.     tables
  453.       g_pages
  454.       g_windows
  455.       g_text_items "<-- Aquí están todas las variables que falta
  456.       g_graphics
  457.       g_addresses
  458.       g_commands
  459.       g_codes
  460.       g_conditions
  461.       g_sections
  462.       g_events
  463. *     g_references
  464.       g_outattrs
  465.       using  sf.
  466.   BREAK-POINT.
  467. ENDFORM.
  468.  
  469. FORM data_work.
  470.   LOOP AT t_obj INTO DATA(l_obj).
  471.  
  472.     l_tab-tdformat = c_COMMAND.
  473.  
  474.     CONCATENATE l_obj-objtype l_obj-iname l_obj-caption INTO
  475.     l_tab-tdline SEPARATED BY '|'.
  476.     APPEND l_tab TO t_tab.
  477.  
  478.     LOOP AT t_text INTO DATA(l_text) WHERE iname = l_obj-iname.
  479.       MOVE-CORRESPONDING l_text TO l_tab.
  480.       APPEND l_tab TO t_tab.
  481.     ENDLOOP.
  482.  
  483.   ENDLOOP.
  484. ENDFORM.