it-swarm.it

Componente script SSIS - Come modificare Output0Buffer

Ho un componente di script che accetta record dalla tabella del database SQL Azure. Lo script richiama quindi un servizio Web, che restituisce il numero di record non riusciti e di successo.

Per tutti i record, vorrei aggiungere il campo Stato che ha "successo" o "errore" e questo ottiene l'output dal componente script.

Quindi registro tali output in un file di testo.

Problema: non sono stato in grado di aggiungere lo stato per ogni record di input poiché la chiamata al servizio Web avviene solo dopo l'esecuzione.

Ho provato questo ma ancora non funziona:

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

Tutto in una trasformazione avviene all'interno di Input0_ProcessInputRow La soluzione sarebbe essenzialmente

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

Potresti essere in grado di eseguire i passaggi di output in PostExecute, CreateNewOutputRows non viene eseguito in Transformation, ma solo negli script di destinazione.

6
JohnDavid

Non sono molto competente in SSIS, ma penso che potresti provare le seguenti idee:

  • vai al componente script e modificalo,
  • vai alla sezione Ingressi e uscite (3a sezione),
  • vai a Output0 - Colonne di output,
  • aggiungi una nuova colonna (dagli un nome e un tipo, diciamo Status - booleano).

Quindi avresti la colonna vuota nell'output e dovrai popolarla con alcuni dati per ciascuna delle righe di input:

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

Ciò ti aiuterà ad aggiungere una colonna Stato alla tabella di output. Spero che questo sia quello che volevi.

3
Marian