次の方法で共有


カスタム Foreach 列挙子のコーディング

ForEachEnumerator 基本クラスを継承するクラスを作成し、DtsForEachEnumeratorAttribute 属性をそのクラスに適用したら、基本クラスのプロパティとメソッドの実装をオーバーライドして、カスタム機能を提供する必要があります。

カスタム列挙子の実際のサンプルについては、Codeplex にある Integration Services のサンプルを参照してください。

列挙子の初期化

InitializeForEachEnumerator メソッドをオーバーライドして、パッケージで定義されている接続マネージャーへの参照と、エラー、警告、および情報メッセージを発生させるために使用できるイベント インターフェイスへの参照をキャッシュすることができます。

列挙子の検証

Validate メソッドをオーバーライドして、列挙子が正しく構成されているかどうかを検証します。メソッドの Failure を返す場合、列挙子および列挙子を含むパッケージは実行されません。このメソッドの実装方法は列挙子ごとに異なりますが、列挙子が Variable オブジェクトまたは ConnectionManager オブジェクトに依存する場合は、メソッドに渡されたコレクション内に、これらのオブジェクトが存在することを検証するためのコードを追加する必要があります。

次のコード例では、列挙子のプロパティで指定された変数を確認するために Validate を実装する方法を示します。

private string variableNameValue;

public string VariableName
{
    get{ return this.variableNameValue; }
    set{ this.variableNameValue = value; }
}

public override DTSExecResult Validate(Connections connections, VariableDispenser variableDispenser, IDTSInfoEvents infoEvents, IDTSLogging log)
{
    if (!variableDispenser.Contains(this.variableNameValue))
    {
        infoEvents.FireError(0, "MyEnumerator", "The Variable " + this.variableNameValue + " does not exist in the collection.", "", 0);
            return DTSExecResult.Failure;
    }
    return DTSExecResult.Success;
}
Private variableNameValue As String
 
Public Property VariableName() As String
    Get 
         Return Me.variableNameValue
    End Get
    Set (ByVal Value As String) 
         Me.variableNameValue = value
    End Set
End Property
 
Public Overrides Function Validate(ByVal connections As Connections, ByVal variableDispenser As VariableDispenser, ByVal infoEvents As IDTSInfoEvents, ByVal log As IDTSLogging) As DTSExecResult
    If Not variableDispenser.Contains(Me.variableNameValue) Then
        infoEvents.FireError(0, "MyEnumerator", "The Variable " + Me.variableNameValue + " does not exist in the collection.", "", 0)
            Return DTSExecResult.Failure
    End If
    Return DTSExecResult.Success
End Function

コレクションを返す処理

実行中は、ForEachLoop コンテナーが、カスタム列挙子の GetEnumerator メソッドを呼び出します。このメソッドでは、列挙子はアイテムのコレクションを作成し、値を設定して返します。次に、ForEachLoop はコレクション内のアイテムを繰り返し、各アイテムの制御フローを実行します。

次に、ランダムな整数の配列を返す GetEnumerator の実装例を示します。

public override object GetEnumerator()
{
    ArrayList numbers = new ArrayList();

    Random randomNumber = new Random(DateTime.Now);

    for( int x=0; x < 100; x++ )
        numbers.Add( randomNumber.Next());

    return numbers;
}
Public Overrides Function GetEnumerator() As Object
    Dim numbers As ArrayList =  New ArrayList() 
 
    Dim randomNumber As Random =  New Random(DateTime.Now) 
 
        Dim x As Integer
        For  x = 0 To  100- 1  Step  x + 1
        numbers.Add(randomNumber.Next())
        Next
 
    Return numbers
End Function
Integration Services のアイコン (小) 最新の Integration Services の入手

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

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