2017-06-08 1 views
2

Dans ma tâche de composant de script SSIS (PAS la tâche de script, qui peut être ajoutée à un flux de contrôle, mais la tâche de composant de script ajoutée dans les flux de données) une erreur de manipulation dans la partie de capture d'un bloc try, catch:SSIS - Composant de script - Changer l'icône en fonction des résultats

// No connection was created. Exit gracefully 
bool cancelOnError = false; 
ComponentMetaData.FireError(ErrorCode: 10, SubComponent: "SubComponent", 
Description: "Couldn't set up the connection. This could be because an invalid host was 
provided, or due to a firewall blocking the connection.", HelpFile: "", HelpContext: 0, 
pbCancel: out cancelOnError); 

tout cela fonctionne très bien, la tâche de script attraper l'erreur que je soulève dans mon code. Je peux aussi voir l'erreur dans les journaux:

Error: 0xA at DFT Extract, SubComponent: Couldn't set up the connection. 
This could be because an invalid host was provided, or due to a firewall 
blocking the connection. 

Cependant, l'icône de la tâche est verte, et une tâche suivante je définissais pour traiter les résultats est congédié (il n'y a rien à traiter, bien que, comme cela erreur particulière se produit avant le traitement des données):

Green icons

Le flux de données montre correctement une icône de la croix rouge. Y a-t-il un moyen de changer l'icône sur le composant Script, ou une meilleure façon de simuler (élégamment) une erreur showstopping?

Je trouve this page on Microsoft, montrant la différence entre la tâche de script et des composants de script, qui stipule aussi:

Le composant de script fonctionne comme une partie de la tâche de flux de données et ne pas les résultats du rapport en utilisant l'une de ces Propriétés.

Cela ne m'a pas beaucoup d'espoir, mais j'espère que quelqu'un pourrait avoir un travail autour. Je pense principalement que montrer l'icône verte est quelque peu trompeur lorsque nous piègeons une erreur.

Répondre

0

Pourquoi ne pas simplement changer la valeur cancelonerror true

bool cancelOnError = true; 

Ou vous pouvez utiliser Throw exception méthode

throw new Exception("Couldn't set up the connection. This could be because an invalid host was 
provided, or due to a firewall blocking the connection."); 

Solution

Si votre objectif est d'ignorer les lignes qui n'était pas traité correctement, la meilleure façon est d'ajouter une colonne au OutputBuffer (de type DT_BOOL), et s et cette valeur de la colonne à False s'il y a une erreur, sinon sa valeur doit être True.

Et d'ajouter une division conditionnelle après le composant de script pour filtrer les lignes basées sur cette colonne. Avec une expression similaire:

[FlagColumn] == True 
+0

Merci pour la suggestion. J'ai essayé de régler 'True' avant, mais je n'ai pas vraiment remarqué de différence. J'ai surtout peur que tout ce que j'ai traité correctement ne soit pas envoyé à la sortie (nous récupérons les messages d'une file d'attente, et une fois qu'ils sont en file d'attente, nous ne les verrons plus, assurant ainsi qu'ils passent correctement est crucial pour nous). Cependant, je peux donner un moment à l'exception. Merci pour la suggestion :) – SchmitzIT

+0

@SchmitzIT j'ai ajouté une solution de contournement, il pourrait vous aider, vérifiez ma mise à jour de réponse – Hadi