Ver Mensaje Individual
  #4  
Viejo 25/10/06, 14:51:52
raul_daimiel raul_daimiel is offline
Junior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 1
Smile Crear un XML con los datos de una tabla del sistema

Hola, chicos!.

Aquí tenéis un ejemplo sencillito. Lo que hace es descargar a una ruta local ( por defecto C:\ ), el contenido de la tabla del sistema MARA a un fichero XML.

Hay una parte del código - donde se lleva a cabo la transformación - que no sabría explicar qué hace, pero, vamos, el hecho es que funciona...

** Tabla del sistema

Tables: mara.

data: begin of i_idoc2 occurs 0.
include structure mara.
data: end of i_idoc2.


*** DECLARACION DE DATOS PARA EL TRATAMIENTO DEL XML

DATA: L_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.

DATA: XML TYPE DCXMLLINES.
DATA: RC TYPE SY-SUBRC,
BEGIN OF XML_TAB OCCURS 0,
D LIKE LINE OF XML,
END OF XML_TAB.

*** RECUPERAMOS EL CONTENIDO DE LA TABLA MARA.

** Esta parte no tengo demasiado clara cómo explicarla, pero, a lo
** que voy, lo importante es que funciona....jajajaja

select * into
table i_idoc2 from mara.

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.

CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
NAME = 'IDOC'
DATAOBJECT = I_IDOC2[]
IMPORTING
DATA_AS_DOM = L_DOM
CHANGING
DOCUMENT = M_DOCUMENT
EXCEPTIONS
ILLEGAL_NAME = 1
OTHERS = 2.

CHECK NOT L_DOM IS INITIAL.
W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).

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.

** Aquí ya tenemos la tabla con la estructura del fichero XML.

LOOP AT IT_XML INTO XML_TAB-D.
APPEND XML_TAB.
ENDLOOP.

DATA: W_SIZE TYPE I.

CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
* BIN_FILESIZE = W_SIZE
FILENAME = 'C:\FICHERO.XML'
FILETYPE = 'BIN'
TABLES
DATA_TAB = XML_TAB
EXCEPTIONS
OTHERS = 10.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Espero que os sirva, niños!

Raúl
Responder Con Cita