Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

XML file download format

divsmart
Participant
0 Kudos
2,798

Hi Experts,

I need to download the XML files in BG , I done as per requirment.

But i need an format as below. Please advice

FORM convert_xml_form .

DATA: ld_filename TYPE string,
file_path TYPE string,
l_filename TYPE string,
ld_path TYPE string,
ld_fullpath TYPE string,
ld_result TYPE i,
lv_path TYPE rlgrap-filename,"string,
lv_data TYPE string.
DATA: gs_name(30) TYPE c VALUE '_Material Received'.

DATA: ls_string TYPE string.

LOOP AT lt_last1 INTO ls_last1.

gs_xml-line = '<Material Received>'.
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Receiving Number>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-mblnr .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Receiving Number>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Line Item>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-zeile .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Line Item>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Purshase Order>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-ebeln .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Purshase Order>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Part Number>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-matnr .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Part Number>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Unit Of Entry >' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-erfme .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Unit Of Entry >' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Qty Of UOM>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-erfmg .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Qty Of UOM>' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Quantity >' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-menge.
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Quantity >' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '<Vendor name >' .
APPEND gs_xml TO gt_xml.

gs_xml-line = ls_last1-name1.
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Vendor name >' .
APPEND gs_xml TO gt_xml.

gs_xml-line = '</Material Received>'.
APPEND gs_xml TO gt_xml.

lv_path = p_file.

CLEAR : lv_data.
CONCATENATE ls_last1-matnr '-' ls_last1-mblnr '-' ls_last1-zeile gs_name INTO lv_data.
CONCATENATE lv_path lv_data'.XML' INTO ld_fullpath.
*-----------------------------------------------------------------
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = ld_fullpath
filetype = 'ASC'
CHANGING
data_tab = gt_xml
EXCEPTIONS
OTHERS = 24.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
REFRESH:gt_xml.
CLEAR: ls_last,ls_last1,lv_path,file_path,l_filename,ld_fullpath.

ENDLOOP.

5 REPLIES 5

raymond_giuseppi
Active Contributor
0 Kudos
2,317

Perform some search on statement CALL TRANSFORMATION (online help) (forum)

0 Kudos
2,317

Thanks Raymond,

I used CALL TRANSFORMATION to download the XML file as below .

Here i need to change the column name as attachment.

Please advice.

DATA: lv_path TYPE rlgrap-filename,"string,
lv_data TYPE string,
ld_fullpath TYPE string.

DATA: lt_part TYPE TABLE OF zct_xml,
ls_part TYPE zpart_xml,

lt_part1 TYPE TABLE OF zct_xml,
ls_part1 LIKE LINE OF lt_part1,
xml_res TYPE string.


DATA: lo_xml_doc TYPE REF TO cl_xml_document,
lv_string TYPE string,
lv_file TYPE string.
DATA it_xml TYPE dcxmllines.
DATA: gs_name(30) TYPE c VALUE '_Material Received'.

*BREAK-POINT.
LOOP AT lt_last1 INTO ls_last1.
ls_part-mblnr = ls_last1-mblnr.
ls_part-zeile = ls_last1-zeile.
ls_part-ebeln = ls_last1-ebeln.
ls_part-matnr = ls_last1-matnr.
ls_part-erfmg = ls_last1-erfmg.
ls_part-menge = ls_last1-menge.
ls_part-lifnr = ls_last1-lifnr.
ls_part-name1 = ls_last1-name1.
APPEND ls_part TO ls_part1.
APPEND ls_part1 TO lt_part1.
CLEAR: ls_part.
ENDLOOP.

CALL TRANSFORMATION zpart_rev SOURCE part = lt_part1 RESULT XML xml_res.

CREATE OBJECT lo_xml_doc.
lo_xml_doc->parse_string( xml_res ).

CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
document = lo_xml_doc->m_document
pretty_print = 'X'
TABLES
xml_as_table = it_xml
EXCEPTIONS
no_document = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

lv_path = p_file.

CLEAR : lv_data.
CONCATENATE ls_last1-matnr '-' ls_last1-mblnr '-' ls_last1-zeile gs_name INTO lv_data.
CONCATENATE lv_path lv_data'.XML' INTO ld_fullpath.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = ld_fullpath
filetype = 'BIN'
TABLES
data_tab = it_xml
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Getting output:

Need output:

Tomas_Buryanek
Active Contributor
0 Kudos
2,317

Hello,

do you really really need that "pretty print" formating? Keep in mind that it is just for humans. Importing program / API does NOT need it to be able to read it.

If yes, then I suggest to try ID transformation in ABAP using parameter "indend", which formats your XML output:

https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abapcall_transformati...

Check some code examaples here:

https://www.kerum.pl/infodepot/00049?showinfo=00049

(using standard transformation ID_INDENT)

-- Tomas --

Sandra_Rossi
Active Contributor
0 Kudos
2,317

It seems that your question is not very clear. Could you elaborate?

NB: in background, the program runs on the server in "standalone mode", so you cannot run operations on the frontend (GUI_DOWNLOAD will fail for instance).

raymond_giuseppi
Active Contributor
0 Kudos
2,317

Your right display is a human-readable one as displayed by browsers or editor, be aware that it's not the actual internal format of the xml file. Did you already try to open your flat file in a browser or xml editor?