Компонент сценарію SSIS - Як змінити Output0Buffer


10

У мене є компонент сценарію, який приймає записи з таблиці бази даних SQL Azure. Потім скрипт викликає веб-службу, яка повертає кількість невдалих та успішних записів.

Для всіх записів я хотів би додати поле Статус, яке має або "успіх", або "провал", і це отримує вихід із компонента сценарію.

Потім я реєструю ці результати у текстовому файлі.

Проблема: мені не вдалося додати статус для кожного запису вводу, оскільки виклик веб-служби відбувається лише після виконання повідомлення.

Я спробував це, але все ще не працює:

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
Чому ви не можете виконати виклик веб-служби під час входу в процес? Всі дані вже вийшли з конвеєра, як тільки вони вийшли з цього методу. Ви накопичуєте дані у вашій місцевій змінній, але в цей момент це ніби тримає фотографію автомобіля, який щойно від’їхав - так, це виглядало, але воно не повертається
billinkc

@flybyte: щось корисне у моїй відповіді?
Маріан

Відповіді:


6

Все в Трансформації робиться в межах Input0_ProcessInputRow Рішення по суті було б

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 не запускається в Transformation, лише в сценаріях призначення.


3

Я не дуже досвідчений в SSIS, але думаю, що ви можете спробувати наступні ідеї:

  • перейдіть до компонента сценарію та відредагуйте його,
  • перейти до розділу "Входи та результати" (3-й розділ),
  • перейти до Output0 - Вихідні стовпці,
  • додайте новий стовпець (дайте ім’я та тип, скажімо, статус - булевий).

Тоді у вас буде порожній стовпець для виводу, і вам потрібно буде заповнити його деякими даними для кожного з рядків введення:

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

Це допоможе вам додати стовпець Статус у таблицю виводу. Сподіваюсь, що це ви хотіли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.