Komponen Skrip SSIS - Cara mengubah Output0Buffer

10

Saya sudah komponen skrip yang menerima catatan dari tabel database SQL Azure. Script kemudian memanggil layanan web, yang mengembalikan jumlah catatan yang gagal dan sukses.

Untuk semua catatan, saya ingin menambahkan bidang Status yang memiliki "sukses" atau "gagal" dan ini mendapat output dari komponen skrip.

Saya kemudian mencatat output tersebut ke file teks.

Masalah: Saya tidak dapat menambahkan status untuk setiap catatan input karena panggilan layanan web hanya terjadi pada eksekusi posting.

Saya mencoba ini tetapi masih tidak berhasil:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
         listOfData.Add(new ClockData 
         {
             TimeClockID=Row.TimeClockID,
             PersonID=Row.EmployeeCode,
             LocationCode=Row.ClockInServiceContextID,
             ClockInDateTime=Row.ClockInDateTime,
             ClockOutDateTime=Row.ClockOutDateTime

         });
 }

 public override void CreateNewOutputRows()
 {
     MessageBox.Show("Test CreateNewOutputRows");
     MessageBox.Show(listOfData.Count.ToString());
     foreach (var item in listOfData)
     {
         Output0Buffer.AddRow();
         Output0Buffer.EmployeeCode = item.PersonID;
         MessageBox.Show(item.PersonID);
     }
 }
flybyte
sumber
1
Mengapa Anda tidak dapat melakukan panggilan layanan web selama proses masuk? Semua data telah turun ke saluran begitu keluar dari metode itu. Anda mengumpulkan data dalam variabel lokal Anda tetapi pada titik ini seperti memegang gambar mobil yang baru saja melaju pergi - ya, seperti itulah kelihatannya tetapi tidak kembali
billinkc
@flybyte: ada yang berguna dalam jawaban saya?
Marian

Jawaban:

6

Segala sesuatu dalam Transformasi dilakukan dalam Input0_ProcessInputRow Solusinya pada dasarnya

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
         listOfData.Add(new ClockData 
         {
             TimeClockID=Row.TimeClockID,
             PersonID=Row.EmployeeCode,
             LocationCode=Row.ClockInServiceContextID,
             ClockInDateTime=Row.ClockInDateTime,
             ClockOutDateTime=Row.ClockOutDateTime
         });
         Output0Buffer.AddRow();
         Output0Buffer.EmployeeCode = item.PersonID;
         MessageBox.Show(item.PersonID);
}

Anda mungkin dapat melakukan langkah-langkah output di PostExecute, CreateNewOutputRows tidak berjalan di Transformasi, hanya di skrip Tujuan.

John David
sumber
3

Saya tidak terlalu mahir dalam SSIS, tetapi saya pikir Anda dapat mencoba ide-ide berikut:

  • buka komponen skrip dan edit,
  • pergi ke bagian Input dan Output (bagian 3),
  • pergi ke Output0 - Output kolom,
  • tambahkan kolom baru (berikan nama dan jenis, misalkan Status - boolean).

Maka Anda akan memiliki kolom kosong untuk output Anda dan Anda perlu mengisinya dengan beberapa data untuk setiap baris input:

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    Row.Status = IIf(String.IsNullOrEmpty(rowValues.GetValue(1).ToString()), 0, 1)

Ini akan membantu Anda menambahkan kolom Status ke tabel output Anda. Semoga ini yang Anda inginkan.

Marian
sumber