Кодирование и отладка компонента сценария
В конструкторе служб 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. Дополнительные сведения см. в разделе Вызов событий в компоненте сценария.
Протоколировать события или пользовательские сообщения на включенных регистраторах. Дополнительные сведения см. в разделе Ведение журнала в компоненте сценария.
Если нужно только проанализировать выход компонента сценария, настроенного в качестве источника или преобразования, без сохранения данных в месте назначения, то можно остановить поток данных с помощью преобразования Преобразование «Подсчет строк» и присоединить средство просмотра данных к выходу компонента сценария. Дополнительные сведения о средствах просмотра данных см. в разделе Отладка потока данных.
В этом разделе
Дополнительные сведения о написании кода компонента сценария см. в следующих подразделах в этом разделе.
Основные сведения о модели объектов компонента сценария
Использование объектов, методов и свойств, доступных в компоненте сценария.Ссылки на другие сборки в решениях со сценариями
Способы назначения ссылок на объекты из библиотеки классов .NET Framework в компоненте сценария.Имитация вывода ошибок для компонента скрипта
Способы имитации вывода ошибок для строк, которые вызвали ошибки в ходе обработки компонентом скрипта.
Внешние ресурсы
- Запись в блоге, Затруднения при установке и настройке VSTA для установок служб SSIS 2008 и R2, на сайте blogs.msdn.com.
|