REPORT z_down_xml LINE-SIZE 132 NO STANDARD PAGE HEADING.
**********************************************************************
* REPORT Z_DOWN_XML - Using an internal table (gt_marc)              *
* and downloading the report data as an xml file                     *
* The xml indentation is hard coded into the file                    *
**********************************************************************
* Databases
TABLES:
  makt,                                "Mat description
  marc,                                "Material / plant
  t001w,                               "plant name
  bhdgd.                               "Batch heading

* Internal tables
DATA:
  BEGIN OF gt_marc OCCURS 0,
    werks LIKE marc-werks,
    matnr LIKE marc-matnr,
  END OF gt_marc,

* Table to be downloaded as xml. Each line stores start and end tags
* and the value
  BEGIN OF gt_xml OCCURS 0,
    line(120),
  END OF gt_xml,

  g_maktx(120).

* User-input
SELECT-OPTIONS:
  s_werks FOR marc-werks,
  s_matnr FOR marc-matnr.

**********************************************************************
START-OF-SELECTION.

* Extract all required data
  PERFORM main_processing.

**********************************************************************
END-OF-SELECTION.

  SORT gt_marc BY werks matnr.

  LOOP AT gt_marc.

    AT FIRST.                          "First tag must be root
      CLEAR gt_xml.
      gt_xml-line = '<LOCATIONS>'.
      APPEND gt_xml.
      CLEAR gt_xml.
    ENDAT.

    AT NEW werks.                      "At new plant
      PERFORM read_plant.
      FORMAT COLOR 4 ON.
      SKIP 1.
      WRITE :/ gt_marc-werks, t001w-name1.
      FORMAT COLOR 4 OFF.
      CLEAR gt_xml.
      gt_xml-line = ' <PLANT>'.
      APPEND gt_xml.
      CLEAR gt_xml.
      CONCATENATE ' <NUMBER>' gt_marc-werks '</NUMBER>'
      INTO gt_xml-line.
      APPEND gt_xml.
      CLEAR gt_xml.
      CONCATENATE ' <NAME>' t001w-name1 '</NAME>' INTO gt_xml-line.
      APPEND gt_xml.
      CLEAR gt_xml.
      gt_xml-line = ' </PLANT>'.
      APPEND gt_xml.
      CLEAR gt_xml.
    ENDAT.

    PERFORM read_description.

    CLEAR gt_xml.
    gt_xml-line = ' <MATERIAL>'.
    APPEND gt_xml.
    CLEAR gt_xml.
    CONCATENATE ' <NAME>' g_maktx '</NAME>'
    INTO gt_xml-line.
    APPEND gt_xml.
    CLEAR gt_xml.
    CONCATENATE ' <NUMBER>' gt_marc-matnr '</NUMBER>'
    INTO gt_xml-line.
    APPEND gt_xml.
    CLEAR gt_xml.
    gt_xml-line = ' </MATERIAL>'.
    APPEND gt_xml.
    CLEAR gt_xml.

* display data
    FORMAT COLOR 2 ON.
    WRITE :/ gt_marc-matnr, makt-maktx.
    FORMAT COLOR 2 OFF.
  ENDLOOP.

* The last tag must be the root closing tag --*
  gt_xml-line = '</LOCATIONS>'.
  APPEND gt_xml.
  CLEAR gt_xml.

  CALL FUNCTION 'DOWNLOAD'
       EXPORTING
            filename = 'C:\PLANT1.XML'
            filetype = 'ASC'
       TABLES
            data_tab = gt_xml.

**********************************************************************
TOP-OF-PAGE.

  MOVE sy-title TO bhdgd-line1.
  MOVE sy-repid TO bhdgd-repid.
  MOVE sy-uname TO bhdgd-uname.
  MOVE sy-datum TO bhdgd-datum.
  MOVE '0' TO bhdgd-inifl.
  MOVE '132' TO bhdgd-lines.
  FORMAT INTENSIFIED ON COLOR COL_HEADING.
  PERFORM batch-heading(rsbtchh0).     "report header

*---------------------------------------------------------------------*
*  Form READ_PLANT
*---------------------------------------------------------------------*
FORM read_plant.

* Get plant name
  CLEAR t001w.
  SELECT SINGLE name1
    INTO t001w-name1
    FROM t001w
   WHERE werks EQ gt_marc-werks.

ENDFORM.                               " READ_PLANT
*---------------------------------------------------------------------*
*  Form MAIN_PROCESSING
*---------------------------------------------------------------------*
FORM main_processing.

* Material and plant basic data
  SELECT werks matnr
    INTO TABLE gt_marc
    FROM marc
   WHERE werks IN s_werks
     AND matnr IN s_matnr.

ENDFORM.                               " MAIN_PROCESSING
*---------------------------------------------------------------------*
*  Form READ_DESCRIPTION
*---------------------------------------------------------------------*
FORM read_description.

* Material name
  CLEAR g_maktx.
  SELECT SINGLE maktx
    INTO g_maktx
    FROM makt
   WHERE matnr EQ gt_marc-matnr
     AND spras EQ 'E'.

* Replace special character
  DO.
    REPLACE '&' WITH '*ù%;' INTO g_maktx.
    IF NOT sy-subrc IS INITIAL. EXIT.ENDIF.
  ENDDO.
  DO.
    REPLACE '*ù%;' WITH '&amp;' INTO g_maktx.
    IF NOT sy-subrc IS INITIAL. EXIT.ENDIF.
  ENDDO.
  DO.
    REPLACE '/' WITH '&#47;' INTO g_maktx.
    IF NOT sy-subrc IS INITIAL. EXIT.ENDIF.
  ENDDO.

ENDFORM.                               " READ_DESCRIPTION
******************** END OF PROGRAM Z_DOWN_XML ************************
 
 
 
Serkan AKKAVAK
Computer Engineer
SAP Department Deputy Manager
Contact : serkurumsal@yandex.com