Compartilhar via


Gerando eventos na tarefa Script

Os eventos fornecem um modo de relatar erros, avisos e outras informações, como o progresso ou status da tarefa, ao pacote que os contém. O pacote fornece manipuladores de eventos para gerenciar notificações de eventos. A tarefa Script pode gerar eventos chamando métodos na propriedade Events do objeto Dts. Para obter mais informações sobre como os pacotes do Integration Services manipulam eventos, confira Manipuladores de Eventos do SSIS (Integration Services).

Os eventos podem ser registrados em qualquer provedor de log que esteja habilitado no pacote. Provedores de logs armazenam informações sobre eventos em um repositório de dados. A tarefa Script também pode usar o método Log para registrar informações para um provedor de logs sem gerar um evento. Para obter mais informações sobre como usar o método Log, consulte Registro em log na tarefa Script.

Para gerar um evento, a tarefa Script chama um dos métodos expostos pela propriedade Events. A tabela a seguir lista os métodos expostos pela propriedade Events.

Evento Descrição
FireCustomEvent Gera um evento personalizado definido pelo usuário no pacote.
FireError Informa o pacote sobre uma condição de erro.
FireInformation Fornece informações ao usuário.
FireProgress Informa ao pacote sobre o progresso da tarefa.
FireQueryCancel Retorna um valor que indica se o pacote exige o fechamento prematuro da tarefa.
FireWarning Informa ao pacote que a tarefa está em um estado que garante a notificação do usuário, mas não é uma condição de erro.

Exemplo de eventos

O exemplo a seguir demonstra como gerar eventos dentro da tarefa Script. O exemplo usa uma função nativa de API do Windows para determinar se uma conexão de Internet está disponível. Se nenhuma conexão estiver disponível, será gerado um erro. Se uma conexão de modem potencialmente volátil estiver em uso, o exemplo gerará um aviso. Caso contrário, ela retornará uma mensagem informativa de que uma conexão de Internet foi detectada.

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;  
  
        }  
  

Ícone do Integration Services (pequeno) Mantenha-se atualizado com o Integration Services
Para obter os downloads, artigos, exemplos e vídeos mais recentes da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN:

Visite a página do Integration Services no MSDN

Para receber uma notificação automática dessas atualizações, assine os RSS feeds disponíveis na página.

Confira também

Manipuladores de eventos do SSIS (Integration Services)
Adicionar um manipulador de eventos a um pacote