Provocar eventos en la tarea Script
Los eventos proporcionan una manera de notificar errores, advertencias y otra información, como el progreso o el estado de una tarea, al paquete contenedor. El paquete proporciona controladores de eventos para administrar las notificaciones de eventos. La tarea Script puede provocar los eventos mediante una llamada a los métodos en la propiedad Events del objeto Dts. Para obtener más información sobre la forma en que los paquetes de Integration Services controlan los eventos, vea Controladores de eventos de Integration Services (SSIS).
Los eventos se pueden registrar en cualquier proveedor de registro habilitado en el paquete. Los proveedores de registro almacenan información sobre los eventos en un almacén de datos. La tarea Script también puede utilizar el método Log para registrar información en un proveedor de registro sin provocar un evento. Para obtener más información sobre cómo usar el método Log, vea Registrar en la tarea Script.
Para provocar un evento, la tarea Script llama a uno de los métodos expuesto por la propiedad Events. En la tabla siguiente se enumeran los métodos que expone la propiedad Events.
Evento |
Descripción |
---|---|
Provoca un evento personalizado definido por el usuario en el paquete. |
|
Informa al paquete de una condición de error. |
|
Proporciona información al usuario. |
|
Informa al paquete del progreso de la tarea. |
|
Devuelve un valor que indica si el paquete necesita que la tarea se cierre prematuramente. |
|
Informa al paquete de que la tarea está en un estado que garantiza la notificación del usuario, pero no es una condición de error. |
Ejemplo de eventos
En el ejemplo siguiente se muestra cómo provocar eventos desde la tarea Script. El ejemplo utiliza una función nativa de la API de Windows para determinar si está disponible una conexión a Internet. Si no hay ninguna conexión disponible, provoca un error. Si se utiliza una conexión de módem potencialmente volátil, el ejemplo provoca una advertencia. De lo contrario, devuelve un mensaje informativo que indica que se ha detectado una conexión a Internet.
Private Declare Function InternetGetConnectedState Lib "wininet" _
(ByRef dwFlags As Long, ByVal dwReserved As Long) As Long
Private Enum ConnectedStates
LAN = &H2
Modem = &H1
Proxy = &H4
Offline = &H20
Configured = &H40
RasInstalled = &H10
End Enum
Public Sub Main()
Dim dwFlags As Long
Dim connectedState As Long
Dim fireAgain as Boolean
connectedState = InternetGetConnectedState(dwFlags, 0)
If connectedState <> 0 Then
If (dwFlags And ConnectedStates.Modem) = ConnectedStates.Modem Then
Dts.Events.FireWarning(0, "Script Task Example", _
"Volatile Internet connection detected.", String.Empty, 0)
Else
Dts.Events.FireInformation(0, "Script Task Example", _
"Internet connection detected.", String.Empty, 0, fireAgain)
End If
Else
' If not connected to the Internet, raise an error.
Dts.Events.FireError(0, "Script Task Example", _
"Internet connection not available.", String.Empty, 0)
End If
Dts.TaskResult = ScriptResults.Success
End Sub
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class ScriptMain
{
[DllImport("wininet")]
private extern static long InternetGetConnectedState(ref long dwFlags, long dwReserved);
private enum ConnectedStates
{
LAN = 0x2,
Modem = 0x1,
Proxy = 0x4,
Offline = 0x20,
Configured = 0x40,
RasInstalled = 0x10
};
public void Main()
{
//
long dwFlags = 0;
long connectedState;
bool fireAgain = true;
int state;
connectedState = InternetGetConnectedState(ref dwFlags, 0);
state = (int)ConnectedStates.Modem;
if (connectedState != 0)
{
if ((dwFlags & state) == state)
{
Dts.Events.FireWarning(0, "Script Task Example", "Volatile Internet connection detected.", String.Empty, 0);
}
else
{
Dts.Events.FireInformation(0, "Script Task Example", "Internet connection detected.", String.Empty, 0, ref fireAgain);
}
}
else
{
// If not connected to the Internet, raise an error.
Dts.Events.FireError(0, "Script Task Example", "Internet connection not available.", String.Empty, 0);
}
Dts.TaskResult = (int)ScriptResults.Success;
}
|
Vea también
Tasks
agregar un controlador de eventos a un paquete