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


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

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

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

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

Для подготовки скрипта нажмите кнопку Изменить скрипт на странице Скрипт в окне Редактор преобразования «Скрипт». Откроется среда разработки скриптов средств Microsoft Visual Studio для приложений (VSTA). В среде разработки VSTA предусмотрены все стандартные возможности среды Visual Studio .NET, в том числе редактор 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 IDE, чтобы запустить пакет в среде SQL Server Data Tools (SSDT). Когда выполнение пакета входит в компонент «Скрипт», среда разработки VSTA IDE открывается повторно и отображает код в режиме только для чтения. После того как выполнение достигает точку останова, можно проверить значения переменных и выполнить оставшийся код в режиме пошагового выполнения.

ПримечаниеПримечание

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

ПримечаниеПримечание

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

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

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

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

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

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

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

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

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

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

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


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

См. также

Основные понятия

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