カスタム タスク用ユーザー インターフェイスの開発
適用対象: SQL Server Azure Data Factory の SSIS 統合ランタイム
Integration Services のオブジェクト モデルを使用すると、カスタム タスクの開発者は、タスク用のユーザー インターフェイスを容易に作成できます。作成後、このユーザー インターフェイスは SQL Server Data Tools (SSDT) に統合して表示することができます。 このユーザー インターフェイスでは、SSIS デザイナーのユーザーに役に立つ情報を提供でき、カスタム タスクのプロパティや設定を正しく構成するための指針とすることができます。
タスク用のカスタム ユーザー インターフェイスを開発するには、2 つの重要なクラスを使用します。 次の表は、これらのクラスを示しています。
クラス | 説明 |
---|---|
DtsTaskAttribute | マネージド タスクを識別する属性。この属性のプロパティによってデザイン時の情報を提供し、SSIS デザイナーでのオブジェクトの表示方法と操作方法を制御します。 |
IDtsTaskUI | タスクとカスタム ユーザー インターフェイスを関連付けるためにタスクが使用するインターフェイス。 |
このセクションでは、ユーザー インターフェイスを開発する際の DtsTaskAttribute 属性および IDtsTaskUI インターフェイスの役割について説明し、SSIS デザイナーでタスクを作成、統合、配置、デバッグする方法について詳細に説明します。
SSIS デザイナーには、タスクのユーザー インターフェイスへの複数のエントリ ポイントがあります。つまり、ショートカット メニューの [編集] を選択し、タスクをダブルクリックするか、プロパティ シートの下部にある [エディターの表示] リンクをクリックできます。 これらのエントリ ポイントのいずれかにアクセスすると、SSIS デザイナーはタスク用のユーザー インターフェイスが含まれているアセンブリを探して読み込みます。 タスクのユーザー インターフェイスには、SQL Server Data Tools (SSDT) で表示されるプロパティ ダイアログ ボックスを作成する役割があります。
タスクとそのユーザー インターフェイスは個別のエンティティです。 ローカライズ、配置、メンテナンスなどの作業を容易にするため、タスクとユーザー インターフェイスは個別のアセンブリに実装する必要があります。 タスク 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 デザイナーに表示します。
DisplayName、Description、および 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