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.

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

FireCustomEvent

Provoca un evento personalizado definido por el usuario en el paquete.

FireError

Informa al paquete de una condición de error.

FireInformation

Proporciona información al usuario.

FireProgress

Informa al paquete del progreso de la tarea.

FireQueryCancel

Devuelve un valor que indica si el paquete necesita que la tarea se cierre prematuramente.

FireWarning

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;

        }
Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.