Написание кода и отладка задачи «Сценарий»
После настройки задачи «Сценарий» в окне Редактор задачи «Сценарий» необходимо создать пользовательский код в среде разработки задачи «Сценарий».
Среда разработки задачи «Сценарий»
Задача «Сценарий» использует средства MicrosoftVisual Studio для приложений (VSTA) в качестве среды разработки для самого сценария.
Код сценария написан на языке MicrosoftVisual Basic 2008 или MicrosoftVisual C# 2008. Пользователь указывает язык сценария, задавая свойство ScriptLanguage в окне Редактор задачи «Сценарий». Если разработчик предпочитает пользоваться другим языком программирования, можно разработать пользовательскую сборку на выбранном языке и вызвать его функциональные возможности из кода в задаче «Сценарий».
Сценарий, созданный в задаче «Сценарий», хранится в определении пакета. Отдельного файла сценария не существует. Поэтому использование задачи «Сценарий» не влияет на развертывание пакета.
Примечание |
---|
При проектировании пакета и отладке сценария код сценария временно записывается в файл проекта. Хранение конфиденциальных сведений в файле представляет потенциальный риск для безопасности, поэтому в код сценария не рекомендуется включать конфиденциальные данные, например пароли. |
По умолчанию среда Option Strict в среде разработки отключена.
Структура проекта задачи «Сценарий»
При создании или изменении сценария, содержащегося в задаче «Сценарий» средства VSTA открывают новый пустой проект или повторно открывают существующий проект. Создание этого проекта VSTA не влияет на развертывание пакета, поскольку проект сохраняется внутри пакетного файла и задача «Сценарий» не создает дополнительных файлов.
Элементы и классы проекта в проекте задачи «Сценарий»
По умолчанию проект задачи «Сценарий», отображаемый в окне обозревателя проекта VSTA, содержит один элемент ScriptMain. В свою очередь, элемент ScriptMain содержит один класс, именуемый ScriptMain. Элементы кода в классе изменяются в зависимости от языка программирования, выбранного для задачи «Сценарий».
Если задача «Сценарий» настроена для языка программирования Visual Basic 2008, класс ScriptMain содержит открытую подпрограмму Main. Подпрограмма ScriptMain.Main является методом, который вызывается во время выполнения задачи «Сценарий».
По умолчанию единственным кодом в подпрограмме Main нового сценария является строка Dts.TaskResult = ScriptResults.Success. Эта строка извещает среду выполнения об успешной работе задачи. Свойство Dts.TaskResult рассматривается в разделе Возврат результатов из задачи «Сценарий».
Если задача «Сценарий» настроена для языка программирования Visual C# 2008, класс ScriptMain содержит открытый метод Main. Этот метод вызывается при запуске задачи «Сценарий».
По умолчанию метод Main включает строку Dts.TaskResult = (int)ScriptResults.Success. Эта строка извещает среду выполнения об успешной работе задачи.
Элемент ScriptMain может содержать классы, отличные от класса ScriptMain. Классы доступны только задаче «Сценарий», в которой они находятся.
По умолчанию элемент проекта ScriptMain содержит следующий автоматически формируемый код:
' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic 2008.
' The ScriptMain is the entry point class of the script.
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime.VSTAProxy
<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
Partial Class ScriptMain
Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
End Sub
Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
Try
' Unlock variables from the read-only and read-write variable collection properties
If (Dts.Variables.Count <> 0) Then
Dts.Variables.Unlock()
End If
Catch ex As Exception
End Try
End Sub
Enum ScriptResults
Success = DTSExecResult.Success
Failure = DTSExecResult.Failure
End Enum
' The execution engine calls this method when the task executes.
' To access the object model, use the Dts property. Connections, variables, events,
' and logging features are available as members of the Dts property as shown in the following examples.
'
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)
'
' To use the connections collection use something like the following:
' ConnectionManager cm = Dts.Connections.Add("OLEDB")
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"
'
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
'
' To open Help, press F1.
Public Sub Main()
'
' Add your code here
'
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
/*
Microsoft SQL Server Integration Services Script Task
Write scripts using Microsoft Visual C# 2008.
The ScriptMain is the entry point class of the script.
*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime.VSTAProxy;
using System.Windows.Forms;
namespace ST_1bcfdbad36d94f8ba9f23a10375abe53.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain
{
private void ScriptMain_Startup(object sender, EventArgs e)
{
}
private void ScriptMain_Shutdown(object sender, EventArgs e)
{
try
{
// Unlock variables from the read-only and read-write variable collection properties
if (Dts.Variables.Count != 0)
{
Dts.Variables.Unlock();
}
}
catch
{
}
}
#region VSTA generated code
private void InternalStartup()
{
this.Startup += new System.EventHandler(ScriptMain_Startup);
this.Shutdown += new System.EventHandler(ScriptMain_Shutdown);
}
enum ScriptResults
{
Success = DTSExecResult.Success,
Failure = DTSExecResult.Failure
};
#endregion
/*
The execution engine calls this method when the task executes.
To access the object model, use the Dts property. Connections, variables, events,
and logging features are available as members of the Dts property as shown in the following examples.
To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;
To post a log entry, call Dts.Log("This is my log text", 999, null);
To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);
To use the connections collection use something like the following:
ConnectionManager cm = Dts.Connections.Add("OLEDB");
cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";
Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
To open Help, press F1.
*/
public void Main()
{
// TODO: Add your code here
Dts.TaskResult = (int)ScriptResults.Success;
}
}
Дополнительные элементы проекта в проекте задачи «Сценарий»
Проект задачи «Сценарий» может содержать элементы, отличные от элемента ScriptMain по умолчанию. К проекту можно добавлять классы, модули и файлы кодов. Можно также использовать папки для организации групп элементов. Все добавляемые элементы сохраняются внутри пакета.
Ссылки в проекте задачи «Сценарий»
Чтобы добавить ссылки в управляемые сборки, щелкните правой кнопкой мыши проект задачи «Сценарий» в Обозревателе проектов, затем выберите Добавить ссылку. Дополнительные сведения см. в разделе Ссылки на другие сборки в решениях со сценариями.
Примечание |
---|
Ссылки проекта можно просмотреть в среде разработки VSTA в Представлении класса или в Обозревателе проекта. Любое из этих окон можно открыть из меню Вид. Можно добавить новую ссылку из меню Проект, из Обозревателя проекта или из Представления класса. |
Взаимодействие с пакетом в задаче «Сценарий»
Задача «Сценарий» использует глобальный объект Dts, являющийся экземпляром класса ScriptObjectModel, а его элементы должны взаимодействовать с содержащим их пакетом и со средой выполнения служб Integration Services.
В следующей таблице представлены основные открытые элементы класса ScriptObjectModel, который представлен в коде задачи «Сценарий» через глобальный объект Dts. В этом разделе более подробно рассматривается использование этих элементов.
Элемент |
Назначение |
---|---|
Предоставляет доступ к диспетчерам соединений, определенным в пакете. |
|
Предоставляет интерфейс событий, чтобы задача «Сценарий» могла инициировать ошибки, предупреждения и информационные сообщения. |
|
Предоставляет простой способ возвращения одного объекта в среду выполнения (в дополнение к TaskResult), который может также использоваться для ветвления потока операций. |
|
Записывает во включенные регистраторы данные, такие как ход выполнения задачи и результаты. |
|
Сообщает об успешном или неуспешном выполнении задачи. |
|
Предоставляет транзакцию, если она имеется, в которой работает контейнер задачи. |
|
Предоставляет доступ к используемым в сценарии переменным, указанным в свойствах ReadOnlyVariables и ReadWriteVariables задачи. |
Класс ScriptObjectModel содержит также некоторые открытые элементы, которые, вероятно, не будут использованы.
Элемент |
Описание |
---|---|
Свойство Variables предоставляет более удобный доступ к переменным. Хотя можно использовать VariableDispenser, необходимо явно вызывать методы для блокировки и разблокировки переменных для чтения и записи. Задача «Сценарий» прозрачно обрабатывает семантику блокировки при использовании свойства Variables. |
Отладка задачи «Сценарий»
Для отладки кода в задаче «Сценарий» установите в коде по крайней мере одну точку останова, а затем закройте среду разработки VSTA IDE, чтобы запустить пакет в среде Business Intelligence Development Studio. Когда выполнение пакета входит в задачу «Сценарий», среда разработки VSTA IDE открывается повторно и отображает код в режиме только для чтения. После того как выполнение достигает точку останова, можно проверить значения переменных и выполнить оставшийся код в режиме пошагового выполнения.
Примечание |
---|
Для отладки задачи «Сценарий» необходимо выполнить пакет. Если выполняется только отдельная задача, точки останова в коде задачи «Сценарий» пропускаются. |
Примечание |
---|
Однако нельзя выполнять отладку задачи «Сценарий», если задача запускается как часть дочернего пакета, вызываемого задачей «Выполнение пакета». В этом случае точки останова, установленные в задаче «Сценарий» в дочернем пакете, пропускаются. Дочерний пакет можно нормально отладить, запустив его отдельно. |
Примечание |
---|
При отладке пакета, содержащего несколько задач «Сценарий», отладчик обрабатывает точки останова только в одной задаче «Сценарий» и не учитывает точки останова в других задачах. Если задача «Сценарий» является частью контейнера «цикл по каждому элементу» или «цикл по элементам», отладчик пропускает точки останова в задаче «Сценарий» после первого прохода цикла. |
|