Вызов событий в задаче «Сценарий»
События позволяют сообщать об ошибках и предупреждениях, а также передавать другие сведения, например о ходе выполнения задачи или ее состоянии, в пакет, содержащий задачу. Пакет предоставляет обработчики событий для управления уведомлениями о событиях. Задача «Сценарий» может создавать события, вызывая методы свойства Events объекта Dts. Дополнительные сведения об обработке событий в пакетах служб Integration Services см. в разделе Обработчики событий служб Integration Services.
События могут регистрироваться любым регистратором, включенным в пакете. Регистраторы сохраняют сведения о событиях в хранилище данных. Задача «Сценарий» может также использовать метод Log для занесения записей в регистратор без вызова событий. Дополнительные сведения об использовании метода Log см. в разделе Ведение журнала в задаче «Сценарий».
Для вызова события задача «Сценарий» вызывает один из методов, предоставляемых свойством Events. В следующей таблице перечислены методы, предоставляемые свойством Events.
Событие |
Описание |
---|---|
Вызывает в пакете определяемое пользователем событие. |
|
Извещает пакет об ошибке. |
|
Передает сведения пользователю. |
|
Информирует пакет о ходе выполнения задачи. |
|
Возвращает значение, которое указывает, нужно ли пакету, чтобы задача преждевременно прервала выполнение. |
|
Информирует пакет, что задача находится в состоянии, которое требует уведомить пользователя, но не является состоянием ошибки. |
Пример события
В следующем примере демонстрируется вызов событий изнутри задачи «Сценарий». Пример использует собственную функцию API Windows, чтобы определить, доступно ли соединение с Интернетом. Если соединения нет, создается ошибка. Если используется потенциально нестабильное соединение по модему, пример формирует предупреждение. В противном случае возвращается информационное сообщение, что соединение с Интернетом обнаружено.
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;
}
|
См. также