REPORT ZNADARXXX.
CONSTANTS: c_comment TYPE tLINE-tdformat VALUE '--',
c_COMMAND TYPE tline-tdformat VALUE '>>',
c_delete TYPE tline-tdformat VALUE '>D'.
SELECTION-SCREEN BEGIN OF BLOCK b00 WITH FRAME.
PARAMETER: p_sf TYPE ssfscreen-fname DEFAULT 'ZNEW' OBLIGATORY,
p_sty TYPE stxschar-stylename DEFAULT 'ZPLANTILLA_DOC',
p_spras TYPE sy-langu DEFAULT sy-langu.
SELECTION-SCREEN END OF BLOCK b00.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
PARAMETER: p_file TYPE char1024 LOWER CASE,
p_down RADIOBUTTON GROUP mod DEFAULT 'X',
p_up RADIOBUTTON GROUP mod.
SELECTION-SCREEN END OF BLOCK b01.
PARAMETERS: "p_compi AS CHECKBOX DEFAULT ' ',
p_test AS CHECKBOX DEFAULT 'X'.
TYPES: BEGIN OF ty_file,
tdformat TYPE tline-tdformat,
espacio TYPE c LENGTH 1,
tdline TYPE tline-tdline,
END OF ty_file.
DATA: t_tab TYPE STANDARD TABLE OF tline,
l_tab TYPE tline,
t_obj TYPE STANDARD TABLE OF stxfobjt,
l_obj TYPE stxfobjt,
t_text TYPE STANDARD TABLE OF stxftxt,
l_text TYPE stxftxt,
t_file TYPE STANDARD TABLE OF ty_file,
l_file TYPE ty_file,
nt_tab TYPE STANDARD TABLE OF tline,
nl_tab TYPE tline,
l_ruler TYPE tline-tdline.
*--[ De aquí se puede sacar el styles...
data: sf type REF TO CL_SSF_FB_SMART_FORM.
INITIALIZATION.
p_file = 't:\nada.txt'.
end-of-SELECTION.
PERFORM data_load.
PERFORM data_work.
PERFORM data_down.
PERFORM data_up.
PERFORM data_save.
FORM data_up.
CHECK NOT p_up IS INITIAL.
DATA: l_filename TYPE string.
l_filename = p_file.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_filename
filetype = 'ASC'
* has_field_separator = SPACE
* header_length = 0
* read_by_line = 'X'
* dat_mode = SPACE
* codepage = SPACE
* ignore_cerr = ABAP_TRUE
* replacement = '#'
* virus_scan_profile =
* IMPORTING
* filelength =
* header =
CHANGING
data_tab = t_file
* isscanperformed = SPACE
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
*--[ Borramos comentarios
DELETE t_file WHERE tdformat = c_comment OR
( tdformat IS INITIAL AND tdline IS INITIAL ).
IF sy-subrc <> 0 AND lines( t_file ) > 0.
LOOP AT t_file INTO l_file.
CLEAR l_tab.
MOVE-CORRESPONDING l_file TO l_tab.
APPEND l_tab TO nt_tab.
ENDLOOP.
ENDIF.
ENDFORM.
FORM data_save.
DATA: l_linenr TYPE stxftxt-linenr.
CHECK NOT p_up IS INITIAL.
CHECK lines( t_file ) > 0.
CHECK t_tab[] NE t_file[].
*--[ Podemos grabar :D
CLEAR l_file.
* l_file-TDFORMAT = C_COMMENT. L_FILE-tdline = 'EOF'. APPEND l_file TO t_file.
LOOP AT t_file INTO l_file.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Línea de control
IF l_file-tdformat = c_COMMAND.
IF l_file-tdline CP '*|*|*'.
*--[ Estoy en línea de control
SPLIT l_file-tdline AT '|' INTO l_obj-objtype
l_obj-iname
l_obj-caption.
READ TABLE t_obj INTO DATA(l_obj_new) WITH KEY objtype = l_obj-objtype
iname = l_obj-iname.
IF sy-subrc EQ 0 AND l_obj_new-caption NE l_obj-caption.
IF p_test IS INITIAL.
UPDATE stxfobjt
SET caption = l_obj-caption
WHERE formname = p_sf
AND objtype = l_obj-objtype
AND iname = l_obj-iname.
ENDIF.
ENDIF.
CLEAR l_LINENR. "<-- RESET contador
*--[ Puede que sea un nuevo objeto o que no ha cambiado. Lo ignoramos.
CONTINUE. "<-- Vamos al siguiente registro
ENDIF.
ENDIF.
IF l_file-tdformat = c_delete.
SELECT * FROM stxftxt INTO @DATA(to_delete)
WHERE spras = @p_spras AND
formname = @p_sf AND
iname = @l_obj-iname AND
tdline = @l_file-tdline.
ENDSELECT.
IF sy-subrc EQ 0.
IF p_test IS INITIAL.
DELETE FROM stxftxt
WHERE spras = p_spras AND
formname = p_sf AND
iname = l_obj-iname AND
tdline = l_file-tdline.
ENDIF.
ENDIF.
CONTINUE. "<-- Vamos al siguiente
ENDIF.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Línea de cuerpo.
l_LINENR = l_LINENR + 1.
READ TABLE t_text INTO l_text WITH KEY formname = p_sf
iname = l_obj-iname
linenr = l_LINENR
tdformat = l_file-tdformat
tdline = l_file-tdline.
IF sy-subrc EQ 0.
*--[ No he cambiado, no hacer nada.
ELSE.
*--[ He cambiado o no existo
READ TABLE t_text INTO l_text WITH KEY formname = p_sf
iname = l_obj-iname
linenr = l_LINENR.
IF sy-subrc EQ 0.
*--[ He cambiado
IF p_test IS INITIAL.
UPDATE stxftxt
SET tdformat = l_file-tdformat
tdline = l_file-tdline
WHERE spras = p_spras AND
formname = l_text-formname AND
iname = l_text-iname AND
linenr = l_text-linenr.
ENDIF.
ELSE.
*--[ No existo
CLEAR l_text.
l_text-spras = p_spras.
l_text-txtype = 'F'.
l_text-formname = p_sf.
l_text-iname = l_obj-iname.
*l_text-VARI
l_text-linenr = l_LINENR.
l_text-tdformat = l_file-tdformat.
l_text-tdline = l_file-tdline.
IF p_test IS INITIAL.
INSERT stxftxt FROM l_text.
ENDIF.
ENDIF.
ENDIF.
DATA: sform TYPE REF TO cl_ssf_fb_smart_form.
ENDLOOP.
ENDFORM.
FORM file_cab.
l_file-tdformat = c_comment. l_file-tDline = ''. APPEND l_file TO t_file.
l_file-tDline = 'LANGUAGE:' && p_spras && ' SMARTFORM:' && p_sf. APPEND l_file TO t_file.
l_file-tDline = 'DATE:' && sy-datum && ' TIME:' && sy-uzeit. APPEND l_file TO t_file.
l_file-tDline = ''. APPEND l_file TO t_file.
l_file-tDline = '** NO DISCLAIRMER. NO WARRANTY. FIRST MAKE A BACKUP OF YOUR SMARTFORM. **'.
APPEND l_file TO t_file.
l_file-tDline = ''. APPEND l_file TO t_file.
l_file-tDline = 'Respect the file format. You cannot introduce new objects. '. APPEND l_file TO t_file.
l_file-tDline = 'It''s like a tdline of 132 positions'. APPEND l_file TO t_file.
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.
l_file-tDline = ''. APPEND l_file TO t_file.
l_file-tDline = 'COMMANDS:'. APPEND l_file TO t_file.
l_file-tDline = c_command && ' : The presence of an object. Format:' &&
'TYPE|NAME|CAPTION'. APPEND l_file TO t_file.
l_file-tDline = c_comment && ' : Commented line. Not imported.'. APPEND l_file TO t_file.
l_file-tDline = c_delete && ' : That line will be erased. Be careful, because it' &&
' uses the description as a key and it can get messy.'.
APPEND l_file TO t_file.
l_file-tDline = ''. APPEND l_file TO t_file.
IF NOT p_sty IS INITIAL.
l_file-tDline = '*--[ BEGIN OF STYLES'. APPEND l_file TO t_file.
SELECT * FROM stxspara INTO @DATA(l_para)
WHERE active = 'A'
AND stylename = @p_sty.
l_file-tdline = 'Paragraph [' && l_para-tDPARGRAPH && ']~' &&
'Family [' && l_para-tdfamily && ']~' &&
'Height [' && l_para-tdheight && ']' &&
COND string( WHEN l_para-tdbold = 'X' THEN '~Bold~' ELSE '' ) &&
COND string( WHEN l_para-tditalic = 'X' THEN '~Italic~' ELSE '' ) &&
COND string( WHEN l_para-tdunderlin = 'X' THEN '~Underlined~' ELSE '' ) &&
'~' && l_para-tdpjustify.
TRANSLATE l_file-tdline USING '~ '.
APPEND l_file TO t_file.
ENDSELECT.
SELECT * FROM stxschar INTO @DATA(l_stxschar)
WHERE active = 'A'
AND stylename = @p_sty.
l_file-tdline = 'Character~~[' && l_stxschar-tdstring && ']~' &&
'Family [' && l_stxschar-tdfamily && ']~' &&
'Height [' && l_stxschar-tdheight && ']' &&
COND string( WHEN l_stxschar-tdbold = 'X' THEN '~Bold~' ELSE '' ) &&
COND string( WHEN l_stxschar-tditalic = 'X' THEN '~Italic~' ELSE '' ) &&
COND string( WHEN l_stxschar-tdunderlin = 'X' THEN '~Underlined~' ELSE '' ).
TRANSLATE l_file-tdline USING '~ '.
APPEND l_file TO t_file.
ENDSELECT.
l_file-tDline = '*--[ END OF STYLES'. APPEND l_file TO t_file.
l_file-tdformat = '--'. l_file-tDline = ''. APPEND l_file TO t_file.
l_file-tDline = '*--[ BEGIN OF BODY'. APPEND l_file TO t_file.
l_file-tdformat = '--'. l_file-tDline = ''. APPEND l_file TO t_file.
CONCATENATE '.........1.........2.........3.........4.........5.........6'
'.........7.........8.........9.........0.........1.........2'
'.........3..'
INTO l_file-tDline. APPEND l_file TO t_file.
l_ruler = l_file-tDline.
ENDIF.
ENDFORM.
FORM data_down.
CHECK NOT p_down IS INITIAL.
DATA: l_filename TYPE string.
l_filename = p_file.
PERFORM file_cab.
LOOP AT t_tab INTO l_tab.
CLEAR l_file.
IF strlen( l_tab-tdline ) >= 100.
l_file-tdformat = '--'.
l_file-tdline = l_ruler.
APPEND l_file TO t_file.
ENDIF.
CLEAR l_file.
MOVE-CORRESPONDING l_tab TO l_file.
APPEND l_file TO t_file.
ENDLOOP.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
* bin_filesize = 'ASC'
filename = l_filename
filetype = 'ASC'
* append = SPACE
* write_field_separator = SPACE
* header = '00'
* trunc_trailing_blanks = SPACE
* write_lf = 'X'
* col_select = SPACE
* col_select_mask = SPACE
* dat_mode = SPACE
* confirm_overwrite = SPACE
* no_auth_check = SPACE
* codepage = SPACE
* ignore_cerr = ABAP_TRUE
* replacement = '#'
* write_bom = SPACE
* trunc_trailing_blanks_eol = 'X'
* wk1_n_format = SPACE
* wk1_n_size = SPACE
* wk1_t_format = SPACE
* wk1_t_size = SPACE
* show_transfer_status = 'X'
* fieldnames =
* write_lf_after_last_line = 'X'
* virus_scan_profile = '/SCET/GUI_DOWNLOAD'
* IMPORTING
* filelength =
CHANGING
data_tab = t_file
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.
IF sy-subrc EQ 0.
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
* document =
application = l_filename
* parameter =
* default_directory =
* maximized =
* minimized =
* synchronous =
* operation = 'OPEN'
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDFORM.
*include LSTXBTOP.
types: t_tab_page type tsffbcntpa,
t_tab_window type tsffbcntwi,
t_tab_text_item type tsffbcntti,
t_tab_graphic type tsffbcntgr,
t_tab_address type tsffbcntad,
t_tab_command type tsffbcntcm,
t_tab_code type tsffbcntco,
t_tab_condition type tsffbcntcd,
t_tab_section type tsffbcntse,
t_tab_event type tsffbcntev,
* T_TAB_REFERENCE TYPE tsffbcntre,
t_tab_outattr type tsffbcntoa.
data:
g_pages type t_tab_page with header line,
g_windows type t_tab_window with header line,
g_text_items type t_tab_text_item with header line,
g_graphics type t_tab_graphic with header line,
g_addresses type t_tab_address with header line,
g_commands type t_tab_command with header line,
g_codes type t_tab_code with header line,
g_conditions type t_tab_condition with header line,
g_sections type t_tab_section with header line,
g_events type t_tab_event with header line,
* g_references type t_tab_reference with header line,
g_outattrs type t_tab_outattr with header line.
FORM data_load.
SELECT * FROM stxfobjt INTO CORRESPONDING FIELDS OF TABLE t_obj
WHERE langu = p_spras
AND formname = p_sf.
SELECT * FROM stxftxt INTO CORRESPONDING FIELDS OF TABLE t_text
WHERE spras = p_spras
AND formname = p_sf.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ INETUM:INI 20210726
exit.
create OBJECT sf.
sf->load( EXPORTING IM_FORMNAME = p_sf
IM_LANGUAGE = p_spras ).
perform get_all_nodes
in PROGRAM SAPLSTXB
tables
g_pages
g_windows
g_text_items "<-- Aquí están todas las variables que falta
g_graphics
g_addresses
g_commands
g_codes
g_conditions
g_sections
g_events
* g_references
g_outattrs
using sf.
BREAK-POINT.
ENDFORM.
FORM data_work.
LOOP AT t_obj INTO DATA(l_obj).
l_tab-tdformat = c_COMMAND.
CONCATENATE l_obj-objtype l_obj-iname l_obj-caption INTO
l_tab-tdline SEPARATED BY '|'.
APPEND l_tab TO t_tab.
LOOP AT t_text INTO DATA(l_text) WHERE iname = l_obj-iname.
MOVE-CORRESPONDING l_text TO l_tab.
APPEND l_tab TO t_tab.
ENDLOOP.
ENDLOOP.
ENDFORM.