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

Модель объектов служб Integration Services предоставляет разработчикам пользовательских задач удобный способ создания собственного пользовательского интерфейса для задачи, который можно затем интегрировать и вывести в среде Business Intelligence Development Studio. Пользовательский интерфейс может предоставлять пользователю полезную информацию в конструкторе служб SSIS и помогать пользователям правильно конфигурировать свойства и настройки пользовательской задачи.

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

Класс

Описание

DtsTaskAttribute

Атрибут, который идентифицирует управляемую задачу и предоставляет через свои свойства информацию времени разработки, определяющую, каким образом конструктор служб SSIS выводит объект и взаимодействует с ним.

IDtsTaskUI

Интерфейс, используемый задачей для того, чтобы связать ее с собственным пользовательским интерфейсом.

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

Конструктор служб SSIS предоставляет несколько точек входа в пользовательский интерфейс данной задачи: пользователь может выбрать Изменить в контекстном меню, дважды щелкнуть задачу или щелкнуть ссылку Показать редактор в нижней части страницы свойств. Когда пользователь получает доступ к одной из этих точек входа, конструктор служб SSIS находит и загружает сборку, содержащую пользовательский интерфейс для соответствующей задачи. Пользовательский интерфейс задачи отвечает за создание диалогового окна свойств, которое выводится для пользователя в среде разработки Business Intelligence Development Studio.

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

Атрибут DtsTask

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

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

Свойство

Описание

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.

Конструктор служб 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
Значок служб Integration Services (маленький) Будьте в курсе новых возможностей cлужб Integration Services

Чтобы загружать новейшую документацию, статьи, образцы и видеоматериалы от корпорации Майкрософт, а также лучшие решения от участников сообщества, посетите страницу служб Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.