Geração de eventos na tarefa de Script

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Os eventos fornecem uma forma de reportar erros, avisos e outras informações, como progresso ou estado da tarefa, ao pacote que o contém. O pacote fornece gestores de eventos para gerir notificações de eventos. A tarefa Script pode gerar eventos ao chamar métodos na Events propriedade do objeto DTS . Para mais informações sobre como os pacotes de Serviços de Integração gerem eventos, consulte Gestores de Eventos dos Serviços de Integração (SSIS).

Os eventos podem ser registados em qualquer fornecedor de registo que esteja ativado no pacote. Os fornecedores de registos armazenam informações sobre eventos num armazenamento de dados. A tarefa Script também pode usar o Log método para registar informação num fornecedor de log sem gerar um evento. Para mais informações sobre como usar o Log método, consulte Iniciar sessão na Tarefa de Script.

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

Event Description
FireCustomEvent Levanta um evento personalizado definido pelo utilizador no pacote.
FireError Informa o pacote de uma condição de erro.
FireInformation Fornece informação ao utilizador.
FireProgress Informa o pacote sobre o progresso da tarefa.
FireQueryCancel Devolve um valor que indica se o pacote precisa que a tarefa seja desligada prematuramente.
FireWarning Informa o pacote de que a tarefa está num estado que justifica notificação ao utilizador, mas não é uma condição de erro.

Exemplo de Eventos

O exemplo seguinte demonstra como levantar eventos a partir da tarefa Script. O exemplo utiliza uma função nativa da API do Windows para determinar se existe uma ligação à Internet disponível. Se não houver ligação disponível, gera um erro. Se uma ligação de modem potencialmente volátil estiver em uso, o exemplo levanta um aviso. Caso contrário, devolve uma mensagem informativa a indicar que foi detetada uma ligação à 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;  
  
        }