データ フロー コンポーネント用ユーザー インターフェイスの開発

コンポーネント開発者は、コンポーネント用のカスタム ユーザー インターフェイスを作成し、コンポーネントを編集するときに Business Intelligence Development Studio に表示させることができます。カスタム ユーザー インターフェイスを実装すると、データ フロー タスクでコンポーネントが追加または削除されたとき、またはコンポーネントに関するヘルプが要求されたときに通知されます。

コンポーネント用のカスタム ユーザー インターフェイスを提供しない場合でも、ユーザーは、詳細エディタを使用することで、コンポーネントおよびそのカスタム プロパティを構成することができます。詳細エディタでユーザーがカスタム プロパティ値を適切に変更できるようにするには、必要に応じて、IDTSCustomProperty100TypeConverter および UITypeEditor プロパティを使用します。詳細については、「データ フロー コンポーネントのデザイン時のメソッド」の「カスタム プロパティの作成」を参照してください。

UITypeName プロパティの設定

カスタム ユーザー インターフェイスを提供するには、DtsPipelineComponentAttributeUITypeName プロパティに、IDtsComponentUI インターフェイスを実装したクラスの名前を登録する必要があります。このプロパティがコンポーネントによって設定されると、SQL ServerIntegration Services の SSIS デザイナでコンポーネントを編集する際に、カスタム ユーザー インターフェイスが読み込まれ、必要な処理が呼び出されます。

UITypeName プロパティは、型の完全修飾名を示すコンマ区切り形式の文字列です。次の一覧は、型を識別する要素を順に示したものです。

  • 型名

  • アセンブリ名

  • ファイル バージョン

  • カルチャ

  • 公開キー トークン

次のコード サンプルは、PipelineComponent 基本クラスから派生し、UITypeName プロパティを指定するクラスを示します。

[DtsPipelineComponent(
DisplayName="SampleComponent",
UITypeName="MyNamespace.MyComponentUIClassName,MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcd...",
ComponentType = ComponentType.Transform)]
public class SampleComponent : PipelineComponent
{
//TODO: Implement the component here.
}
<DtsPipelineComponent(DisplayName="SampleComponent", _
UITypeName="MyNamespace.MyComponentUIClassName,MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcd...", ComponentType=ComponentType.Transform)> _ 
Public Class SampleComponent 
 Inherits PipelineComponent 
End Class

IDtsComponentUI インターフェイスの実装

IDtsComponentUI インターフェイスには、コンポーネントが追加、削除、および編集されたときに SSIS デザイナが呼び出すメソッドがあります。コンポーネント開発者は、これらのメソッドを実装する際にコードを記述することにより、ユーザーがコンポーネントを対話的に操作できるようにできます。

このクラスは通常、コンポーネント自体とは別個のアセンブリに実装します。別個のアセンブリの使用は必須ではありませんが、これを使用することで、開発者はコンポーネントとユーザー インターフェイスを相互に独立に作成および配置することができ、コンポーネントのバイナリの占有領域を少なく抑えることができます。

カスタム ユーザー インターフェイスを実装すると、SSIS デザイナでコンポーネントを編集する場合に比べ、コンポーネントの制御に関して開発者の意図をより反映することができます。たとえば New メソッドにコードを追加し、データ フロー タスクに最初にコンポーネントが追加されたときにこのコードを呼び出して、コンポーネントの初期設定の手順を示すウィザードを表示することができます。

IDtsComponentUI インターフェイスを実装するクラスを作成した後、ユーザーがコンポーネントに対して操作を行ったときに応答するコードを追加する必要があります。Initialize メソッドは、コンポーネントの IDTSComponentMetaData100 インターフェイスを提供するもので、New メソッドや Edit メソッドの実行前に呼び出されます。この参照は、プライベート メンバ変数に保存しておき、後でコンポーネントのメタデータを修正する際に使用します。

コンポーネントの修正と変更の保存

IDTSComponentMetaData100 インターフェイスは、パラメータとして Initialize メソッドに渡されます。この参照は、ユーザー インターフェイスを実装するコードによってメンバ変数にキャッシュされ、このユーザー インターフェイスに対するユーザー操作に応じてコンポーネントを修正するために使用されます。

IDTSComponentMetaData100 インターフェイスを介してコンポーネントを直接修正することも可能ですが、Instantiate メソッドを使用して、CManagedComponentWrapper のインスタンスを作成することをお勧めします。インターフェイスを使用してコンポーネントを直接編集すると、コンポーネントの検証処理が省略されるためです。CManagedComponentWrapper を介してコンポーネントのデザイン時インスタンスを使用する利点は、コンポーネントに加えられた変更が確実にコンポーネント側で制御されるという点です。

Edit メソッドの戻り値は、コンポーネントに加えられた変更が保存されたか、破棄されたかを示します。このメソッドによって false が返される場合、変更はすべて破棄されます。true の場合、コンポーネントに対する変更が保存され、パッケージを保存する必要があることを示すマークが付けられます。

SSIS デザイナのサービスの使用

Initialize メソッドの IServiceProvider パラメータにより、SSIS デザイナの、次のサービスにアクセスすることができます。

サービス

説明

IDtsClipboardService

コンポーネントがコピー/貼り付け、または切り取り/貼り付け操作の一部として生成されたかどうかを判別するために使用します。

IDtsConnectionService

パッケージ内の既存の接続へのアクセス、または新しい接続の作成に使用します。

IErrorCollectionService

最後に発生したエラーまたは警告だけを受け取るのではなく、コンポーネントで生成されたすべてのエラーおよび警告をキャプチャする必要がある場合に、データ フロー コンポーネントからのイベントをキャプチャするために使用します。

IDtsVariableService

パッケージ内の既存の変数へのアクセス、または新しい変数の作成に使用します。

