Разработка пользовательского интерфейса для пользовательской задачи
Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure
Объектная модель Служб Integration Services предоставляет разработчикам пользовательских задач возможность легко создавать настраиваемый пользовательский интерфейс для задачи, которая затем может быть интегрирована и отображена в SQL Server Data Tools (SSDT). Пользовательский интерфейс может предоставить пользователю полезные сведения в конструкторе служб SSIS, а также настроить свойства и параметры настраиваемой задачи.
Разработка собственного пользовательского интерфейса задачи требует использования двух важных классов. Эти классы описываются в следующей таблице.
Класс | Description |
---|---|
DtsTaskAttribute | Атрибут, определяющий управляемую задачу, и предоставляет сведения о времени разработки с помощью его свойств, чтобы управлять отображением и взаимодействием конструктора служб SSIS с объектом. |
IDtsTaskUI | Интерфейс, используемый задачей для того, чтобы связать ее с собственным пользовательским интерфейсом. |
В этом разделе описывается роль атрибута DtsTaskAttribute и IDtsTaskUI интерфейса при разработке пользовательского интерфейса для пользовательской задачи, а также сведения о создании, интеграции, развертывании и отладке задачи в конструкторе служб SSIS.
Конструктор служб SSIS предоставляет несколько точек входа в пользовательский интерфейс для задачи: пользователь может выбрать "Изменить " в контекстном меню, дважды щелкнуть задачу или щелкнуть ссылку "Показать редактор " в нижней части листа свойств. Когда пользователь обращается к одной из этих точек входа, конструктор служб SSIS находит и загружает сборку, содержащую пользовательский интерфейс для задачи. Пользовательский интерфейс для задачи отвечает за создание диалогового окна свойств, отображаемого пользователю в SQL Server Data Tools (SSDT).
Задача и ее пользовательский интерфейс представляют собой отдельные сущности. Их нужно реализовать в отдельных сборках, чтобы уменьшить объем работы по локализации, развертыванию и поддержке. Динамическая библиотека задачи не загружает и не вызывает свой пользовательский интерфейс и вообще ничего о нем не знает, за исключением информации, содержащейся в значениях атрибутов объектов DtsTaskAttribute, создаваемых в коде задачи. Это единственная связь между задачей и ее пользовательским интерфейсом.
Атрибут DtsTask
Атрибут DtsTaskAttribute включается в код класса задачи, чтобы связать задачу с ее пользовательским интерфейсом. Конструктор служб SSIS использует свойства атрибута для определения способа отображения задачи в конструкторе. Свойства включают в себя имя задачи для вывода и значок задачи, если он есть.
В следующей таблице приводится описание свойств атрибута DtsTaskAttribute.
Свойство | Description |
---|---|
DisplayName | Выводит имя задачи в области элементов потока управления. |
Description | Описание задачи (наследуется от DtsLocalizableAttribute). Это свойство показывается во всплывающей подсказке. |
IconResource | Значок, отображаемый в конструкторе служб SSIS. |
RequiredProductLevel | Если это свойство используется, нужно задать для него одно из значений перечисления DTSProductLevel. Например, RequiredProductLevel = DTSProductLevel.None . |
TaskContact | Хранит контактную информацию на случай, если работа задачи потребует технической поддержки. |
TaskType | Присваивает задаче тип. |
Attribute.TypeId | Возвращает уникальный идентификатор для этого атрибута при реализации в производном классе. Дополнительные сведения см. в разделе, посвященном свойству Attribute.TypeID, документации по библиотеке классов платформы .NET Framework. |
UITypeName | Имя типа сборки, используемой конструктором служб 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.
Конструктор вызывает GetView метод для запроса окна, отображаемого в конструкторе служб SSIS. Задача создает экземпляр окна, содержащего пользовательский интерфейс задачи, и возвращает пользовательский интерфейс конструктору для вывода. Обычно окну через перегруженный конструктор предоставляются объекты TaskHost и Connections, чтобы их можно было использовать для настройки задачи.
Конструктор служб SSIS вызывает GetView метод пользовательского интерфейса задачи для отображения пользовательского интерфейса задачи. Пользовательский интерфейс задачи возвращает форму Windows из этого метода, а конструктор служб SSIS отображает эту форму как модальное диалоговое окно. При закрытии формы конструктор служб SSIS проверяет значение свойства DialogResult формы, чтобы определить, была ли задача изменена и следует ли сохранить эти изменения. Если значение свойства DialogResult равно ОК, конструктор служб 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
См. также
Создание пользовательской задачи
Создание кода пользовательской задачи
Разработка пользовательского интерфейса для пользовательской задачи