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


Кодирование и отладка компонента скрипта

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

В конструкторе служб SSIS компонент скрипта имеет два режима: режим конструктора метаданных и режим конструктора кода. Когда открывается редактор преобразования "Скрипт", компонент переключается в режим конструктора метаданных, в котором настраиваются метаданные и задаются свойства компонентов. После того как будут заданы свойства компонента скрипта и настроены входы и выходы в режиме конструктора метаданных, можно переключиться в режим редактирования кода для составления пользовательского скрипта. Дополнительные сведения о режимах конструктора метаданных и кода см. в разделе Настройка компонента скрипта в редакторе компонента скрипта.

Разработка скрипта в режиме конструктора кода

Среда разработки компонента скрипта

Чтобы написать скрипт, нажмите кнопку "Изменить скрипт" на странице "Скрипт" редактора преобразования скриптов, чтобы открыть интегрированную среду разработки набор средств Microsoft Visual Studio Tools для работы с приложениями (VSTA). Интегрированная среда разработки VSTA включает все стандартные функции среды .NET Visual Studio, такие как редактор Visual Studio с цветом, IntelliSense и обозреватель объектов.

Код скрипта написан в Microsoft Visual Basic или Microsoft Visual C#. Пользователь указывает язык скриптов, задавая значение свойства ScriptLanguage в окне Редактор преобразования "Скрипт". Если разработчик предпочитает пользоваться другим языком программирования, то можно разработать пользовательскую сборку на выбранном языке и вызвать его функциональные возможности из кода в компоненте скрипта.

Скрипт, созданный в компоненте скрипта, хранится в определении пакета. Отдельного файла скрипта не существует. Поэтому использование компонента скрипта не влияет на развертывание пакета.

Примечание.

При проектировании пакета код скрипта временно записывается в файл проекта. Хранение конфиденциальных сведений в файле представляет потенциальный риск для безопасности, поэтому в код скрипта не рекомендуется включать конфиденциальные сведения, например пароли.

По умолчанию параметр Option Strict в интегрированной среде разработки отключен.

Структура проекта компонента скрипта

Преимущество компонента скрипта заключается в возможности создавать код инфраструктуры, что уменьшает объем кода, который приходится писать вручную. В основе этой возможности лежит тот факт, что входы и выходы, а также их столбцы и свойства являются фиксированными и известны заранее. Поэтому любые последующие изменения, внесенные в метаданные компонента, могут сделать подготовленный код неработоспособным. Это приводит к ошибке при выполнении пакета.

Элементы и классы проекта в проекте компонента скрипта

При переключении в режим конструктора кода открывается среда разработки VSTA, где отображается элемент проекта ScriptMain. Элемент проекта ScriptMain содержит редактируемый класс ScriptMain, который служит точкой входа в скрипт и в котором проектируется код. Элементы кода в классе изменяются в зависимости от языка программирования, выбранного для задачи «Скрипт».

Проект скрипта содержит два дополнительных автоматически созданных элемента проекта, доступных только для чтения.

  • Элемент проекта ComponentWrapper содержит три класса:

    • Класс UserComponent, который наследуется от ScriptComponent и содержит методы и свойства для обработки данных и взаимодействия с пакетами. Класс ScriptMain наследуется от класса UserComponent.

    • Коллекция классов Connections, которая содержит ссылки на подключения, выбранные на странице "Диспетчер подключений" в редакторе преобразования "Скрипт".

    • Коллекция классов Variables, которая содержит ссылки на переменные, введенные в свойства ReadOnlyVariable и ReadWriteVariables на странице Скрипт в редакторе преобразования "Скрипт".

  • Элемент проекта BufferWrapper содержит класс, который наследует от класса ScriptBuffer для каждого входа и выхода, настроенного на странице Входы и выходы в редакторе преобразования "Скрипт". Каждый из этих классов содержит типизированные свойства метода доступа, которые соответствуют настроенным входным и выходным столбцам, а также буферы потока данных, содержащие столбцы.

Дополнительные сведения об использовании этих объектов, методов и свойств см. в разделе Основные сведения о модели объектов компонента скрипта. Сведения об использовании методов и свойств этих классов в компоненте скрипта определенного типа см. в разделе Дополнительные примеры компонента скрипта. В разделах примеров также приведен полный образец кода.

Если настроить компонент "Скрипт" в качестве преобразования, элемент проекта ScriptMain будет содержать следующий автоматически сформированный код. В шаблоне кода также имеется обзор компонента «Скрипт» и дополнительные сведения о получении и управлении такими объектами служб SSIS, как переменные, события и соединения.

' Microsoft SQL Server Integration Services Script Component  
' Write scripts using Microsoft Visual Basic 2008.  
' ScriptMain is the entry point class of the script.  
  
Imports System  
Imports System.Data  
Imports System.Math  
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper  
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper  
  
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _  
<CLSCompliant(False)> _  
Public Class ScriptMain  
    Inherits UserComponent  
  
    Public Overrides Sub PreExecute()  
        MyBase.PreExecute()  
        '  
        ' Add your code here for preprocessing or remove if not needed  
        '  
    End Sub  
  
    Public Overrides Sub PostExecute()  
        MyBase.PostExecute()  
        '  
        ' Add your code here for postprocessing or remove if not needed  
        ' You can set read/write variables here, for example:  
        ' Me.Variables.MyIntVar = 100  
        '  
    End Sub  
  
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
        '  
        ' Add your code here  
        '  
    End Sub  
  
End Class  
/* Microsoft SQL Server Integration Services user script component  
*  Write scripts using Microsoft Visual C# 2008.  
*  ScriptMain is the entry point class of the script.*/  
  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
