Vyvolávání událostí v úloze skriptu

Platí pro:SQL Server SSIS Integration Runtime v rámci Azure Data Factory

Události umožňují hlásit chyby, varování a další informace, jako je průběh úkolů nebo stav, do obsahujícího balíčku. Balíček poskytuje obslužníky událostí pro správu oznámení o událostech. Úloha Script může vyvolávat události vyvoláváním metod na Events vlastnosti objektu Dts . Pro více informací o tom, jak balíčky integračních služeb zpracovávají události, viz Integration Services (SSIS) Event Handlers.

Události lze zaznamenat do jakéhokoli poskytovatele logů, který je v balíčku povolen. Poskytovatelé logů ukládají informace o událostech do datového úložiště. Skriptní úloha může také použít Log metodu k zaznamenání informací poskytovateli logů bez vyvolání události. Pro více informací o tom, jak metodu Log používat, viz Přihlášení v úlohě skriptu.

Pro vyvolání události úkol Script volá jednu z metod vystavených vlastností Events . Následující tabulka uvádí metody, které tato vlastnost Events odhaluje.

Event Description
FireCustomEvent V balíčku se zobrazí uživatelem definovaná vlastní událost.
FireError Informuje balíček o chybové podmíně.
FireInformation Poskytuje uživateli informace.
FireProgress Informuje balíček o průběhu úkolu.
FireQueryCancel Vrátí hodnotu, která ukazuje, zda balíček potřebuje předčasné ukončení úkolu.
FireWarning Informuje balík, že úkol je ve stavu, který vyžaduje upozornění uživatele, ale není to chybový stav.

Příklad událostí

Následující příklad ukazuje, jak vyvolávat události přímo ze skriptní úlohy. Příklad využívá nativní funkci Windows API k určení, zda je dostupné internetové připojení. Pokud není k dispozici žádné připojení, zobrazí se chyba. Pokud je v provozu potenciálně volatilní modemové připojení, příklad vyvolává varování. Jinak vrací informační zprávu, že bylo detekováno internetové připojení.

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