SAP Program/ABAP

Internal table data to xml

유부사모 2017. 11. 22. 17:02

REPORT y_itab_to_xml.

*----------------------------------------------------------------------*
* PANTALLA SELECCION *
PARAMETERSgk_ruta TYPE rlgrap-filename.
* PANTALLA SELECCION *
*----------------------------------------------------------------------*

DATAlt_y042 TYPE TABLE OF yqmt_042.

*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* START OF SELECTION *
START-OF-SELECTION.
  PERFORM llena_accesos.
  PERFORM descarga_xml.

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

*----------------------------------------------------------------------*
* FORM LLENA_ACCESOS *
FORM llena_accesos.
  SELECT FROM yqmt_042
    INTO CORRESPONDING FIELDS OF TABLE lt_y042.

ENDFORM.
* FORM LLENA_ACCESOS *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* FORM DESCARGA_XML *
FORM descarga_xml.
  DATAl_dom      TYPE REF TO if_ixml_element,
        m_document TYPE REF TO if_ixml_document,
        g_ixml     TYPE REF TO if_ixml,
        w_string   TYPE xstring,
        w_size     TYPE i,
        w_result   TYPE i,
        w_line     TYPE string,
        it_xml     TYPE dcxmllines,
        s_xml      LIKE LINE OF it_xml,
        w_rc       LIKE sy-subrc.

  DATAxml TYPE dcxmllines.
  DATArc TYPE sy-subrc,
        BEGIN OF xml_tab OCCURS 0,
          d LIKE LINE OF xml,
        END OF xml_tab.

  CLASS cl_ixml DEFINITION LOAD.
  g_ixml cl_ixml=>create).
  CHECK NOT g_ixml IS INITIAL.

  m_document g_ixml->create_document).
  CHECK NOT m_document IS INITIAL.

  WRITE'Converting DATA TO DOM 1:'.

  CALL FUNCTION 'SDIXML_DATA_TO_DOM'
    EXPORTING
*     name         = 'ACCESOS'
*     dataobject   = accesos[]
      name         'LT_Y042'
      dataobject   lt_y042[]
    IMPORTING
      data_as_dom  l_dom
    CHANGING
      document     m_document
    EXCEPTIONS
      illegal_name 1
      OTHERS       2.
  IF sy-subrc 0.
    WRITE 'Ok'.
  ELSE.
    WRITE'Err =',
    sy-subrc.
  ENDIF.

  CHECK NOT l_dom IS INITIAL.

  w_rc m_document->append_childnew_child l_dom ).
  IF w_rc IS INITIAL.
    WRITE 'Ok'.
  ELSE.
    WRITE'Err =',
    w_rc.
  ENDIF.

  CALL FUNCTION 'SDIXML_DOM_TO_XML'
    EXPORTING
      document      m_document
    IMPORTING
      xml_as_string w_string
      size          w_size
    TABLES
      xml_as_table  it_xml
    EXCEPTIONS
      no_document   1
      OTHERS        2.
  IF sy-subrc 0.
    WRITE 'Ok'.
  ELSE.
    WRITE'Err =',
    sy-subrc.
  ENDIF.
  LOOP AT it_xml INTO xml_tab-d.
    APPEND xml_tab.
  ENDLOOP.

  DATAlv_filename TYPE string.

  lv_filename gk_ruta.

  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename                lv_filename
    CHANGING
      data_tab                xml_tab[]
    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 <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.