Разработка пользовательского интерфейса для пользовательской задачи

Применимо к: SQL Server Integration Runtime служб SSIS в Фабрика данных Azure

Объектная модель служб Службы Integration Services предоставляет разработчикам пользовательских задач удобный способ создания собственного пользовательского интерфейса для задачи, который можно затем интегрировать и вывести в среде SQL Server Data Tools (SSDT). Пользовательский интерфейс может предоставлять пользователю полезную информацию в конструкторе служб Integration Services и помогать пользователям правильно конфигурировать свойства и настройки пользовательской задачи.

Разработка собственного пользовательского интерфейса задачи требует использования двух важных классов. Эти классы описываются в следующей таблице.

Class Описание
DtsTaskAttribute Атрибут, который идентифицирует управляемую задачу и предоставляет через свои свойства информацию времени разработки, определяющую, каким образом конструктор служб Integration Services выводит объект и взаимодействует с ним.
IDtsTaskUI Интерфейс, используемый задачей для того, чтобы связать ее с собственным пользовательским интерфейсом.

В данном разделе описывается роль атрибута DtsTaskAttribute и интерфейса IDtsTaskUI при разработке пользовательского интерфейса для пользовательской задачи и предоставляются подробные сведения о создании, интеграции, развертывании и отладке задачи в конструкторе служб Integration Services.

Конструктор служб Integration Services предоставляет несколько точек входа в пользовательский интерфейс данной задачи: пользователь может выбрать пункт Изменить в контекстном меню, дважды щелкнуть задачу или щелкнуть ссылку Показать редактор в нижней части страницы свойств. Когда пользователь получает доступ к одной из этих точек входа, конструктор служб Integration Services находит и загружает сборку, содержащую пользовательский интерфейс для соответствующей задачи. Пользовательский интерфейс задачи отвечает за создание диалогового окна свойств, которое выводится для пользователя в среде разработки SQL Server Data Tools (SSDT).

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

Атрибут DtsTask

Атрибут DtsTaskAttribute включается в код класса задачи, чтобы связать задачу с ее пользовательским интерфейсом. Конструктор служб Integration Services использует свойства атрибута, чтобы определить, каким образом показывать задачу в конструкторе. Свойства включают в себя имя задачи для вывода и значок задачи, если он есть.

В следующей таблице приводится описание свойств атрибута DtsTaskAttribute.

Свойство Описание
DisplayName Выводит имя задачи в области элементов потока управления.
Description Описание задачи (наследуется от DtsLocalizableAttribute). Это свойство показывается во всплывающей подсказке.
IconResource Значок выводится в конструкторе служб Integration Services.
RequiredProductLevel Если это свойство используется, нужно задать для него одно из значений перечисления DTSProductLevel. Например, RequiredProductLevel = DTSProductLevel.None.
TaskContact Хранит контактную информацию на случай, если работа задачи потребует технической поддержки.
TaskType Присваивает задаче тип.
Attribute.TypeId Возвращает уникальный идентификатор для этого атрибута при реализации в производном классе. Дополнительные сведения см. в разделе, посвященном свойству Attribute.TypeID, документации по библиотеке классов платформы .NET Framework.
UITypeName Имя типа сборки, используемое конструктором служб Integration Services для загрузки сборки. Это свойство используется для поиска сборки пользовательского интерфейса данной задачи.

В следующем примере кода показан код атрибута 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  

Конструктор служб Integration Services использует свойство UITypeName этого атрибута, которое включает в себя имя сборки, имя типа, значения токенов версии, языка, культуры, а также открытого ключа для поиска сборки в глобальном кэше сборок (GAC) и ее загрузки для использования в конструкторе.

Когда сборка найдена, конструктор служб Integration Services использует другие свойства атрибута для вывода дополнительной информации о задаче в конструкторе служб Integration Services — например, имени, значка и описания задачи.

Свойства DisplayName, Description и IconResource указывают, как задача представляется пользователю. Свойство IconResource содержит идентификатор ресурса значка, внедренного в сборку пользовательского интерфейса. Конструктор загружает ресурс значка по идентификатору из сборки и выводит его рядом с именем задачи в области элементов и в области конструктора, когда задача добавлена к пакету. Если задача не предоставляет ресурс значка, конструктор использует для нее значок по умолчанию.

Интерфейс IDTSTaskUI

Интерфейс IDtsTaskUI определяет коллекцию методов и свойств, вызываемых конструктором служб Integration Services для инициализации и вывода пользовательского интерфейса, связанного с данной задачей. При вызове пользовательского интерфейса задачи конструктор вызывает метод Initialize, реализованный в пользовательском интерфейсе задачи во время разработки, а затем передает коллекции TaskHost и Connections задачи и пакета соответственно в качестве параметров. Коллекции хранятся локально и последовательно используются методом GetView.

Конструктор служб Integration Services вызывает метод GetView, чтобы запросить окно, выводимое в конструкторе. Задача создает экземпляр окна, содержащего пользовательский интерфейс задачи, и возвращает пользовательский интерфейс конструктору для вывода. Обычно окну через перегруженный конструктор предоставляются объекты TaskHost и Connections, чтобы их можно было использовать для настройки задачи.

Конструктор служб Integration Services вызывает метод GetView пользовательского интерфейса задачи, чтобы вывести пользовательский интерфейс данной задачи. Пользовательский интерфейс задачи возвращает после вызова данного метода форму Windows, и конструктор служб Integration Services выводит эту форму как модальное диалоговое окно. После закрытия формы конструктор служб Integration Services исследует значение свойства DialogResult формы, чтобы определить, была ли задача изменена и следует ли сохранить эти изменения. Если значение свойства DialogResult равно OK, конструктор служб Integration Services вызывает методы сохранения задачи, чтобы сохранить изменения; в противном случае изменения отменяются.

В приведенном образце кода реализован интерфейс 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  

См. также:

Создание пользовательской задачи
Создание кода пользовательской задачи
Разработка пользовательского интерфейса для пользовательской задачи