Ver Mensaje Individual
  #12  
Viejo 12/11/09, 14: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