¿No os ha pasado alguna vez que os piden automatizar absolutamente todo? En la mayoría de los casos cuanto menos intervenga la mano de una persona para una tarea secuencial que siempre es la misma mejor. Otra cosa que suele pasar mucho, es cuando un usuario de negocio tiene que pedir a la gente de IT de su empresa que ejecute cierto proceso que ellos no pueden ejecutar, ya sea por permisos o por conocimiento de cómo realizar el proceso.
En este post vamos a explicar cómo automatizar el compilado de un proyecto de SQL Server Integration Services (SSIS de ahora en adelante), el despliegue del proyecto al servidor de SSIS y la ejecución de paquetes de SSIS mediante una aplicación en C#.
Creación del Proyecto
El primer paso será crear nuestro proyecto en Visual Studio (VS) para ello, abrimos el Visual Studio y creamos un nuevo proyecto de Consola de C#:
File -> New -> Project…
En la sección de Visual C#, seleccionamos Console App:
Compilación del proyecto de SSIS
El siguiente paso sería realizar el compliado del proyecto, para ello nos vamos a apoyar en un archivo .bat al que le pasaremos como argumento el path en el que se encuentra nuestro proyecto de SSIS. Para ello vamos a añadir un nuevo elemento a nuestro proyecto:
Click derecho sobre el proyecto -> Add -> New Item…
Le damos un nombre a nuestro fichero, en nuestro caso se llamará “comando.bat” y pulsamos sobre Add:
Y escribimos el siguiente código dentro del fichero comando.bat que acabamos de crear:
Tenemos que poner la ruta en la que se encuentra el fichero devenv.com en nuestro entorno, en mi caso al estar usando el Visual Studio Community 2017, la ruta es la que se especifica en el código anterior.
Ahora vamos a crear la función que llamará al .bat pasándole el path del proyecto para hacer el compilado del proyecto.
Para ello, vamos al fichero Program.cs de nuestra solución de VS y añadimos la siguiente instrucción en la sección de los using del fichero, justo arriba del todo:
Y añadimos la siguiente función que se llamará BuildSSISProject justo debajo del Main:
En la propiedad FileName tenemos que poner la ruta en la que se encuentra el fichero comando.bat que hemos creado anteriormente.
Ahora vamos a ejecutar esta función para ver su funcionamiento y para generar el fichero .ispac que nos hará falta para el siguiente paso de despliegue del proyecto. Para ello vamos a poner en la función Main una llamada a la función de BuildSSISProject pasándole como parámetro la ruta en la que se encuentra el proyecto de SSIS que queremos compilar.
El código del Program.cs quedaría de la siguiente manera:
En nuestro ejemplo vamos a hacer el compilado de un proyecto de SSIS que se llama SSISTest y se encuentra en la ruta que se especifica en la variable projectPath.
Ejecutamos la solución pulsando sobre el botón Start y el resultado será que en nuestra carpeta de Development del proyecto SSIS que acabamos de compilar, tiene que aparecer el fichero .ispac, como se muestra en la siguiente imagen:
Despliegue del proyecto de SSIS
El siguiente paso será realizar el despliegue del proyecto en el servidor, para ello vamos a crear una nueva función a la que le pasaremos como parámetros:
- El nombre del servidor.
- El nombre de la carpeta dentro del catálogo de SSIS en la que queremos realizar el despliegue.
- El nombre del proyecto.
- La ruta en la que se encuentra el fichero .ispac que se creó en el paso anterior.
Primero tenemos que añadir 5 referencias nuevas a nuestro proyecto que son las marcadas en azul en la siguiente imagen:
Para ellos hacemos botón derecho en References -> Add Reference…, buscamos su ubicación en nuestro entorno y le damos a Add:
El siguiente paso será añadir estas instrucciones using al inicio de fichero Program.cs.
Y por último crear la función que se llamará DeploySSISProject que realizará el despliegue del proyecto:
Ahora vamos a comprobar su funcionamiento haciendo una llamada a esta función desde el Main:
Le damos a Start y el resultado será que en nuestro servidor aparecerá desplegado el proyecto en la carpeta de SSISTest, de nuestro catálogo de SSIS que se encuentra en nuestro servidor, que se llama W10:
Ejecución del paquete SSIS
Como último paso vamos a ver como ejecutar un paquete de un proyecto desplegado en nuestro catálogo de SSIS.
Para ello vamos a crear una nueva función que se llamará ExecuteSSISPackage en el fichero Program.cs, que recibirá como parámetros:
- El nombre del servidor.
- El nombre de la carpeta dentro del catálogo de SSIS.
- El nombre del proyecto de SSIS.
- El nombre del paquete de SSIS.
Ahora vamos a añadir la llamada a esta función al Main y vamos a ejecutar todo el proceso.
El Main quedaría de la siguiente manera:
Para comprobar el funcionamiento del flujo completo, pulsamos sobre Start y una vez haya terminado, para comprobar el resultado, nos vamos a ir al SQL Server Management Studio (SSMS) y sobre el proyecto de SSIS, botón derecho -> Reports -> Standard Reports -> All Executions:
Y desde el informe que nos aparece, podemos ver el resultado/estado de la ejecución del paquete que acabamos de lanzar.
Como podéis observar en la imagen anterior el paquete llamado Package.dtsx del proyecto SSISTest, se ha ejecutado correctamente.
Os dejo el código completo del archivo Program.cs:
Conclusión
En este post hemos visto como realizar las operaciones de compilado, despliegue y ejecución del proceso de vida de un desarrollo en SSIS, todo ello automatizado usando un programa escrito en C#.
Un ejemplo de uso de esto sería por ejemplo tener una web o un frontal con algún botón para usuarios que quisieran ejecutar paquetes de SSIS a demanda, sin la necesidad de que los usuarios tengan conocimientos sobre lo que hay por debajo.
Espero que os haya gustado la idea y que os sirva de ayuda
¡Has llegado al final! Parece que te ha gustado nuestro post sobre SSIS
¿Necesitas sacar más partido a tus datos para impulsar tu proyecto? Acelera tus procesos de Business Analytics. Toma mejores decisiones, optimiza tu Datawarehouse y el proceso de generación de informes en tus proyectos de analítica con nuestra consultoría en Business Intelligence.
Voy a Echar un vistazo