Basicamente você tem um XML em formato string e quer baixar ele. Além da opção de enviar este XML para o SAP, assim como faz a EDOC_BR_UPLOAD / EDOC_COCKPIT.
Este é um tipo de conteúdo que se tem pouco na web, então se for copiar, lembre de nos mencionar ok.
Este é um tipo de conteúdo que se tem pouco na web, então se for copiar, lembre de nos mencionar ok.
REPORT SAPeiros.
TYPES ty_x_line(256) TYPE x.
DATA:
gt_xtab TYPE TABLE OF ty_x_line,
gt_return TYPE TABLE OF bapiret2,
gv_xtab_size TYPE i,
gv_folder TYPE string,
gv_filename TYPE string,
gv_xml_string TYPE string,
gv_xml_xstring TYPE xstring,
gcl_ixml TYPE REF TO if_ixml,
gcl_document TYPE REF TO if_ixml_document,
gcl_streamfactory TYPE REF TO if_ixml_stream_factory,
gcl_parser TYPE REF TO if_ixml_parser,
gcl_istream TYPE REF TO if_ixml_istream,
gcl_renderer TYPE REF TO if_ixml_renderer.
PARAMETERS p_edoc TYPE flag_x.
PARAMETERS p_down TYPE flag_x.
PARAMETERS p_dir TYPE rlgrap-filename.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
CALL METHOD cl_gui_frontend_services=>directory_browse
CHANGING
selected_folder = gv_folder.
p_dir = gv_folder.
INITIALIZATION.
%_p_edoc_%_app_%-text = 'Carregar XML para entro do SAP'.
%_p_down_%_app_%-text = 'Download do XML'.
%_p_dir_%_app_%-text = 'Pasta de destino'.
END-OF-SELECTION.
gv_xml_string = '<SAP><bestblog>SAPeiros</bestblog><bestdeveloper>Coelho</bestdeveloper></SAP>'.
* Converter para XString
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = gv_xml_string
encoding = '4110'
IMPORTING
buffer = gv_xml_xstring
EXCEPTIONS
failed = 1
OTHERS = 2.
* Download para arquivo local
IF p_down IS NOT INITIAL.
DATA(lv_size_dir) = strlen( p_dir ).
lv_size_dir = lv_size_dir - 1.
IF p_dir+lv_size_dir(1) NE '\'.
p_dir = p_dir && '\'.
ENDIF.
CLEAR: gv_xtab_size, gv_filename, gt_xtab[].
gv_filename = p_dir && sy-datum && sy-uzeit && '.XML'.
gcl_ixml = cl_ixml=>create( ).
gcl_streamfactory = gcl_ixml->create_stream_factory( ).
gcl_istream = gcl_streamfactory->create_istream_xstring( string = gv_xml_xstring ).
gcl_document = gcl_ixml->create_document( ).
gcl_parser = gcl_ixml->create_parser( stream_factory = gcl_streamfactory
istream = gcl_istream
document = gcl_document ).
gcl_parser->parse( ).
IF sy-subrc IS INITIAL.
CALL METHOD cl_ixml_80_20=>render_to_table_of_x
EXPORTING
document = gcl_document
pretty_print = 1
IMPORTING
stream_table = gt_xtab
stream_table_size = gv_xtab_size.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = gv_xtab_size
filename = gv_filename
filetype = 'BIN'
TABLES
data_tab = gt_xtab
EXCEPTIONS
OTHERS = 1.
ENDIF.
ENDIF.
* eDocument Brasil: Carregar XML
IF p_edoc IS NOT INITIAL.
DATA(lcl_xml) = NEW cl_xml_document( ).
DATA(lv_retcode) = lcl_xml->parse_xstring( EXPORTING stream = gv_xml_xstring ).
IF lv_retcode NE 0.
CALL METHOD lcl_xml->render_2_xstring
IMPORTING
retcode = lv_retcode
stream = gv_xml_xstring
size = DATA(lv_size).
IF lv_retcode EQ 0.
CALL FUNCTION 'EDOC_BR_RECEIVE_XML'
EXPORTING
iv_xml = gv_xml_xstring
IMPORTING
et_bapiret2 = gt_return.
ENDIF.
ENDIF.
ENDIF.