Разработка пользовательского интерфейса для пользовательской задачи
Объектная модель служб Службы Integration Services предоставляет разработчикам пользовательских задач удобный способ создания собственного пользовательского интерфейса для задачи, который можно затем интегрировать и вывести в среде SQL Server Data Tools (SSDT). Пользовательский интерфейс может предоставлять пользователю полезную информацию в конструкторе служб Службы SSIS и помогать пользователям правильно конфигурировать свойства и настройки пользовательской задачи.
Разработка собственного пользовательского интерфейса задачи требует использования двух важных классов. Эти классы описываются в следующей таблице.
Класс |
Описание |
---|---|
Атрибут, который идентифицирует управляемую задачу и предоставляет через свои свойства информацию времени разработки, определяющую, каким образом конструктор служб Службы SSIS выводит объект и взаимодействует с ним. |
|
Интерфейс, используемый задачей для того, чтобы связать ее с собственным пользовательским интерфейсом. |
В данном разделе описывается роль атрибута DtsTaskAttribute и интерфейса IDtsTaskUI при разработке пользовательского интерфейса для пользовательской задачи и предоставляются подробные сведения о создании, интеграции, развертывании и отладке задачи в конструкторе служб Службы SSIS.
Конструктор служб Службы SSIS предоставляет несколько точек входа в пользовательский интерфейс данной задачи: пользователь может выбрать Изменить в контекстном меню, дважды щелкнуть задачу или щелкнуть ссылку Показать редактор в нижней части страницы свойств. Когда пользователь получает доступ к одной из этих точек входа, конструктор служб Службы SSIS находит и загружает сборку, содержащую пользовательский интерфейс для соответствующей задачи. Пользовательский интерфейс задачи отвечает за создание диалогового окна свойств, которое выводится для пользователя в среде разработки SQL Server Data Tools (SSDT).
Задача и ее пользовательский интерфейс представляют собой отдельные сущности. Их нужно реализовать в отдельных сборках, чтобы уменьшить объем работы по локализации, развертыванию и поддержке. Динамическая библиотека задачи не загружает и не вызывает свой пользовательский интерфейс и вообще ничего о нем не знает, за исключением информации, содержащейся в значениях атрибутов объектов DtsTaskAttribute, создаваемых в коде задачи. Это единственная связь между задачей и ее пользовательским интерфейсом.
Атрибут DtsTask
Атрибут DtsTaskAttribute включается в код класса задачи, чтобы связать задачу с ее пользовательским интерфейсом. Конструктор служб Службы SSIS использует свойства атрибута, чтобы определить, каким образом показывать задачу в конструкторе. Свойства включают в себя имя задачи для вывода и значок задачи, если он есть.
В следующей таблице приводится описание свойств атрибута DtsTaskAttribute.
Свойство |
Описание |
---|---|
Выводит имя задачи в области элементов потока управления. |
|
Описание задачи (наследуется от DtsLocalizableAttribute). Это свойство показывается во всплывающей подсказке. |
|
Значок выводится в конструкторе служб Службы SSIS. |
|
Если это свойство используется, нужно задать для него одно из значений перечисления DTSProductLevel. Например, RequiredProductLevel = DTSProductLevel.None. |
|
Хранит контактную информацию на случай, если работа задачи потребует технической поддержки. |
|
Присваивает задаче тип. |
|
Attribute.TypeId |
Возвращает уникальный идентификатор для этого атрибута при реализации в производном классе. Дополнительные сведения см. в разделе, посвященном свойству Attribute.TypeID документации по библиотеке классов платформы .NET Framework. |
Имя типа сборки, используемое конструктором служб Службы SSIS для загрузки сборки. Это свойство используется для поиска сборки пользовательского интерфейса данной задачи. |
В следующем примере кода показан код атрибута DtsTaskAttribute, расположенный выше определения класса.
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace Microsoft.SSIS.Samples
{
[DtsTask
(
DisplayName = "MyTask",
IconResource = "MyTask.MyTaskIcon.ico",
UITypeName = "My Custom Task," +
"Version=1.0.0.0," +
"Culture = Neutral," +
"PublicKeyToken = 12345abc6789de01",
TaskType = "PackageMaintenance",
TaskContact = "MyTask; company name; any other information",
RequiredProductLevel = DTSProductLevel.None
)]
public class MyTask : Task
{
// Your code here.
}
}
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
<DtsTask(DisplayName:="MyTask", _
IconResource:="MyTask.MyTaskIcon.ico", _
UITypeName:="My Custom Task," & _
"Version=1.0.0.0,Culture=Neutral," & _
"PublicKeyToken=12345abc6789de01", _
TaskType:="PackageMaintenance", _
TaskContact:="MyTask; company name; any other information", _
RequiredProductLevel:=DTSProductLevel.None)> _
Public Class MyTask
Inherits Task
' Your code here.
End Class 'MyTask
Конструктор служб Службы SSIS использует свойство UITypeName этого атрибута, которое включает в себя имя сборки, имя типа, значения токенов версии, языка, культуры, а также открытого ключа для поиска сборки в глобальном кэше сборок (GAC) и ее загрузки для использования в конструкторе.
Когда сборка найдена, конструктор служб Службы SSIS использует другие свойства атрибута для вывода дополнительной информации о задаче в конструкторе служб Службы SSIS — например, имени, значка и описания задачи.
Свойства DisplayName, Description и IconResource указывают, как задача представляется пользователю. Свойство IconResource содержит идентификатор ресурса значка, внедренного в сборку пользовательского интерфейса. Конструктор загружает ресурс значка по идентификатору из сборки и выводит его рядом с именем задачи в области элементов и в области конструктора, когда задача добавлена к пакету. Если задача не предоставляет ресурс значка, конструктор использует для нее значок по умолчанию.
Интерфейс IDTSTaskUI
Интерфейс IDtsTaskUI определяет коллекцию методов и свойств, вызываемых конструктором служб Службы SSIS для инициализации и вывода пользовательского интерфейса, связанного с данной задачей. При вызове пользовательского интерфейса задачи конструктор вызывает метод Initialize, реализованный в пользовательском интерфейсе задачи во время разработки, а затем передает коллекции TaskHost и Connections задачи и пакета соответственно в качестве параметров. Коллекции хранятся локально и последовательно используются методом GetView.
Конструктор служб Службы SSIS вызывает метод GetView, чтобы запросить окно, выводимое в конструкторе. Задача создает экземпляр окна, содержащего пользовательский интерфейс задачи, и возвращает пользовательский интерфейс конструктору для вывода. Обычно окну через перегруженный конструктор предоставляются объекты TaskHost и Connections, чтобы их можно было использовать для настройки задачи.
Конструктор служб Службы SSIS вызывает метод GetView пользовательского интерфейса задачи, чтобы вывести пользовательский интерфейс данной задачи. Пользовательский интерфейс задачи возвращает после вызова данного метода форму Windows, и конструктор служб Службы SSIS выводит эту форму как модальное диалоговое окно. После закрытия формы конструктор служб Службы SSIS исследует значение свойства DialogResult формы, чтобы определить, была ли задача изменена и следует ли сохранить эти изменения. Если значение свойства DialogResult равно OK, конструктор служб Службы SSIS вызывает методы сохранения задачи, чтобы сохранить изменения; в противном случае изменения отменяются.
В приведенном образце кода реализован интерфейс IDtsTaskUI. Предполагается существование класса форм Windows с именем SampleTaskForm.
using System;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Runtime.Design;
namespace Sample
{
public class HelloWorldTaskUI : IDtsTaskUI
{
TaskHost taskHost;
Connections connections;
public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
{
this.taskHost = taskHost;
IDtsConnectionService cs = serviceProvider.GetService
( typeof( IDtsConnectionService ) ) as IDtsConnectionService;
this.connections = cs.GetConnections();
}
public ContainerControl GetView()
{
return new HelloWorldTaskForm(this.taskHost, this.connections);
}
public void Delete(IWin32Window parentWindow)
{
}
public void New(IWin32Window parentWindow)
{
}
}
}
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Runtime.Design
Imports System.Windows.Forms
Public Class HelloWorldTaskUI
Implements IDtsTaskUI
Dim taskHost As TaskHost
Dim connections As Connections
Public Sub Initialize(ByVal taskHost As TaskHost, ByVal serviceProvider As IServiceProvider) _
Implements IDtsTaskUI.Initialize
Dim cs As IDtsConnectionService
Me.taskHost = taskHost
cs = DirectCast(serviceProvider.GetService(GetType(IDtsConnectionService)), IDtsConnectionService)
Me.connections = cs.GetConnections()
End Sub
Public Function GetView() As ContainerControl _
Implements IDtsTaskUI.GetView
Return New HelloWorldTaskForm(Me.taskHost, Me.connections)
End Function
Public Sub Delete(ByVal parentWindow As IWin32Window) _
Implements IDtsTaskUI.Delete
End Sub
Public Sub [New](ByVal parentWindow As IWin32Window) _
Implements IDtsTaskUI.[New]
End Sub
End Class
|
См. также
Основные понятия
Создание пользовательской задачи
Создание кода пользовательской задачи
Разработка пользовательского интерфейса для пользовательской задачи