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
  #1  
Viejo 14/10/10, 11:31:56
poketina poketina is offline
Member
 
Fecha de Ingreso: jul 2006
Mensajes: 95
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
  #2  
Viejo 06/10/11, 22:32:59
ayaxrojo ayaxrojo is offline
Junior Member
 
Fecha de Ingreso: feb 2009
Mensajes: 11
Cita:
Originalmente Escrito por poketina
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
Si pudiste resolver el problema? a mi me pasa que si debugueo el job si funciona al 100% pero si no lo debugueo no.


haaa ya lo solucione, el problema es que el RFC estaba mal configurado SAPFTPA
SM59->Conexiones TCP/IP->SAPFTPA. En opciones tecnicas, seleccionar Inicio en servidor de aplicacion.

y en el programa:
data: dest TYPE rfcdes-rfcdest VALUE 'SAPFTPA'.
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = user
password = pwd
host = host
rfc_destination = dest
IMPORTING
handle = hdl.

Espero a alguien le ahorre dolores de cabeza

Úlima edición por ayaxrojo fecha: 07/10/11 a las 00:56:42.
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 13:29:11.


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