Bagikan melalui


Memahami Model Objek Komponen Skrip

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

Seperti yang dibahas dalam Coding dan Debugging Komponen Skrip, proyek komponen Skrip berisi tiga item proyek:

  1. Item ScriptMain , yang berisi kelas ScriptMain tempat Anda menulis kode. Kelas ScriptMain mewarisi dari kelas UserComponent .

  2. Item ComponentWrapper , yang berisi kelas UserComponent , instans ScriptComponent yang berisi metode dan properti yang akan Anda gunakan untuk memproses data dan berinteraksi dengan paket. Item ComponentWrapper juga berisi kelas koleksi Koneksi dan Variabel .

  3. Item BufferWrapper , yang berisi kelas yang mewarisi dari ScriptBuffer untuk setiap input dan output, dan properti yang diketik untuk setiap kolom.

Saat Anda menulis kode Anda di item ScriptMain , Anda akan menggunakan objek, metode, dan properti yang dibahas dalam topik ini. Setiap komponen tidak akan menggunakan semua metode yang tercantum di sini; namun, ketika digunakan, mereka digunakan dalam urutan yang ditampilkan.

Kelas ScriptComponent dasar tidak berisi kode implementasi apa pun untuk metode yang dibahas dalam topik ini. Oleh karena itu, tidak perlu, tetapi tidak berbahaya, untuk menambahkan panggilan ke implementasi kelas dasar ke implementasi metode Anda sendiri.

Untuk informasi tentang cara menggunakan metode dan properti kelas ini dalam jenis komponen Skrip tertentu, lihat bagian Contoh Komponen Skrip Tambahan. Contoh topik juga berisi sampel kode lengkap.

Metode AcquireConnections

Sumber dan tujuan umumnya harus tersambung ke sumber data eksternal. Ambil alih AcquireConnections metode ScriptComponent kelas dasar untuk mengambil koneksi atau informasi koneksi dari manajer koneksi yang sesuai.

Contoh berikut mengembalikan System.Data.SqlClient.SqlConnection dari manajer koneksi ADO.NET.

Dim connMgr As IDTSConnectionManager100  
Dim sqlConn As SqlConnection  
  
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)  
  
    connMgr = Me.Connections.MyADONETConnection  
    sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)  
  
End Sub  

Contoh berikut mengembalikan jalur lengkap dan nama file dari Pengelola Sambungan File Datar, lalu membuka file dengan menggunakan System.IO.StreamReader.

Private textReader As StreamReader  
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)  
  
    Dim connMgr As IDTSConnectionManager100 = _  
        Me.Connections.MyFlatFileSrcConnectionManager  
    Dim exportedAddressFile As String = _  
        CType(connMgr.AcquireConnection(Nothing), String)  
    textReader = New StreamReader(exportedAddressFile)  
  
End Sub  

Metode PreExecute

Ambil alih PreExecute metode ScriptComponent kelas dasar setiap kali Anda memiliki pemrosesan yang harus Anda lakukan satu kali hanya sebelum Anda mulai memproses baris data. Misalnya, di tujuan, Anda mungkin ingin mengonfigurasi perintah berparameter yang akan digunakan tujuan untuk menyisipkan setiap baris data ke dalam sumber data.

    Dim sqlConn As SqlConnection  
    Dim sqlCmd As SqlCommand  
    Dim sqlParam As SqlParameter  
...  
    Public Overrides Sub PreExecute()  
  
        sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _  
            "VALUES(@addressid, @city)", sqlConn)  
        sqlParam = New SqlParameter("@addressid", SqlDbType.Int)  
        sqlCmd.Parameters.Add(sqlParam)  
        sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)  
        sqlCmd.Parameters.Add(sqlParam)  
  
    End Sub  
SqlConnection sqlConn;   
SqlCommand sqlCmd;   
SqlParameter sqlParam;   
  
public override void PreExecute()   
{   
  
    sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(@addressid, @city)", sqlConn);   
    sqlParam = new SqlParameter("@addressid", SqlDbType.Int);   
    sqlCmd.Parameters.Add(sqlParam);   
    sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30);   
    sqlCmd.Parameters.Add(sqlParam);   
  
}  

Memproses Input dan Output

Memproses Input

