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


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

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

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

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

Для подготовки сценария нажмите кнопку Изменить сценарий на странице Сценарий в окне Редактор преобразования «Сценарий». Откроется среда разработки сценариев средств Microsoft Visual Studio для приложений (VSTA). В среде разработки VSTA предусмотрены все стандартные возможности среды Visual Studio, в том числе редактор Visual Studio с цветовым выделением, технологией IntelliSense и обозревателем объектов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

' 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.

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

Компонент сценария не поддерживает использование точек останова. Поэтому нельзя использовать пошаговое выполнение кода и анализировать значения во время выполнения пакета. Наблюдать за выполнением компонента сценария можно следующими способами.

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

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

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

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

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

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

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

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

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

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