it-swarm.com.de

SSIS-Skriptkomponente - So ändern Sie den Output0Buffer

Ich habe eine Skriptkomponente, die Datensätze aus der SQL Azure-Datenbanktabelle akzeptiert. Das Skript ruft dann einen Webdienst auf, der die Anzahl der fehlgeschlagenen und erfolgreichen Datensätze zurückgibt.

Für alle Datensätze möchte ich das Statusfeld hinzufügen, das entweder "Erfolg" oder "Fehler" hat und das von der Skriptkomponente ausgegeben wird.

Ich logge dann diese Ausgabe in eine Textdatei ein.

Problem: Ich konnte nicht für jeden Eingabedatensatz den Status hinzufügen, da der Webdienstaufruf nur nach der Ausführung erfolgt.

Ich habe es versucht, aber es funktioniert immer noch nicht:

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

Alles in einer Transformation wird in Input0_ProcessInputRow ausgeführt. Die Lösung wäre im Wesentlichen

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

Möglicherweise können Sie die Ausgabeschritte in PostExecute ausführen. CreateNewOutputRows wird nicht in Transformation ausgeführt, sondern nur in Zielskripten.

6
JohnDavid

Ich beherrsche SSIS nicht sehr gut, aber ich denke, Sie könnten die folgenden Ideen ausprobieren:

  • gehen Sie zur Skriptkomponente und bearbeiten Sie sie.
  • gehen Sie zu Abschnitt Ein- und Ausgänge (3. Abschnitt).
  • gehe zu Output0 - Ausgabespalten,
  • fügen Sie eine neue Spalte hinzu (geben Sie einen Namen und einen Typ ein, sagen wir Status - boolean).

Dann hätten Sie die leere Spalte für Ihre Ausgabe und müssen sie mit einigen Daten für jede der Eingabezeilen füllen:

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

Auf diese Weise können Sie Ihrer Ausgabetabelle eine Statusspalte hinzufügen. Hoffe das ist was du wolltest.

3
Marian