PDA

Ver la Versión Completa : Exportar a XML


Caher
19/10/06, 10:55:41
Buenas a todos!

Necesitaria saber como exportar una extructura de DB SAP a un archivo XML.

Saludos, Gracias!

davidsap
23/10/06, 14:59:45
A mí también me vendría muy bien. Estoy investigando precisamente sobre eso, si logro algo en claro, lo pongo aquí.

Saludos

Caher
25/10/06, 13:38:18
Si la versión de tu sistema te lo permite (yo no puedo) puedes echar un vistazo a este FM
RSWAD_TABLECONTENT_TO_XML

Tambien he probado esto:

CALL TRANSFORMATION (`ID`)
SOURCE header = headeritab[]
item = itemitab[]
RESULT XML xml_out.

Un saludo.

raul_daimiel
25/10/06, 14:51:52
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

davidsap
26/10/06, 08:01:19
Ok, lo he probado y funciona perfecto, aunque tenía dos errores (al menos en mi PC):

Antes de la función WS_DOWNLOAD tenías puesto DATA: W_SIZE TYPE I. que ya estaba declarada con anterioridad y en la propia función WS_DOWNLOAD hay que descomentar la línea de BIN_FILESIZE = W_SIZE.

En mi caso la tabla MARA tiene 4000 registros, y al ejecutar el programa se queda colgado. Yo lo he solucionado poniendo el siguiente código justo después del select:
LOOP AT I_IDOC2.
IF SY-TABIX > 20.
DELETE I_IDOC2 INDEX SY-TABIX.
ENDIF.
ENDLOOP.

De esta foma dejo la tabla interna sólo con 20 registros y me funciona perfectamente.

Por cierto, añadiendo al final del todo (o antes del WS_DOWNLOAD) el siguiente código:

CALL FUNCTION 'SDIXML_DOM_TO_SCREEN'
EXPORTING
document = M_DOCUMENT
EXCEPTIONS
others = 01.

Hacemos que se muestre por pantalla el código del fichero XML de la misma forma que si lo estuvieramos visualizando por pantalla, contrayendo y expandiendo los nodos. Igual no tiene demasiada utilidad pero bueno, yo lo pongo por si os sirve.

Muchas gracias por tu ayuda y un saludo a todos

gerbeltran
24/10/07, 12:52:16
Buenas estoy tratando de implementar la opcion que utiliza CALL TRANSFORMATION (`ID`) para pasar de un XML a una tabla interna de Abap, pero no logro darme cuenta donde y cómo declaro la tranformación 'ID' que luego llamo.

Si alguien pudo implementarla le agradecería si me lo puede explicar un poco mas.

Saludos,
Germán.

leir1612
24/08/10, 20:28:09
Alguien sabe que valores espera esta interface
IF_IXML_DOCUMENT

NAME
NAMESPACE???