スクリプト タスクでのイベントの発生
イベントは、エラーや警告、タスクの進行状況や状態などのその他の情報を、親パッケージにレポートする方法を提供するものです。 パッケージには、イベントの通知機能を管理するためのイベント ハンドラーがあります。 スクリプト タスクは、Dts オブジェクトの Events プロパティに対してメソッドを呼び出して、イベントを発生させることができます。 Integration Services パッケージがイベントを処理する方法の詳細については、「Integration Services (SSIS) のイベント ハンドラー」を参照してください。
イベントは、パッケージ内で有効な任意のログ プロバイダーに記録できます。 ログ プロバイダーは、イベントに関する情報をデータ ストアに保存します。 スクリプト タスクは、イベントを発生させずに Log メソッドを使用して、情報をログ プロバイダーに記録することもできます。 Log メソッドの使用方法の詳細については、「スクリプト タスクでのログ記録」を参照してください。
イベントを発生させるには、スクリプト タスクは Events プロパティによって公開されるメソッドのいずれかを呼び出します。 次の表に、Events プロパティにより公開されているメソッドの一覧を示します。
イベント |
説明 |
---|---|
パッケージ内でユーザー定義のカスタム イベントを発生させます。 |
|
パッケージにエラー条件を通知します。 |
|
ユーザーに情報を提供します。 |
|
タスクの進行状況をパッケージに通知します。 |
|
パッケージがタスクを途中でシャットダウンする必要があるかどうかを示す値を返します。 |
|
エラー条件ではないが、タスクがユーザーに通知する正当な理由がある状態であることをパッケージに通知します。 |
イベントの例
次の例では、スクリプト タスク内でイベントを発生させる方法を示します。 この例では、ネイティブ Windows API 関数を使用して、インターネット接続が使用できるかどうかを確認します。 接続が使用できない場合、エラーを発生させます。 使用されているモデム接続が切断される可能性がある場合、この例では警告が発生します。 それ以外の場合は、インターネット接続が検出されたことを示す情報メッセージを返します。
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;
}
|