MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #11  
Viejo 12/11/09, 15:08:08
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Buenas

Necesitaria mas informacion

Cual es el origen de los datos? Los datos los recibes como un stream de datos en BASE64? los recibes en una tabla? en un xml?

Tambien ayudaria que pegaras el codigo que llevas hecho para que lo vieramos

Dame mas informacion y dependiendo del origen de datos te digo como podriamos hacerlo
Responder Con Cita
  #12  
Viejo 12/11/09, 15:48:30
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
Hola ballan

Este es mi código:


DATA: pe_fichero TYPE string,
pe_fichero2 type xstring.

DATA: BEGIN OF i_lines_fichero occurs 0,
tdline(255) type x.
DATA: END OF i_lines_fichero.

DATA:
ruta type char30,
BIN_SIZE TYPE I,
contador_posiciones TYPE i VALUE 0,
longitud_fichero TYPE i,
fichero_binario TYPE xstring,
cociente TYPE i,
resto TYPE i,
r_registro_linea LIKE LINE OF i_lines_fichero,
fichero_base64 TYPE string,

ruta_funcion LIKE sapb-sappfad.


"Esto es un ejemplo de string binario correspondiente a un xml.
"Como no tengo ningún ejemplo de momento de string en base64
"correspondiente a un xml, lo que hago es pasar esto a binario64
"y luego a binario, para verificar que usando las funciones de
"más abajo, lo convierte bien.


CONCATENATE

'50313939392D31302D3230000B416C69636520536D697468533136313233204D'
'61706C65205374726565744D696C6C2056616C6C657920202020202020202043'
'41393039353200010C526F6265727420536D69746850EA1400004F6C6420546F'
'776E20202020202020202020202050413935383139005048757272792C206D79'
'206C61776E20697320676F696E672077696C6421003837322D4141004C61776E'
'6D6F7765720031003134382E39350050436F6E6669726D207468697320697320'
'656C65637472696300413932362D41410042616279204D6F6E69746F72003100'
'33392E3938004150313939392D30352D323100'


INTO pe_fichero.

pe_fichero2 = pe_fichero.


*Paso de binario a binario64

CALL FUNCTION 'SSFC_BASE64_ENCODE'
EXPORTING
BINDATA = pe_fichero2
* BINLENG =
IMPORTING
B64DATA = fichero_base64

.
IF SY-SUBRC <> 0.

ENDIF.


"Paso de binario64 a binario

CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
B64DATA = fichero_base64
* B64LENG =
* B_CHECK =
IMPORTING
BINDATA = fichero_binario

.
IF SY-SUBRC <> 0.

ENDIF.


if fichero_binario = pe_fichero. "Si realmente lo convierte bien

longitud_fichero = XSTRLEN( fichero_binario ).
cociente = longitud_fichero div 255.
resto = longitud_fichero mod 255.


DO cociente TIMES.

r_registro_linea-tdline = fichero_binario+contador_posiciones(255).
APPEND r_registro_linea TO i_lines_fichero.
contador_posiciones = contador_posiciones + 255.
CLEAR r_registro_linea.

ENDDO.

r_registro_linea-tdline = fichero_binario+contador_posiciones(resto).
APPEND r_registro_linea TO i_lines_fichero.

ruta = 'C:\Documents and Settings\usr\Escritorio\Fic1.xml'.


CALL FUNCTION 'SAP_CONVERT_TO_XML_FORMAT'
EXPORTING
I_FILENAME = 'Fic1.xml'
I_XML_DOC_NAME = ruta
IMPORTING
PE_BIN_FILESIZE = BIN_SIZE
TABLES
I_TAB_SAP_DATA = i_lines_fichero
* CHANGING
* I_TAB_CONVERTED_DATA = i_lines_fichero
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.

IF SY-SUBRC <> 0.

ENDIF.


CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = 'C:\Documents and Settings\usr\Escritorio\Fic1.xml'
FILETYPE = 'BIN'
TABLES
DATA_TAB = i_lines_fichero.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

else.

MESSAGE 'El archivo generado no es igual que el de entrada' TYPE 'I'.

endif.


Es el mismo código que me funcionaba para pdf, pero he añadido la función de convertir a xml. A lo mejor no la estoy usando bien o no es la que tengo que usar.

Gracias por contestar tan rápido
Responder Con Cita
  #13  
Viejo 12/11/09, 16:11:11
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
Por si no ha quedado claro en mi respuesta, los datos los recibo como un string en base64, y de ahí he de convertirlo a xml...
Responder Con Cita
  #14  
Viejo 12/11/09, 18:13:33
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Vale una cosa que se me ha olvidado preguntarte es que como vas a generar las etiquetas? las etiquetas vienen en el stream? o tienes que leer el stream y dependiendo de los campos que lleve generar las etiquetas?

Lo primero que debo decir es que yo no tengo muchos conocimientos de XML por lo que hay muchas cosas que desconozco y seguro que hay una manera mas sencilla de hacerlo

Pero mas o menos la idea seria la siguiente

Para generar un XML se puede hacer de las siguientes maneras

Teniendo los datos metidos en una tabla interna (Funcion (SDIXML_DATA_TO_DOM y SDIXML_DOM_TO_XML)
Teniendo los datos en formato DOM (Funcion SDIXML_DOM_TO_XML)

Asi que tu objetivo deberia ser convertir el stream de datos que te llega o bien a una tabla interna o bien a formato DOM

El problema que tienes es que tu stream de datos te viene en BASE64 y lo que necesitarias no es solo convertirlo a binario sino convertirlo a caracteres para posteriormente meterlo en la tabla y convertirlo en xml

Para convertir de binario a caracteres se puede hacer de forma muy sencilla con field-symbols

seria algo mas o menos asi

data: lv_bin(4) type x,
lv_char(2) type c.

field-symbols: <char> type c.

assign lv_bin to <char> CASTING.

lv_char = <char>.

Podrias recorrer la cadena e ir convirtiendola a caracteres, se que eso es una solucion bastante chapucera pero alguien que tenga mas conocimientos de XML podria arrojarnos mas luz sobre esto

El otro camino seria utilizar la clase CL_XML_DOCUMENT

Con ella puedes crear el XML y supongo que de alguna manera podras traducir ese stream ya sea en binario o en base64 para que lo traduzca y lo meta en el XML

De todas formas te reitero que tienes que saber como colocar las etiquetas

Bueno espero haber ayudado algo :s
Responder Con Cita
  #15  
Viejo 17/11/09, 16:52:52
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
No he tenido tiempo para probarlo, pero voy a ver si mañana lo pongo en práctica.

Muchas gracias por contestar

Saludos!!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 11:22:34.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web