it-swarm-eu.dev

Komponenta skriptu SSIS - Jak upravit Output0Buffer

Mám skriptovou komponentu, která přijímá záznamy z databázové tabulky SQL Azure. Skript poté vyvolá webovou službu, která vrací počet neúspěšných a úspěšných záznamů.

Pro všechny záznamy bych chtěl přidat pole Stav, které má buď „úspěch“ nebo „selhání“, a tím se získá výstup ze komponenty skriptu.

Poté tyto výstupy přihlásím do textového souboru.

Problém: Nebyl jsem schopen přidat stav pro každý vstupní záznam, protože volání webové služby se děje pouze po spuštění.

Zkusil jsem to, ale stále nefunguje:

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

Všechno v transformaci se provádí v rámci Input0_ProcessInputRow. Řešení by v zásadě bylo

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

Pravděpodobně budete moci provést výstupní kroky v PostExecute, CreateNewOutputRows se nespustí v transformaci, pouze v cílových skriptech.

6
JohnDavid

Nejsem příliš zdatný v SSIS, ale myslím, že byste mohli vyzkoušet následující myšlenky:

  • přejděte na komponentu skriptu a upravte ji,
  • přejděte do sekce Vstupy a výstupy (3. sekce),
  • přejít na Output0 - Výstupní sloupce,
  • přidejte nový sloupec (pojmenujte a napište název, řekněme Status - boolean).

Pak byste měli mít na výstupu prázdný sloupec a budete jej muset naplnit některými daty pro každý ze vstupních řádků:

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

To vám pomůže přidat sloupec Stav do výstupní tabulky. Doufám, že to je to, co jste chtěli.

3
Marian