Поделиться через


Вызов событий в задаче «Сценарий»

События позволяют сообщать об ошибках и предупреждениях, а также передавать другие сведения, например о ходе выполнения задачи или ее состоянии, в пакет, содержащий задачу. Пакет предоставляет обработчики событий для управления уведомлениями о событиях. Задача «Сценарий» может создавать события, вызывая методы свойства Events объекта Dts. Дополнительные сведения об обработке событий в пакетах служб Integration Services см. в разделе Обработчики событий служб Integration Services.

События могут регистрироваться любым регистратором, включенным в пакете. Регистраторы сохраняют сведения о событиях в хранилище данных. Задача «Сценарий» может также использовать метод Log для занесения записей в регистратор без вызова событий. Дополнительные сведения об использовании метода Log см. в разделе Ведение журнала в задаче «Скрипт».

Для вызова события задача «Сценарий» вызывает один из методов, предоставляемых свойством Events. В следующей таблице перечислены методы, предоставляемые свойством Events.

Событие

Описание

FireCustomEvent

Вызывает в пакете определяемое пользователем событие.

FireError

Извещает пакет об ошибке.

FireInformation

Передает сведения пользователю.

FireProgress

Информирует пакет о ходе выполнения задачи.

FireQueryCancel

Возвращает значение, которое указывает, нужно ли пакету, чтобы задача преждевременно прервала выполнение.

FireWarning

Информирует пакет, что задача находится в состоянии, которое требует уведомить пользователя, но не является состоянием ошибки.

Пример события

В следующем примере демонстрируется вызов событий изнутри задачи «Сценарий». Пример использует собственную функцию 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;

        }
Значок служб Integration Services (маленький) Будьте в курсе новых возможностей cлужб Integration Services

Чтобы загружать новейшую документацию, статьи, образцы и видеоматериалы от корпорации Майкрософт, а также лучшие решения от участников сообщества, посетите страницу служб Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.