IDtsPipelineEnvironmentService

データ フロー コンポーネントで親データ フロー タスクおよびデータ フロー内の他のコンポーネントにアクセスするために使用します。この機能は、追加のデータ フロー コンポーネントを必要に応じて作成および接続する緩やかに変化するディメンション ウィザードのようなコンポーネントの開発に使用できます。

これらのサービスを使用すると、コンポーネント開発者は、コンポーネントの読み込み先パッケージ内にある既存のオブジェクトにアクセスしたり、オブジェクトを新しく作成できます。

サンプル

次のコード例では、IDtsComponentUI インターフェイスを実装したカスタム ユーザー インターフェイス クラスと、コンポーネントのエディタとして使用できる Windows フォームの統合を示します。

カスタム ユーザー インターフェイス クラス

次のコードは、IDtsComponentUI インターフェイスを実装するクラスを示します。Edit メソッドは、コンポーネント エディタを作成し、そのフォームを表示します。フォームの戻り値により、コンポーネントに対する変更が保持されるかどうかが決定されます。

using System;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline.Design;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;

namespace Microsoft.Samples.SqlServer.Dts
{
    public class SampleComponentUI : IDtsComponentUI
    {
        IDTSComponentMetaData100 md;
        IServiceProvider sp;

        public void Help(System.Windows.Forms.IWin32Window parentWindow)
        {
        }
        public void New(System.Windows.Forms.IWin32Window parentWindow)
        {
        }
        public void Delete(System.Windows.Forms.IWin32Window parentWindow)
        {
        }
        public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Variables vars, Connections cons)
        {
            // Create and display the form for the user interface.
            SampleComponentUIForm componentEditor = new SampleComponentUIForm(cons, vars, md);

            DialogResult result  = componentEditor.ShowDialog(parentWindow);

            if (result == DialogResult.OK)
                return true;

            return false;
        }
        public void Initialize(IDTSComponentMetaData100 dtsComponentMetadata, IServiceProvider serviceProvider)
        {
            // Store the component metadata.
            this.md = dtsComponentMetadata;
        }
    }
}
Imports System 
Imports System.Windows.Forms 
Imports Microsoft.SqlServer.Dts.Runtime 
Imports Microsoft.SqlServer.Dts.Pipeline.Design 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 

Namespace Microsoft.Samples.SqlServer.Dts 

 Public Class SampleComponentUI 
 Implements IDtsComponentUI 
   Private md As IDTSComponentMetaData100 
   Private sp As IServiceProvider 

   Public Sub Help(ByVal parentWindow As System.Windows.Forms.IWin32Window) 
   End Sub 

   Public Sub New(ByVal parentWindow As System.Windows.Forms.IWin32Window) 
   End Sub 

   Public Sub Delete(ByVal parentWindow As System.Windows.Forms.IWin32Window) 
   End Sub 

   Public Function Edit(ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal vars As Variables, ByVal cons As Connections) As Boolean 
     ' Create and display the form for the user interface.
     Dim componentEditor As SampleComponentUIForm = New SampleComponentUIForm(cons, vars, md) 
     Dim result As DialogResult = componentEditor.ShowDialog(parentWindow) 
     If result = DialogResult.OK Then 
       Return True 
     End If 
     Return False 
   End Function 

   Public Sub Initialize(ByVal dtsComponentMetadata As IDTSComponentMetaData100, ByVal serviceProvider As IServiceProvider) 
     Me.md = dtsComponentMetadata 
   End Sub 
 End Class 

End Namespace

カスタム エディタ

次のコードは、Edit メソッドを呼び出すと表示される Windows フォームの実装を示しています。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime;

namespace Microsoft.Samples.SqlServer.Dts
{
    public partial class SampleComponentUIForm : System.Windows.Forms.Form
    {
        private Connections connections;
        private Variables variables;
        private IDTSComponentMetaData100 metaData;
        private CManagedComponentWrapper designTimeInstance;
        private System.ComponentModel.IContainer components = null;

        public SampleComponentUIForm( Connections cons, Variables vars, IDTSComponentMetaData100 md)
        {
            variables = vars;
            connections = cons;
            metaData = md;
        }

        private void btnOk_Click(object sender, System.EventArgs e)
        {
            if (designTimeInstance == null)
                designTimeInstance = metaData.Instantiate();

            designTimeInstance.SetComponentProperty( "CustomProperty", txtCustomPropertyValue.Text);

            this.Close();
        }

        private void btnCancel_Click(object sender, System.EventArgs e)
        {
            this.Close();
        }
    }
}
Imports System 
Imports System.Drawing 
Imports System.Collections 
Imports System.ComponentModel 
Imports System.Windows.Forms 
Imports System.Data 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime 

Namespace Microsoft.Samples.SqlServer.Dts 

 Public Partial Class SampleComponentUIForm 
  Inherits System.Windows.Forms.Form 
   Private connections As Connections 
   Private variables As Variables 
   Private metaData As IDTSComponentMetaData100 
   Private designTimeInstance As CManagedComponentWrapper 
   Private components As System.ComponentModel.IContainer = Nothing 

   Public Sub New(ByVal cons As Connections, ByVal vars As Variables, ByVal md As IDTSComponentMetaData100) 
     variables = vars 
     connections = cons 
     metaData = md 
   End Sub 

   Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     If designTimeInstance Is Nothing Then 
       designTimeInstance = metaData.Instantiate 
     End If 
     designTimeInstance.SetComponentProperty("CustomProperty", txtCustomPropertyValue.Text) 
     Me.Close 
   End Sub 

   Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     Me.Close 
   End Sub 
 End Class 

End Namespace
Integration Services のアイコン (小) 最新の Integration Services の入手

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

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