カスタム タスク用ユーザー インターフェイスの開発

Integration Services のオブジェクト モデルを使用すると、カスタム タスクの開発者は、タスク用のユーザー インターフェイスを容易に作成できます。作成後、このユーザー インターフェイスは Business Intelligence Development Studio に統合して表示することができます。このユーザー インターフェイスでは、SSIS デザイナのユーザーに役に立つ情報を提供でき、カスタム タスクのプロパティや設定を正しく構成するための指針とすることができます。

タスク用のカスタム ユーザー インターフェイスを開発するには、2 つの重要なクラスを使用します。次の表は、これらのクラスを示しています。

クラス

説明

DtsTaskAttribute

マネージ タスクを識別する属性。この属性のプロパティによってデザイン時の情報を提供し、SSIS デザイナでのオブジェクトの表示方法と操作方法を制御します。

IDtsTaskUI

タスクとカスタム ユーザー インターフェイスを関連付けるためにタスクが使用するインターフェイス。

このセクションでは、ユーザー インターフェイスを開発する際の DtsTaskAttribute 属性および IDtsTaskUI インターフェイスの役割について説明し、SSIS デザイナでタスクを作成、統合、配置、デバッグする方法について詳細に説明します。

SSIS デザイナには、タスクのユーザー インターフェイスへの複数のエントリ ポイントがあります。つまり、ショートカット メニューの [編集] を選択し、タスクをダブルクリックするか、プロパティ シートの下部にある [エディタの表示] リンクをクリックできます。これらのエントリ ポイントのいずれかにアクセスすると、SSIS デザイナはタスク用のユーザー インターフェイスが含まれているアセンブリを探して読み込みます。タスクのユーザー インターフェイスには、Business Intelligence Development Studio で表示されるプロパティ ダイアログ ボックスを作成する役割があります。

タスクとそのユーザー インターフェイスは個別のエンティティです。ローカライズ、配置、メンテナンスなどの作業を容易にするため、タスクとユーザー インターフェイスは個別のアセンブリに実装する必要があります。タスク DLL は、ユーザー インターフェイスの読み込み、呼び出しを行わず、これには通常、ユーザー インターフェイスに関するいかなる情報も含まれていません。ただし、タスク内でコード化された DtsTaskAttribute 属性値に含まれる情報は例外です。タスクとユーザー インターフェイスは、この方法によってのみ関連付けられます。

DtsTask 属性

タスク クラス コードに含まれている DtsTaskAttribute 属性により、タスクはユーザー インターフェイスと関連付けられます。SSIS デザイナでは、タスクをデザイナに表示する方法を判別するために、属性のプロパティが使用されます。これらのプロパティには、表示する名前やアイコン (存在する場合) が含まれます。

次の表は、DtsTaskAttribute 属性のプロパティを示しています。

プロパティ

説明

DisplayName

制御フロー ツールボックスに表示するタスク名。

Description

タスクの説明 (DtsLocalizableAttribute から継承)。ツールヒントに表示されるプロパティです。

IconResource

SSIS デザイナに表示するアイコン。

RequiredProductLevel

使用する場合は、DTSProductLevel 列挙のいずれかの値に設定します。たとえば、RequiredProductLevel = DTSProductLevel.None のようになります。

TaskContact

タスクでテクニカル サポートが必要な場合の連絡先に関する情報。

TaskType

タスクに割り当てる型。

Attribute.TypeId

派生クラスに実装した場合、この属性の一意の識別子を取得します。詳細については、.NET Framework クラス ライブラリの「Attribute.TypeID プロパティ」を参照してください。

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 デザイナに表示します。

DisplayNameDescription、および IconResource プロパティは、ユーザーに対してタスクをどのように表示するかを指定します。IconResource プロパティには、ユーザー インターフェイス アセンブリに埋め込まれたアイコンのリソース ID が含まれます。デザイナはこの ID を基にしてアセンブリからアイコン リソースを読み込み、タスクがパッケージに追加されたとき、ツールボックスやデザイナ画面で、タスク名の隣にアイコンを表示します。タスクがアイコン リソースを提供しない場合、デザイナはタスク用に既定のアイコンを使用します。

IDTSTaskUI インターフェイス

IDtsTaskUI インターフェイスでは、SSIS デザイナが呼び出し、タスクに関連付けられたユーザー インターフェイスを初期化して表示するための、一連のメソッドやプロパティが定義されます。タスクのユーザー インターフェイスが起動されると、デザイナは Initialize メソッドを呼び出します。このメソッドは、ユーザーが記述した際にタスク ユーザー インターフェイスに実装されたものです。次に、タスクの TaskHost コレクション、およびパッケージの Connections コレクションを、パラメータとして渡します。このコレクションはローカルに保存され、後で GetView メソッド内で使用されます。

デザイナは GetView メソッドを呼び出して、SSIS デザイナで表示するウィンドウを要求します。タスクは、タスクのユーザー インターフェイスを含むウィンドウのインスタンスを作成し、ユーザー インターフェイスをデザイナに返して表示させます。通常、オーバーロードされたコンストラクタを介して、TaskHost オブジェクトおよび Connections オブジェクトがウィンドウに渡されるため、これを使用してタスクを構成できます。

SSIS デザイナはタスク ユーザー インターフェイスの GetView メソッドを呼び出して、タスク用のユーザー インターフェイスを表示します。タスク ユーザー インターフェイスはこのメソッドから Windows フォームを返し、SSIS デザイナは、このフォームをモーダル ダイアログ ボックスとして表示します。フォームを閉じると、SSIS デザイナはフォームの DialogResult プロパティの値を確認し、タスクが変更されたかどうか、およびその変更を保存する必要があるかどうかを判断します。DialogResult プロパティの値が OK の場合、SSIS デザイナはタスクの持続メソッドを呼び出して変更を保存します。それ以外の場合は、変更は破棄されます。

次のコード例は、IDtsTaskUI インターフェイスを実装します。ここでは、SampleTaskForm という名前の Windows フォーム クラスが存在するものと想定しています。

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 のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを購読します。