Komponen skrip yang dikonfigurasi sebagai transformasi atau tujuan memiliki satu input.

Apa yang Disediakan Item Proyek BufferWrapper

Untuk setiap input yang telah Anda konfigurasi, item proyek BufferWrapper berisi kelas yang berasal dari ScriptBuffer dan memiliki nama yang sama dengan input. Setiap kelas buffer input berisi properti, fungsi, dan metode berikut:

  • Properti aksesor bernama yang ditik untuk setiap kolom input yang dipilih. Properti ini baca-saja atau baca/tulis tergantung pada Jenis Penggunaan yang ditentukan untuk kolom pada halaman Kolom InputEditor Transformasi Skrip.

  • Kolom_IsNull properti untuk setiap kolom input yang dipilih.<> Properti ini juga baca-saja atau baca/tulis tergantung pada Jenis Penggunaan yang ditentukan untuk kolom.

  • Metode outputbuffer> DirectRowTo< untuk setiap output yang dikonfigurasi. Anda akan menggunakan metode ini saat memfilter baris ke salah satu dari beberapa output dalam ExclusionGroup yang sama.

  • Fungsi NextRow untuk mendapatkan baris input berikutnya, dan fungsi EndOfRowset untuk menentukan apakah buffer data terakhir telah diproses. Anda biasanya tidak memerlukan fungsi-fungsi ini saat menggunakan metode pemrosesan input yang diterapkan di kelas dasar UserComponent . Bagian berikutnya menyediakan informasi selengkapnya tentang kelas dasar UserComponent .

Apa yang Disediakan Item Proyek ComponentWrapper

Item proyek ComponentWrapper berisi kelas bernama UserComponent yang berasal dari ScriptComponent. Kelas ScriptMain tempat Anda menulis kode kustom Anda berasal pada gilirannya dari UserComponent. Kelas UserComponent berisi metode berikut:

  • Implementasi yang ditimpa dari metode ProcessInput . Ini adalah metode yang dipanggil mesin aliran data berikutnya pada durasi setelah metode PreExecute , dan dapat dipanggil beberapa kali. ProcessInput menyerahkan pemrosesan ke <metode inputbuffer>_ProcessInput . Kemudian metode ProcessInput memeriksa akhir buffer input dan, jika akhir buffer telah tercapai, memanggil metode FinishOutputs yang dapat diganti dan metode MarkOutputsAsFinished privat. Metode MarkOutputsAsFinished kemudian memanggil SetEndOfRowset pada buffer output terakhir.

  • Implementasi yang dapat diganti dari <metode inputbuffer>_ProcessInput . Implementasi default ini hanya mengulang setiap baris input dan memanggil <inputbuffer>_ProcessInputRow.

  • Implementasi yang dapat diganti dari <metode inputbuffer>_ProcessInputRow . Implementasi default kosong. Ini adalah metode yang biasanya akan Anda timpa untuk menulis kode pemrosesan data kustom Anda.

Apa yang Harus Dilakukan Kode Kustom Anda

Anda dapat menggunakan metode berikut untuk memproses input di kelas ScriptMain :

  • Ambil alih <inputbuffer>_ProcessInputRow untuk memproses data di setiap baris input saat diteruskan.

  • Ambil alih <inputbuffer>_ProcessInput hanya jika Anda harus melakukan sesuatu yang tambahan saat mengulangi baris input. (Misalnya, Anda harus menguji EndOfRowset untuk mengambil beberapa tindakan lain setelah semua baris diproses.) Panggil <inputbuffer>_ProcessInputRow untuk melakukan pemrosesan baris.

  • Timpa FinishOutputs jika Anda harus melakukan sesuatu pada output sebelum ditutup.

Metode ProcessInput memastikan bahwa metode ini dipanggil pada waktu yang sesuai.

Output Pemrosesan

Komponen skrip yang dikonfigurasi sebagai sumber atau transformasi memiliki satu atau beberapa output.

Apa yang Disediakan Item Proyek BufferWrapper

