Condividi tramite


Generazione di eventi nell'attività Script

Gli eventi consentono di segnalare errori, avvisi e altre informazioni, ad esempio l'avanzamento o lo stato delle attività, al pacchetto contenitore. Il pacchetto fornisce gestori eventi per la gestione di notifiche degli eventi. L'attività Script può generare eventi chiamando metodi sulla proprietà Events dell'oggetto Dts. Per altre informazioni sulla gestione degli eventi da parte dei pacchetti di Integration Services, vedere Gestori eventi di Integration Services (SSIS).

Gli eventi possono essere registrati in qualsiasi provider di log abilitato nel pacchetto. I provider di log archiviano informazioni sugli eventi in un archivio dati. L'attività Script può anche utilizzare il metodo Log per registrare informazioni in un provider di log senza generare un evento. Per altre informazioni sull'uso del metodo Log, vedere Registrazione nell'attività Script.

Per generare un evento, l'attività Script chiama uno dei metodi esposti dalla proprietà Events. Nella tabella seguente sono elencati i metodi esposti dalla proprietà Events.

Evento Descrizione
FireCustomEvent Genera un evento personalizzato definito dall'utente nel pacchetto.
FireError Informa il pacchetto di una condizione di errore.
FireInformation Fornisce informazioni all'utente.
FireProgress Informa il pacchetto dello stato dell'attività.
FireQueryCancel Restituisce un valore che indica se il pacchetto richiede che l'attività venga chiusa in modo anomalo.
FireWarning Informa il pacchetto che l'attività è in uno stato che garantisce la notifica all'utente, ma non è una condizione di errore.

Esempio di eventi

Nell'esempio seguente viene illustrato come generare eventi dall'attività Script. Viene utilizzata una funzione dell'API di Windows nativa per determinare se è disponibile una connessione Internet. Se non sono disponibili connessioni, viene generato un errore. Se è in uso una connessione modem potenzialmente volatile, viene generato un avviso. In caso contrario, viene restituito un messaggio informativo indicante che è stata rilevata una connessione 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;  
  
        }  
  

Icona di Integration Services (piccola) Rimanere aggiornati con Integration Services
Per i download, gli articoli, gli esempi e i video più recenti di Microsoft, nonché le soluzioni selezionate dalla community, visitare la pagina integration services in MSDN:

Visitare la pagina relativa a Integration Services su MSDN

Per ricevere una notifica automatica su questi aggiornamenti, sottoscrivere i feed RSS disponibili nella pagina.

Vedi anche

Gestori eventi di Integration Services (SSIS)
Aggiunta di un gestore eventi a un pacchetto