Ver Mensaje Individual
  #1  
Viejo 29/12/17, 11:57:19
poketina poketina is offline
Senior Member
 
Fecha de Ingreso: jul 2006
Mensajes: 105
Subir PDF desde FTP a R3

Hola!!

Tengo un problema con un programa. Tengo unos archivos en un servidor FTP y tengo que subirlos a SAP. Con los XML no tengo problemas pero con el PDF sí, lo sube pero de forma incorrecta porque luego me da error al abrirlo.
Esto es lo que he hecho, a ver si alguien sabe en qué me he equivocado, o qué me falta o lo que sea.. mil gracias !!!

María

TYPES: BEGIN OF text,
line(400) TYPE c,
END OF text.
TYPES: BEGIN OF ty_xml,
raw(4000) TYPE c,
END OF ty_xml.

DATA: user(30) TYPE c ,
pwd(30) TYPE c ,
host(64) TYPE c ,
slen TYPE i,
key TYPE i VALUE 26101957,
hdl TYPE i,
dest TYPE rfcdes-rfcdest,
g_str TYPE xstring,
size TYPE i,
g_xmldata TYPE xstring,
l_lin(2048),
id_factura TYPE string,
i_info_cab TYPE zfe_st_datoss_factura,
gv_rectif TYPE char1,
extension(100).
DATA: bindata TYPE TABLE OF blob WITH HEADER LINE,
result TYPE TABLE OF text WITH HEADER LINE,
chardata TYPE TABLE OF text WITH HEADER LINE,
g_t_xml_tab TYPE TABLE OF ty_xml INITIAL SIZE 0,
i_fich TYPE TABLE OF epsfili WITH HEADER LINE,
blob_length TYPE i,
l_xstring TYPE xstring,
fichero_out LIKE rlgrap-filename,"(255),
carpeta LIKE user_dir-dirname.
DATA: BEGIN OF tab_bin OCCURS 0.
INCLUDE STRUCTURE sdokcntbin.
DATA: END OF tab_bin.

START-OF-SELECTION.

pwd = XXXXX.
user = XXXXXX.
host = xx.xx.xxx,xx.
* host = xxxxxxx.

slen = strlen( pwd ) .
* SAP Application Server -> FTP Server
dest = 'SAPFTPA'.

* La contraseña hay que formatearla
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
source = pwd
sourcelen = slen
key = key
IMPORTING
destination = pwd.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Connect to FTP Server'.

* Conectamos al directorio FTP
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = user
password = pwd
host = host
rfc_destination = dest
IMPORTING
handle = hdl
EXCEPTIONS
not_connected = 1
OTHERS = 2.

IF sy-subrc = 0.

* Ponemos modo pasivo
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = hdl
command = 'set passive off'
TABLES
data = result
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Create file on FTP Server'.

CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = hdl
command = 'ascii'
TABLES
data = result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3.

* Nos movemos a la carpeta DOWNLOAD
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = hdl
command = 'cd DOWNLOAD'
TABLES
data = result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3.

CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = hdl
command = 'dir'
TABLES
data = result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3.

LOOP AT result.
IF result CS 'pdf' .
i_fich-name = result+62(50).
APPEND i_fich.
ENDIF.
ENDLOOP.
LOOP AT i_fich.
* Se descarga el archivo del servidor
CALL FUNCTION 'FTP_SERVER_TO_R3'
EXPORTING
handle = hdl
fname = i_fich-name
* character_mode = 'X'
character_mode = abap_false
IMPORTING
blob_length = blob_length
TABLES
blob = bindata
* text = g_t_xml_tab
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
LOOP AT bindata.
CONCATENATE bindata-content l_xstring
INTO l_xstring IN BYTE MODE.
ENDLOOP.

SELECT SINGLE dirname INTO carpeta FROM user_dir
WHERE aliass = 'EFACTURASPROV'.
CONCATENATE
carpeta '\' 'ESB5872858540409928.pdf' INTO fichero_out.
OPEN DATASET fichero_out FOR OUTPUT IN BINARY MODE.
TRANSFER l_xstring TO fichero_out.
CLOSE DATASET fichero_out.

ENDLOOP.

ENDIF.
Responder Con Cita