SSIS Komut Dosyası Bileşeni - Output0Buffer nasıl değiştirilir


10

SQL Azure veritabanı tablosundan kayıtları kabul eden bir komut dosyası bileşenim var. Komut dosyası daha sonra başarısız ve başarılı kayıtların sayısını döndüren bir web hizmetini çağırır.

Tüm kayıtlar için, "başarılı" veya "başarısız" olan Durum alanını eklemek istiyorum ve bu komut dosyası bileşeninden çıktı alır.

Daha sonra bu çıktıyı bir metin dosyasına kaydederim.

Sorun: Web hizmeti çağrısı yalnızca yürütme sonrasında gerçekleştiğinden, her giriş kaydı için durum ekleyemiyorum.

Bunu denedim ama hala çalışmıyor:

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);
     }
 }

1
İşlem girişleri sırasında neden web hizmeti çağrısı yapamıyorsunuz? Tüm veriler, bu yöntemden çıktıktan sonra zaten boru hattından geçti. Yerel değişkeninizde veri biriktiriyorsunuz, ancak bu noktada sadece uzaklaşan bir arabanın resmini tutmak gibi-evet, işte böyle görünüyordu ama geri gelmiyor
billinkc

@flybyte: cevabımda faydalı bir şey var mı?
Marian

Yanıtlar:


6

Bir Dönüşümdeki her şey Input0_ProcessInputRow içinde yapılır.

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);
}

PostExecute, CreateNewOutputRows içinde çıktı adımlarını Dönüşüm'de değil, yalnızca Hedef komut dosyalarında çalıştırılabilir.


3

SSIS konusunda çok yetkin değilim, ancak aşağıdaki fikirleri deneyebileceğinizi düşünüyorum:

  • kod bileşenine gidin ve düzenleyin,
  • Girişler ve Çıkışlar bölümüne gidin (3. bölüm),
  • Çıktı0 - Çıktı sütunlarına gidin,
  • yeni bir sütun ekleyin (ona bir ad ve tür verin, diyelim ki Durum - boole).

Ardından çıktınızda boş bir sütun olur ve bunu her giriş satırı için bazı verilerle doldurmanız gerekir:

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

Bu, çıktı tablonuza bir Durum sütunu eklemenize yardımcı olur. Umarım istediğin budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.