web-dev-qa-db-fra.com

Composant de script SSIS - Comment modifier le Output0Buffer

J'ai un composant de script qui accepte les enregistrements de la table de base de données SQL Azure. Le script appelle ensuite un service Web, qui renvoie le nombre d'enregistrements ayant échoué et réussi.

Pour tous les enregistrements, je voudrais ajouter le champ Statut qui a soit "succès" ou "échec" et cela obtient la sortie du composant de script.

Je connecte ensuite ces résultats dans un fichier texte.

Problème: je ne suis pas en mesure d'ajouter le statut de chaque enregistrement d'entrée car l'appel de service Web ne se produit qu'à la post-exécution.

J'ai essayé mais ça ne marche toujours pas:

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

Tout dans une transformation se fait dans Input0_ProcessInputRow La solution serait essentiellement

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

Vous pourrez peut-être effectuer les étapes de sortie dans PostExecute, CreateNewOutputRows n'est pas exécuté dans Transformation, uniquement dans les scripts de destination.

6
JohnDavid

Je ne suis pas très compétent en SSIS, mais je pense que vous pourriez essayer les idées suivantes:

  • allez dans le composant de script et éditez-le,
  • allez à la section Entrées et sorties (3e section),
  • allez à Output0 - Colonnes de sortie,
  • ajoutez une nouvelle colonne (donnez-lui un nom et un type, disons Status - booléen).

Ensuite, vous auriez la colonne vide à votre sortie et vous devrez la remplir avec des données pour chacune des lignes d'entrée:

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

Cela vous aidera à ajouter une colonne Statut à votre tableau de sortie. J'espère que c'est ce que vous vouliez.

3
Marian