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


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

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

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

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

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

Мероприятие Description
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 (SSIS)
Добавление обработчика событий к пакету