Untuk setiap output yang telah Anda konfigurasi, item proyek BufferWrapper berisi kelas yang berasal dari ScriptBuffer dan memiliki nama yang sama dengan output. Setiap kelas buffer input berisi properti dan metode berikut:

  • Properti aksesor khusus tulis yang dinamai, ditik untuk setiap kolom output.

  • Kolom khusus <>tulis_IsNull properti untuk setiap kolom output yang dipilih yang bisa Anda gunakan untuk mengatur nilai kolom ke null.

  • Metode AddRow untuk menambahkan baris baru kosong ke buffer output.

  • Metode SetEndOfRowset untuk memberi tahu mesin aliran data bahwa tidak ada lagi buffer data yang diharapkan. Ada juga fungsi EndOfRowset untuk menentukan apakah buffer saat ini adalah buffer data terakhir. Anda umumnya tidak memerlukan fungsi-fungsi ini ketika Anda menggunakan metode pemrosesan input yang diterapkan di kelas dasar UserComponent .

Apa yang Disediakan Item Proyek ComponentWrapper

Item proyek ComponentWrapper berisi kelas bernama UserComponent yang berasal dari ScriptComponent. Kelas ScriptMain tempat Anda menulis kode kustom Anda berasal pada gilirannya dari UserComponent. Kelas UserComponent berisi metode berikut:

  • Implementasi yang ditimpa dari metode PrimeOutput . Mesin aliran data memanggil metode ini sebelum ProcessInput pada durasi, dan hanya dipanggil satu kali. PrimeOutput menyerahkan pemrosesan ke metode CreateNewOutputRows . Kemudian, jika komponen adalah sumber (yaitu, komponen tidak memiliki input), PrimeOutput memanggil metode FinishOutputs yang dapat diganti dan metode MarkOutputsAsFinished privat. Metode MarkOutputsAsFinished memanggil SetEndOfRowset pada buffer output terakhir.

  • Implementasi yang dapat diganti dari metode CreateNewOutputRows . Implementasi default kosong. Ini adalah metode yang biasanya akan Anda timpa untuk menulis kode pemrosesan data kustom Anda.

Apa yang Harus Dilakukan Kode Kustom Anda

Anda dapat menggunakan metode berikut untuk memproses output di kelas ScriptMain :

  • Ganti CreateNewOutputRows hanya saat Anda dapat menambahkan dan mengisi baris output sebelum memproses baris input. Misalnya, Anda dapat menggunakan CreateNewOutputRows di sumber, tetapi dalam transformasi dengan output asinkron, Anda harus memanggil AddRow selama atau setelah pemrosesan data input.

  • Timpa FinishOutputs jika Anda harus melakukan sesuatu pada output sebelum ditutup.

Metode PrimeOutput memastikan bahwa metode ini dipanggil pada waktu yang sesuai.

Metode PostExecute

Ambil alih PostExecute metode ScriptComponent kelas dasar setiap kali Anda memiliki pemrosesan yang harus Anda lakukan satu kali hanya setelah Anda memproses baris data. Misalnya, dalam sumber, Anda mungkin ingin menutup System.Data.SqlClient.SqlDataReader yang telah Anda gunakan untuk memuat data ke dalam aliran data.

Penting

Koleksi ReadWriteVariables hanya tersedia dalam metode PostExecute . Oleh karena itu Anda tidak dapat secara langsung menaikkan nilai variabel paket saat Anda memproses setiap baris data. Sebagai gantinya, tingkatkan nilai variabel lokal, dan atur nilai variabel paket ke nilai variabel lokal dalam metode PostExecute setelah semua data diproses.

Metode ReleaseConnections

Sumber dan tujuan biasanya harus tersambung ke sumber data eksternal. Ambil alih ReleaseConnections metode ScriptComponent kelas dasar untuk menutup dan merilis koneksi yang telah Anda buka sebelumnya dalam AcquireConnections metode .

    Dim connMgr As IDTSConnectionManager100  
...  
    Public Overrides Sub ReleaseConnections()  
  
        connMgr.ReleaseConnection(sqlConn)  
  
    End Sub  
IDTSConnectionManager100 connMgr;  
  
public override void ReleaseConnections()  
{  
  
    connMgr.ReleaseConnection(sqlConn);  
  
}  

Lihat juga

Mengonfigurasi Komponen Skrip di Penyunting Komponen Skrip
Pengodean dan Penelusuran Kesalahan Komponen Skrip