En un
post anterior, uno de los escenarios más comunes fue la lectura de la
información del sistema de WMI. SSIS proporciona otra tarea WMI llamada WMI Event Watcher Task, que es más útil
que la tarea Data Reader. La tarea WMI Event Watcher proporciona una manera de observar
a un evento WMI. Esta característica impresionante hará que el paquete SSIS sea
muy potente. Como WMI proporciona una amplia información para la gestión de
objetos, la interacción de esta información con eventos será muy útil.
Escenarios como el de observar una carpeta para los nuevos archivos u observar
la CPU para un 50% de uso, son algunos de los escenarios más comunes que pueden
ser logrados con esta tarea.
En
este ejercicio vamos observar una carpeta para los nuevos archivos, y si un
archivo nuevo entra en la carpeta, se lanzará un cuadro de mensaje después del
WMI Event Watcher Task.
Alistarse
Crear
un directorio vacío para observar en esta dirección: C:\SSIS\Control
Flow\TareaWMIEventWatcher\Archivos.
Ejercicio
1.
Crear un
nuevo proyecto SSIS y nómbrelo TareaWMIEventWatcher.
2.
Arrastre y
suelte una tarea WMI Event Watcher de la Toolbox
SSIS, de la sección Other Tasks, en el Control
Flow.
3.
Haga doble
clic en WMI Event Watcher Task e ir
a la pestaña WMI Options.
4.
Haga
clic en WMIConnection y en New WMI
Connection…. En el WMI Connection
Manager Editor, seleccione la opción Use
Windows Authentication y, luego, en Test
para probar la conexión y confirmarla.
5. Haga clic en OK y retorne a la pestaña WMI
Options. Escriba esta sentencia en WmiQuerySource:
SELECT *
FROM __instancecreationevent WITHIN 60 WHERE TargetInstance ISA 'Cim_DirectoryContainsFile'
AND TargetInstance.GroupComponent = 'Win32_Directory.Name = "C:\\\\SSIS\\\\Control
Flow\\\\TareaWMIEventWatcher\\\\Archivos"'
6. Haga clic en OK y cierre el WMI Event Watcher Task Editor.
public void Main()
{
MessageBox.Show("Nuevo Archivo
Detectado!");
Dts.TaskResult =
(int)ScriptResults.Success;
}
8. Guarde el script, haga clic en OK y cierre el Editor de la tarea
Script.
9. Ejecute el paquete. En la ficha Progress verá que la ejecución del
paquete esperará en el WMI Event Watcher Task; luego copie cualquier archivo a
la carpeta observada (C:\SSIS\Control Flow\TareaWMIEventWatcher\Archivos) y luego de menos de 60 segundos, veremos que
el WMI Event Watcher Tasks completa su progreso y el cuadro de mensaje aparece.
Luego la tarea Script se seguirá ejecutando hasta que le dé clic al botón Aceptar.
WMI
proporciona una manera de trabajar con objetos de gestión. El post anterior fue
acerca de cómo leer la información del sistema a través de la tarea WMI Data
Reader. Sin embargo, el uso de WMI no se limita a la lectura de datos. Podemos
utilizar los eventos del sistema por medio de la tarea WMI Event Watcher.
La
tarea WMI Event Watcher proporciona una manera de utilizar una consulta WQL
para observar un evento WMI, y notificar a otras tareas si el evento ocurre o
no. Hay muchos escenarios para utilizar tareas WMI Event Watcher; uno de los
escenarios más comunes es la de observar una carpeta para los nuevos archivos entrantes
y luego hacer las operaciones apropiadas, tales como las tareas Data Flow.
En
este ejercicio observamos una carpeta en la dirección C:\SSIS\Control
Flow\TareaWMIEventWatcher\Archivos,
y si un nuevo archivo ingresa se muestra un cuadro de mensaje.
La
tarea WMI Event Watcher utiliza un WMI Connection Manager como la tarea WMI
Data Reader.
WqlSourceQuery consiste en una consulta WQL
para observar el evento. Como describimos en el post anterior, puede utilizar
WMI Code Creator para encontrar los eventos que desee. En este ejercicio
queremos observar una carpeta, por lo que utilizamos una consulta WQL que
obtiene datos de la Clase WMI __instancecreationevent y encuentra la información apropiada. Observamos
la carpeta en intervalos de 60 segundos. Así que cuando un nuevo archivo
aparece, el WMI Event Watcher Task lo capturará en menos de un minuto.
La propiedad ActionAtEvent define cómo SSIS se comporta cuando un evento WMI
ocurre; el comportamiento predeterminado es que SSIS registrará el evento (una
entrada de registro puede ser vista en la ficha Progress del SSDT) y un evento SSIS se disparará. Con este evento
SSIS, el Control Flow atrapa los eventos y realiza las operaciones apropiadas.
Puede establecer esta propiedad sólo registrando los eventos también.
Podemos
elegir qué acción debe ser realizada después del evento WMI. La propiedad AfterEvent está establecida para retornar True por defecto. Esto significa que
cada vez que el evento es activado, la tarea WMI Event Watcher tendrá éxito y
el Control Flow pasa a la tarea después de esta tarea. Podemos optar por retornar
False, u observar el evento de nuevo.
El
paquete SSIS esperará a que el evento WMI se active, y esto puede causar un
alto en la ejecución del paquete si el evento nunca se dispara. Por lo tanto,
una propiedad Timeout
puede ser definida aquí. El valor predeterminado de Timeout es cero y significa que no hay tiempo de
espera establecido para esta tarea. Puede especificar cualquier número (en
segundos) como un tiempo de espera.
Así como
la propiedad Timeout
se establece para esta tarea, una acción en el tiempo de espera puede ser
elegida en la propiedad ActionAtTimeout;
AfterTimeout también puede ser definida
similarmente a AfterEvent.
Hay momentos en los que
tenemos que coger un evento si se produce un número determinado de eventos. Por
ejemplo, queremos observar los nuevos archivos de una carpeta, pero empezaremos
el proceso después de que tres nuevos archivos sean creados; así que configuramos
el NumberOfEvents a
3.
1 comentarios:
Esta tarea WMI Event Watcher, le da mucha potencia a SSIS. Espero les sirva.
Publicar un comentario