カスタム Foreach 列挙子の作成
カスタム foreach 列挙子の作成手順は、Integration Services の他のカスタム オブジェクトの作成手順と同様です。
基本クラスを継承する新しいクラスを作成します。foreach 列挙子用の基本クラスは ForEachEnumerator です。
クラスに、オブジェクトの種類を識別する属性を適用します。foreach 列挙子用の属性は DtsForEachEnumeratorAttribute です。
基本クラスのメソッドとプロパティの実装をオーバーライドします。foreach 列挙子で、最も重要なのは、GetEnumerator メソッドです。
必要に応じて、カスタム ユーザー インターフェイスを開発します。その場合、foreach 列挙子では、IDTSForEachEnumeratorUI インターフェイスを実装するクラスが必要です。
カスタム列挙子は、ForEachLoop コンテナーによってホストされます。実行時は、ForEachLoop コンテナーが、カスタム列挙子の GetEnumerator メソッドを呼び出します。カスタム列挙子は、ArrayList などの IEnumerable インターフェイスを実装するオブジェクトを返します。次に、ForEachLoop はコレクション内の各要素を繰り返し処理し、ユーザー定義変数を介して現在の要素の値を制御フローに渡し、コンテナーの制御フローを実行します。
カスタム列挙子の実際のサンプルについては、Codeplex にある Integration Services のサンプルを参照してください。
カスタム ForEach 列挙子の概要
プロジェクトおよびクラスの作成
すべてのマネージ foreach 列挙子は ForEachEnumerator 基本クラスから派生するため、カスタム foreach 列挙子を作成するには、最初に任意のマネージ プログラミング言語でクラス ライブラリ プロジェクトを作成し、基本クラスを継承するクラスを作成します。この派生クラスで、基本クラスのメソッドとプロパティをオーバーライドして、カスタム機能を実装します。
同じソリューション内に、もう 1 つのクラス ライブラリ プロジェクトをカスタム ユーザー インターフェイス用に作成します。配置を容易にするため、ユーザー インターフェイス用に別個のアセンブリを使用することをお勧めします。そうすれば、foreach 列挙子やそのユーザー インターフェイスの更新や再配置を個別に行うことができます。
どちらのプロジェクトも、アセンブリに署名するよう構成します。アセンブリは、厳密な名前のキー ファイルを使用して、ビルド時に生成されます。
DtsForEachEnumerator 属性の適用
作成したクラスに DtsForEachEnumeratorAttribute 属性を適用して、そのクラスが foreach 列挙子として識別されるようにします。この属性は、foreach 列挙子の名前や説明など、デザイン時の情報を表します。Name プロパティは、[Foreach ループ エディター] ダイアログ ボックスの [コレクション] タブにある使用可能な列挙子のドロップダウン リストに表示されます。
UITypeName プロパティを使用して、foreach 列挙子をそのカスタム ユーザー インターフェイスにリンクします。このプロパティに必要な公開キー トークンを取得するには、sn.exe -t を使用して、ユーザー インターフェイス アセンブリへの署名に使用するキー ペア (.snk) ファイルから公開キー トークンを表示します。
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Namespace Microsoft.Samples.SqlServer.Dts
<DtsForEachEnumerator(DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")> _
Public Class MyEnumerator
Inherits ForEachEnumerator
'Insert code here.
End Class
End Namespace
using System;
using Microsoft.SqlServer.Dts.Runtime;
namespace Microsoft.Samples.SqlServer.Dts
{
[DtsForEachEnumerator( DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")]
public class MyEnumerator : ForEachEnumerator
{
//Insert code here.
}
}
カスタム列挙子の作成、配置、およびデバッグ
Integration Services でカスタム foreach 列挙子を作成、配置、およびデバッグする手順は、他の種類のカスタム オブジェクトで必要な手順とほとんど同様です。詳細については、「カスタム オブジェクトのビルド、配置、およびデバッグ」を参照してください。
|