Copiar archivos
En este ejemplo explicamos cómo copiar varios archivos en el sistema local de archivos con ayuda de un trabajo de FlowForce Server.
Imaginemos que quiere copiar todos los archivos de un directorio de origen (p.ej. C:\FlowForceExamples\CopyFiles\Source) a uno de destino (p.ej. C:\FlowForceExamples\CopyFiles\Target). (Si usa un sistema UNIX deberá adaptar las rutas como corresponda). Para lograr este objetivo usaremos un paso "for-each" que se repita con todos los archivos de un directorio y después invocaremos la función /system/filesystem/copy para cada uno de los elementos del bucle.
Requisitos
•Licencias necesarias: FlowForce Server
•Los servicios FlowForce Web Server y FlowForce Server deben escuchar en la en la dirección de red y en el puerto configurados previamente.
•Debe tener una cuenta de usuario de FlowForce Server con permisos para uno de los contenedores (en este ejemplo se usa el contenedor /public porque está automáticamente abierto a todos los usuarios autenticados).
•Este trabajo copia archivos del directorio de origen al directorio de destino. Por tanto, asegúrese de que crea estos directorios en el sistema de archivos local antes de crear el trabajo y de que incluye un par de archivos en el directorio de origen para poder probar el trabajo.
Crear el trabajo
Inicie sesión en FlowForce Server y navegue hasta un contenedor en el que tenga permisos para crear trabajos. Al igual que en los ejemplos anteriores, en este tutorial vamos a usar el contenedor /public/Examples, que puede crear, si no lo ha hecho ya, con el comando Crear | Crear Contenedor.
Ahora abra el contenedor /public/Examples y cree un trabajo nuevo. Asígnele un nombre (p.ej. "CopiarArchivos") y, si quiere, una descripción.
El paso "for-each" de FlowForce Server sirve para iterar todos los elementos de una lista. Este paso itera en una secuencia o lista de elementos, del primero al último. En este ejemplo la secuencia de elementos es la lista de archivos del directorio de origen. Para crear esta lista haga clic en Nuevo paso de ejecución y teclee /system/compute junto a "Ejecutar función". También puede seleccionar esta ruta en una lista desplegable, como se muestra a continuación.
Ahora introduzca la siguiente expresión en el campo Expresión:
list-files("C:\FlowForceExamples\CopyFiles\Source\*.*")
Después introduzca un nombre para la lista en el campo Asignar el resultado de este paso a (en este caso el nombre es list). Esto nos sirve para poder hacer referencia en el siguiente paso a la lista de archivos que acabamos de crear. El primer paso de ejecución del trabajo debe tener este aspecto:
La expresión de la imagen anterior invoca la función de expresión list-files. La función toma una ruta como argumento (en este caso C:\Source\*.*) y devuelve la lista de archivos (o directorios) en la ruta indicada. Observe que la ruta contiene el comodín *.* para seleccionar todos los archivos del directorio. Si lo necesita puede modificar el comodín para que se seleccionen sólo ciertas extensiones de archivos, como *.txt. Para más información sobre expresiones en FlowForce consulte el apartado Lenguaje de expresiones de FlowForce.
Ahora ya puede crear el paso de iteración "for-each". Haga clic en Nuevo paso For-each y teclee list en la casilla de la secuencia. (Esto afecta al elemento list que creó en el paso de ejecución anterior).
Consejo: también puede copiar la expresión y pegarla en la casilla "de la secuencia" del paso "for-each" para no tener que configurar el primer paso de ejecución. |
A continuación, haga clic en el botón y añada un paso de ejecución nuevo dentro del paso "for-each". Este paso invoca la función /system/filesystem/copy para cada uno de los elementos del bucle, como se ve en la imagen siguiente.
Como se ve en la imagen anterior, se llama a la función copy con los siguientes argumentos:
•El argumento Origen es el elemento (archivo) activo en el bucle. Puede teclearlo en la casilla Source o hacer clic en el botón y seleccionar el elemento item.
•El argumento Destino es la ruta de destino. En este ejemplo hemos introducido la ruta como se ve, pero también la puede dar como argumento para el trabajo.
•La opción Sobrescribir está habilitada, lo que significa que si ya existe un archivo con el mismo nombre en el directorio de origen, el nuevo lo sobrescribirá. Para deshabilitar esta opción, haga clic en el botón .
Para simplificar, en este ejemplo no damos los otros dos argumentos. Para más información consulte la descripción de la función /system/filesystem/copy.
En este punto, el trabajo que hemos creado incluye todos los pasos de procesamiento necesarios, pero aún no contiene ningún desencadenador. Para desencadenar el trabajo a intervalos regulares puede usar un temporizador (consulte Temporizadores). También puede vigilar si hay cambios en el directorio de origen y desencadenar el trabajo con un desencadenador de sistema de archivos (consulte Desencadenadores de sistema de archivos). Por último, puede desencadenar el trabajo bajo demanda como llamada a un servicio web.
En este ejemplo desencadenaremos el trabajo bajo demanda haciendo clic en una URL en el navegador (que invoca el trabajo como servicio web). Para convertir el trabajo en un servicio web, marque la casilla Permitir acceso a este trabajo por HTTP en la dirección URL e introduzca el nombre del servicio web.
Por último, para ejecutar el trabajo son necesarias unas credenciales. Introduzca el nombre de usuario de su sistema operativo y su contraseña (no sus credenciales de FlowForce Server) en la sección "Credenciales", como se muestra a continuación. Esto indica al sistema operativo que usted autoriza que FlowForce copie esos archivos. Otra alternativa, si ha creado antes credenciales individuales, como se explica en el apartado Definir credenciales, es seleccionarlas con la opción Seleccione una credencial.
Ejecutar el trabajo
Puede probar el trabajo de varias formas:
•Vaya a Inicio y haga clic en Ver los desencadenadores y servicios activos. Después haga clic en la URL del trabajo que aparece en la columna "Información".
•Introduzca http://127.0.0.1:4646/service/CopyFilesService en la barra de direcciones del explorador. Tenga en cuenta que esta URL sólo funciona si el servicio FlowForce Server escucha en la dirección host y el nombre de puerto predeterminados. Si su puerto y host tienen otra configuración vaya a la página de configuración y cambie la dirección.
•Si configura el campo Nombre de host de FlowForce Server desde la página de configuración puede ejecutar la llamada al servicio web directamente desde la página de configuración del trabajo. Para ello haga clic en el botón que hay junto a la casilla Permitir acceso a este trabajo por HTTP. Este botón sólo se habilita si configura este campo Nombre de host. Si no lo ha hecho, puede llamar al servicio web escribiendo la URL manualmente en la barra de dirección.
Si la aplicación le pide credenciales al acceder al servicio web, use las mismas que usó para acceder a FlowForce Server.
Recomendamos usar las credenciales de FlowForce Server para la autenticación HTTP sólo en casos de prueba. Para producción es mejor crear un usuario nuevo, darle el permiso Servicio - Uso en el contenedor en el que está el trabajo y después acceder al servicio web con esa cuenta. Para desactivar la autenticación HTTP y hacer público el servicio web debe dar el permiso Servicio - Uso al usuario Anónimo, véase ¿Cómo funcionan los permisos?. |
Si se ejecuta correctamente, el trabajo copiará todos los archivos del directorio de origen en el directorio de destino. De lo contrario, en el navegador aparecerá el mensaje indicando que ha habido un error en la ejecución del servicio. Si eso ocurre, consulte el registro del trabajo para más información (consulte Ver el registro de trabajos). El error puede deberse, entre otros motivos, a credenciales o rutas de archivos incorrectas o permisos insuficientes en el sistema de archivos. Por ejemplo, el trabajo fallará si no se ha marcado la casilla Sobrescribir y en el directorio de destino ya existe un archivo con el mismo nombre, como se ve a continuación.