Ver Mensaje Individual
  #1  
Viejo 14/10/10, 12:31:56
poketina poketina is offline
Senior Member
 
Fecha de Ingreso: jul 2006
Mensajes: 105
Problema con conexión FTP

Hola,

Tengo un problema con el que llevo ya un montón de tiempo..
Me pidieron que coja unos ficheros de un directorio en concreto (por el que puedo navegar sin problemas desde la AL11) y dejarlos a través de una conexión FTP en un directorio del cliente.

Esto es lo que he hecho yo en mi programa:

Primero obtengo los ficheros a descargar del directorio que me han dado:

FORM obtener_ficheros .

* Obtengo la lista de ficheros de la AL11
w_dirnam = '\\172.24.140.21\Overlim\idoc\salida\'.

CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
dir_name = w_dirnam
TABLES
dir_list = w_itab
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.

ENDFORM. " OBTENER_FICHEROS

---------

Luego ya hago la conexión y descargo (o eso intento jeje) los ficheros:

FORM conectar_ftp .

DATA: file TYPE string,
blob_length TYPE i,
lin TYPE i,
bin TYPE c VALUE 'X',
cnt(8) TYPE n,
lines TYPE i VALUE 1000,
docid LIKE sysuuid-c,
bline(80) TYPE x,
texto TYPE string.
DATA: BEGIN OF itab OCCURS 0,
linea(400),
END OF itab.
TYPES: BEGIN OF text,
line(400) TYPE c,
END OF text.

TYPES: BEGIN OF blob,
line(80) TYPE x,
END OF blob.

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.

DATA: fname(150).

* pwd = 'xxxxx'.
* user = 'xxxx'.
* host = '80.35.132.67'.

slen = STRLEN( pwd ) .
* SAP Application Server -> FTP Server
* dest = 'SAPFTPA'.
* Gui Frontend Machine -> FTP Server
dest = 'SAPFTP'.

* 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'.

REFRESH result.

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 PILSA
CALL FUNCTION 'FTP_COMMAND'
EXPORTING
handle = hdl
* command = 'cd pilsa'
command = 'cd 1111'
TABLES
data = result
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3.

* Cada fichero que obtenga en el directorio indicado se descarga vía FTP
LOOP AT w_itab WHERE name(6) = 'ORDERS'.
CLEAR itab.
REFRESH itab.

* Ruta del fichero que se coge del directorio
CONCATENATE '\\172.24.140.21\Overlim\idoc\salida\' w_itab-name INTO file.
* Nombre del fichero que se descargará.
CONCATENATE w_itab-name '.txt' INTO fname.

* Se sube el fichero a una tabla interna
OPEN DATASET file FOR INPUT IN TEXT MODE ENCODING DEFAULT.

READ DATASET file INTO itab.
IF sy-subrc IS INITIAL.
APPEND itab.
CLEAR itab.
READ DATASET file INTO itab-linea.
IF sy-subrc IS INITIAL.
APPEND itab.
CLEAR itab.
DO.
READ DATASET file INTO itab-linea.
IF sy-subrc IS INITIAL.
APPEND itab.
CLEAR itab.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDIF.
ENDIF.

CLOSE DATASET file.

DESCRIBE TABLE itab LINES lin.
blob_length = lin * 80.

* Se descarga el archivo al servidor
CALL FUNCTION 'FTP_R3_TO_SERVER'
EXPORTING
handle = hdl
fname = fname
blob_length = blob_length
character_mode = 'X'
TABLES
text = itab
EXCEPTIONS
tcpip_error = 1
command_error = 2
data_error = 3
OTHERS = 4.
IF sy-subrc = 0.
* Borramos del directorio local cada uno de los ficheros
* DELETE DATASET file.
CLEAR texto.
CONCATENATE 'Se descarga el archivo' fname INTO texto SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Descargando fichero'.
IF sy-subrc EQ 0.
WRITE: / texto, 'al servidor'.
SKIP 1.
ENDIF.

CLEAR texto.
CONCATENATE 'Se borra el archivo' fname INTO texto SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Eliminando fichero del servidor'.
IF sy-subrc EQ 0.
WRITE: / texto, 'del servidor'.
SKIP 1.
ENDIF.

ENDIF.
ENDLOOP.
ELSE.
WRITE: / 'Error al conectar al servidor FTP'.
SKIP 1.

ENDIF.

CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = hdl.
IF sy-subrc EQ 0.
WRITE: / 'Desconectado del servidor FTP'.
SKIP 1.
ENDIF.

ENDFORM. " CONECTAR_FTP

Vale, por otro lado me he descargado el Filezilla server y Filezilla Cliente para probar con mi máquina. Si ejecuto el programa online funciona correctamente poniendo el host SAPFTP pero si pongo SAPFTPA no funciona (por lo que he leido SAPFTPA es para procesos en fondo). La cuestión es que me creo un job que lance mi programa (conectándome a mi máquina) y ya no funciona.

Pongo la dirección del cliente (la que viene ahí de 80...) y no me funciona. Hoy en concreto se les ha caido el servicio FTP pero bueno, yo nunca he conseguido conectar con ello. Desde sistemas me dicen que está todo ok, que ellos hacen un ftp 80.... desde una ventana de msdos y que se conectaba (hoy no), pero yo desde el report nunca lo he conseguido.

Algiuen ha tenido alguna vez un problema similar o se le ocurre qué puede ser ???

Muchas gracias !!!

María
Responder Con Cita