Bagikan melalui


Mengodekan Enumerator Foreach Kustom

Berlaku untuk: Integration Runtime SSIS SQL Server di Azure Data Factory

Setelah Anda membuat kelas yang mewarisi dari ForEachEnumerator kelas dasar, dan menerapkan DtsForEachEnumeratorAttribute atribut ke kelas , Anda harus mengambil alih implementasi properti dan metode kelas dasar untuk menyediakan fungsionalitas kustom Anda.

Untuk sampel enumerator kustom yang berfungsi, lihat Mengembangkan Antarmuka Pengguna untuk Enumerator ForEach Kustom.

Menginisialisasi Enumerator

Anda dapat mengambil InitializeForEachEnumerator alih metode untuk menyimpan referensi ke manajer koneksi yang ditentukan dalam paket, dan untuk menyimpan referensi ke antarmuka peristiwa yang dapat Anda gunakan untuk memunculkan kesalahan, peringatan, dan pesan informasi.

Memvalidasi Enumerator

Anda mengambil Validate alih metode untuk memverifikasi bahwa enumerator dikonfigurasi dengan benar. Jika metode mengembalikan Kegagalan, enumerator dan paket yang berisi enumerator tidak akan dijalankan. Implementasi metode ini khusus untuk setiap enumerator, tetapi jika enumerator bergantung pada Variable objek atau ConnectionManager , Anda harus menambahkan kode untuk memverifikasi bahwa objek ini ada dalam koleksi yang disediakan untuk metode .

Contoh kode berikut menunjukkan implementasi Validate yang memeriksa variabel yang ditentukan dalam properti enumerator.

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  

Mengembalikan Koleksi

Selama eksekusi, ForEachLoop kontainer memanggil GetEnumerator metode enumerator kustom. Dalam metode ini, enumerator membuat dan mengisi koleksi itemnya, lalu mengembalikan koleksi. Kemudian ForEachLoop melakukan iterasi item dalam koleksi, dan menjalankan alur kontrolnya untuk setiap item dalam koleksi.

Contoh berikut menunjukkan implementasi GetEnumerator yang mengembalikan array bilangan bulat acak.

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  

Lihat juga

Membuat Enumerator Foreach Kustom
Mengembangkan Antarmuka Pengguna untuk Enumerator ForEach Kustom