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