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