21 marzo 2015

Tarea Execute Process

Una de las tareas más prácticas en el Control Flow de SSIS es la tarea Execute Process. Con esta tarea podemos ejecutar cualquier otra aplicación que tiene un archivo ejecutable. La única cosa a considerar es que el archivo ejecutable debería ser ejecutado en modo silencioso porque SSIS no está hecho para la interacción con los usuarios. En este ejercicio, comprimiremos y descomprimiremos algunos archivos con esta tarea con la ayuda de 7-Zip.

Alistarse

1.    Completar y finalizar el ejercicio Enviar y recibir archivos a través de FTP: Tarea FTP y utilizar los archivos de texto descargados como entrada para este ejercicio. Estos archivos deberían estar en C:\SSIS\Control Flow\TareaFTP\CarpetaLocal.
2.    Descargue e instale 7-Zip de http://www.7-zip.org.
3.    Crear un nuevo directorio vacío para archivos extraídos aquí: C:\SSIS\Control Flow\TareaExecuteProcess\ArchivosExtraidos.

Ejercicio

1.    Crear un nuevo proyecto Integration Services en SSDT y nombre el proyecto como TareaExecuteProcess.
2.    Arrastrar y soltar una Tarea Execute Process de la Toolbox SSIS al Control Flow.
3.    Nombre la tarea Compress y haga doble clic para abrir el Execute Process Task Editor.
4.    Vaya a la pestaña Process. En la propiedad Executable seleccione el archivo 7z.exe desde el directorio instalado; la dirección debería tener este aspecto: C:\Program Files\7-Zip\7z.exe.
5.    Establecer el WorkingDirectory a la ruta de los archivos de texto que debería ser comprimido; para nuestro ejercicio la ruta de los archivos de texto del ejercicio de la tarea FTP: C:\SSIS\Control Flow\TareaFTP\CarpetaLocal.
6.    En la propiedad Arguments escribir un modificador de línea de comandos y comandos para 7z, de la siguiente manera:
a -t7z files.7z *.txt
7.    Confirme todas sus configuraciones con la siguiente captura de pantalla:
8.    Arrastrar y soltar otra Tarea Execute Process después de la primera, nombre ésta como Decompress, y conecte la flecha verde de Compress a Decompress.
9.    Haga doble clic en Decompress, vaya a la pestaña Process y establezca Executable a la ruta de archivo 7z.exe: C:\Program Files\7-Zip\7z.exe.
10.  Establecer el WorkingDirectory con la dirección de la carpeta a la que extraerá sus archivos; en este ejemplo sería: C:\SSIS\Control Flow\TareaExecuteProcess\ ArchivosExtraidos.
11.  Establecer Arguments con un comando unzip y cámbielo como sigue:
x "C:\SSIS\Control Flow\TareaFTP\CarpetaLocal\files.7z"
12.  Compruebe que la ficha Process en Decompress coincide con la siguiente captura de pantalla:
13.  Ejecute el paquete. Compress creará un archivo comprimido llamado files.7z de todos los archivos de texto en la ruta especificada y luego Decompress extraerá el contenido de files.7z a otra carpeta.

Funcionamiento

Con la tarea Execute Process podemos ejecutar varios archivos ejecutables en el flujo de control. También podemos pasar argumentos y definir un directorio de trabajo para el archivo ejecutable.
En este ejercicio hemos utilizado dos tareas Execute Process. La primera, Compress, archivará todos los archivos de texto de C:\SSIS\Control Flow\TareaFTP\CarpetaLocal en files.7z. Para este ejercicio utilizamos la aplicación 7-Zip, que es gratuito y de código abierto.
La propiedad Executable en la Tarea Execute Process debería contener la dirección del archivo ejecutable, que es la dirección del archivo 7z.exe en nuestro ejercicio. Arguments son los comandos y los interruptores que deben ser proporcionados por las ejecuciones de línea de comandos. En este ejercicio, primero comprimimos los archivos con el argumento de un comando, que es un comando para guardar archivos en 7-Zip. Luego, con el comando x extraemos los datos del archivo comprimido.
Todos los interruptores y los argumentos de línea de comandos para 7-Zip pueden ser vistos aquí:
http://www.dotnetperls.com/7-zip-examples.
WorkingDirectory define en donde las direcciones en la línea de comandos funcionarán; si no proporciona la dirección completa, la dirección será buscada en el directorio de trabajo.
Podemos elegir pasar la entrada al ejecutable de una variable, y deberíamos utilizar StandardInputVariable.
También podemos almacenar la salida de un ejecutable en una variable con StandardOutputVariable. Si ocurre algún error durante la ejecución del proceso, el error puede ser almacenado en una variable con la opción StandardErrorVariable.
WindowStyle define cómo debería aparecer la ventana de diálogo de un ejecutable; es inútil cuando las aplicaciones son ejecutadas en el servidor.
SuccessValue definirá la interpretación del código retornado del archivo ejecutable. Su valor por defecto es cero, y esto significa que un ejecutable será considerado como fallido si retorna un valor distinto de cero. Podemos cambiar este comportamiento cambiando la opción SuccessValue.
Obviamente, diferentes ejecutables retornan valores distintos como su respuesta exitosa.

1 comentarios:

Narcizo dijo...

La Execute Process es una tarea muy útil, para ejecutar procesos externos. Espero les sirva.