Компонент скрипта SSIS - как изменить Output0Buffer

У меня есть компонент скрипта, который принимает записи из таблицы базы данных SQL Azure. Затем скрипт вызывает веб-службу, которая возвращает количество неудачных и успешных записей.

Для всех записей я хотел бы добавить поле «Состояние», которое имеет «успех» или «сбой», и это получается из компонента сценария.

Затем я записываю эти выходные данные в текстовый файл.

Проблема: Я не смог добавить статус для каждого входного документа, так как вызов веб-службы происходит только при выполнении post.

Я пробовал это, но все еще не работает:

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);
     }
 }
10 голосов | спросил flybyte 22 +04002011-10-22T07:39:05+04:00312011bEurope/MoscowSat, 22 Oct 2011 07:39:05 +0400 2011, 07:39:05

2 ответа


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, только в сценариях назначения.

ответил JohnDavid 9 J000000Tuesday13 2013, 00:14:45
3

Я не очень разбираюсь в SSIS, но думаю, что вы могли бы попробовать следующие идеи:

  • перейдите к компоненту скрипта и отредактируйте его,
  • перейти к разделу «Входы и выходы» (3-й раздел),
  • перейти к Output0 - Вывести столбцы,
  • добавьте новый столбец (дайте ему имя и тип, скажем, Status - boolean).

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

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

Это поможет вам добавить столбец статуса в таблицу вывода. Надеюсь, это то, что вы хотели.

ответил Marian 23 +04002011-10-23T15:42:41+04:00312011bEurope/MoscowSun, 23 Oct 2011 15:42:41 +0400 2011, 15:42:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132