using Microsoft.SqlServer.Dts.Runtime.Wrapper;  
  
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]  
public class ScriptMain : UserComponent  
{  
  
    public override void PreExecute()  
    {  
        base.PreExecute();  
        /*  
          Add your code here for preprocessing or remove if not needed  
        */  
    }  
  
    public override void PostExecute()  
    {  
        base.PostExecute();  
        /*  
          Add your code here for postprocessing or remove if not needed  
          You can set read/write variables here, for example:  
          Variables.MyIntVar = 100  
        */  
    }  
  
    public override void Input0_ProcessInputRow(Input0Buffer Row)  
    {  
        /*  
          Add your code here  
        */  
    }  
  
}  

Дополнительные элементы проекта в проекте компонента скрипта

Проект компонента скрипта может содержать элементы, отличные от элемента ScriptMain по умолчанию. Можно добавлять в проект классы, модули, файлы кода и папки, а также можно упорядочивать группы элементов с помощью папок.

Все добавляемые элементы сохраняются внутри пакета.

Ссылки в проекте компонента скрипта

Чтобы добавить ссылки в управляемые сборки, щелкните правой кнопкой мыши проект задачи "Скрипт" в Обозревателе проектов, затем выберите Добавить ссылку. Дополнительные сведения см. в разделе Ссылки на другие сборки в решениях со сценариями.

Примечание.

Ссылки проекта можно просмотреть в среде разработки VSTA в представлении классов или в обозревателе проектов. Любое из этих окон можно открыть из меню Вид. Можно добавить новую ссылку из меню Проект, из обозревателя проектов или из представления классов.

Взаимодействие с пакетом в компоненте скрипта

Пользовательский скрипт, составленный в компоненте скрипта, может обращаться к переменным и диспетчерам соединений из объемлющего пакета и использовать их через строго типизированные методы доступа в автоматически формируемых основных классах. Однако перед входом в режим конструктора кода необходимо настроить как переменные, так и диспетчеры соединений, если нужно сделать их доступными для скрипта. Кроме того, из кода компонента скрипта можно создавать события и вести журналы.

Автоматически созданные элементы проекта в проекте компонента скрипта предоставляют следующие объекты, методы и свойства для взаимодействия с пакетом.

Компонент пакета Метод доступа
Переменные Использование именованных и типизированных свойств метода доступа класса коллекции Variables в элементе проекта ComponentWrapper, отображенном в свойстве Variables класса ScriptMain.

Метод PreExecute может обращаться только к переменным, доступным только для чтения. Метод PostExecute может обращаться как к переменным, доступным только для чтения, так и к переменным, доступным для чтения и записи.
Связи Использование именованных и типизированных свойств метода доступа класса коллекции Connections в элементе проекта ComponentWrapper, отображенном в свойстве Connections класса ScriptMain.
События Создание событий с помощью свойства ComponentMetaData класса ScriptMain и методов Fire<X> интерфейса IDTSComponentMetaData100.
Ведение журнала Ведение журнала с помощью метода Log класса ScriptMain.

Отладка компонента скрипта

Чтобы выполнить отладку кода в компоненте скрипта, установите по крайней мере одну точку останова в коде, а затем закройте интегрированную среду разработки VSTA для запуска пакета в SQL Server Data Tools (SSDT). Когда выполнение пакета входит в компонент «Скрипт», среда разработки VSTA IDE открывается повторно и отображает код в режиме только для чтения. После того как выполнение достигает точку останова, можно проверить значения переменных и выполнить оставшийся код в режиме пошагового выполнения.

Примечание.

Однако нельзя выполнять отладку компонента «Скрипт», если этот компонент запускается как часть дочернего пакета, вызываемого задачей «Выполнение пакета». В этом случае точки останова, установленные в компоненте «Скрипт» в дочернем пакете, пропускаются. Дочерний пакет можно нормально отладить, запустив его отдельно.

Примечание.

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

Наблюдать за выполнением компонента «Скрипт» также можно следующими способами.

  • Прерывать выполнение и выводить на экран модальное сообщение с помощью метода MessageBox.Show в пространстве имен System.Windows.Forms. (После завершения процесса отладки этот код следует удалить.)

  • Создавать события для информационных сообщений, предупреждений и ошибок. Методы FireInformation, FireWarning и FireError отображают описание события в окне Вывод Visual Studio. Тем не менее методы FireProgress, Console.Write и Console.WriteLine не отображают никакие сведения в окне Вывод. Сообщения из события FireProgress отображаются на вкладке "Ход выполнения " конструктора служб SSIS. Дополнительные сведения см. в разделе Вызов событий в компоненте скрипта.

  • Протоколировать события или пользовательские сообщения на включенных регистраторах. Дополнительные сведения см. в разделе Ведение журнала в задаче скрипта.

Если нужно только проанализировать выход компонента скрипта, настроенного в качестве источника или преобразования, без сохранения данных в месте назначения, то можно остановить поток данных с помощью преобразования "Подсчет строк" и присоединить средство просмотра данных к выходу компонента скрипта. Дополнительные сведения о средствах просмотра данных см. в разделе Отладка потока данных.

В этом разделе

Дополнительные сведения о написании кода компонента скрипта см. в следующих подразделах в этом разделе.

Основные сведения о модели объектов компонента скрипта
Использование объектов, методов и свойств, доступных в компоненте скрипта.

Ссылки на другие сборки в решениях со сценариями
Описывает, как ссылаться на объекты из библиотеки классов платформа .NET Framework в компоненте script.

Имитация вывода ошибок для компонента скрипта
Способы имитации вывода ошибок для строк, которые вызвали ошибки в ходе обработки компонентом скрипта.

Внешние ресурсы

См. также

Настройка компонента скрипта в редакторе компонента скрипта