메뉴 건너뛰기

SAP 한국 커뮤니티



REPORT z_down_xml

노름마치 2007.11.05 13:01 조회 수 : 3989

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                    *
*--------------------------------------------------------------------*
* Author : Michel PIOUD                                              *
* Email : mpioud@yahoo.fr HomePage : http://www.geocities.com/mpioud *
**********************************************************************
* 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 '*u%;' INTO g_maktx.
    IF NOT sy-subrc IS INITIAL. EXIT.ENDIF.
  ENDDO.
  DO.
    REPLACE '*u%;' 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 ************************