Поделиться через


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

Область применения: среда выполнения интеграции 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  

См. также

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