SSIS de Flux de données de tâche de script de gestion d'erreur
J'ai une tâche de script qui effectue des transformations dans le milieu de la SSIS de flux de données. Si le script ne parvient pas (disons qu'il essaie de convertir alpha numérique) j'ai besoin que ça s'arrête avec un " échec de l'état et retourner au menu principal de colis, puis utiliser la Tâche de Flux de données Gestionnaire d'Événement OnError de fermer correctement.
Pour le moment je trouve que la tâche de script dans le flux de données renvoie une .net popup d'erreur qui, je dois alors clair. J'ai essayé un Try Catch à travers le code qui semble arrêter le débogage fenêtre qui apparaît, mais je n'arrive pas à l'obtenir pour quitter le script avec un 'état d'échec" qui sera la cause de l'emballage à l'échec. Le Dts.TaskResult = Dts.Résultats.L'échec ne semble pas être valide dans les tâches de flux de données. Pour le moment, je suis en train d'essayer ceci:
Catch e As System.Exception
Me.ComponentMetaData.FireError(-1, "", "Error: ", e.Message, 1, True)
While Not e.InnerException Is Nothing
e = e.InnerException
Me.ComponentMetaData.FireError(-1, "", "InnerException: ", e.Message, 1, True)
End While
Exit Sub
End Try
... mais tout cela n'est ignorer la mauvaise ligne. Le flux de données se poursuit. Le problème est d'obtenir à la sortie comme "échoué" de sorte que le onError erreur de gestionnaire d'événement dans le paquet est déclenchée.
Toutes les suggestions reçues avec reconnaissance.
Glenn
OriginalL'auteur Glenn M | 2009-09-29
Vous devez vous connecter pour publier un commentaire.
Script Transformations n'ont pas les mêmes caractéristiques pour le retour de la réussite ou de l'échec. Vous pouvez forcer une erreur en utilisant ce code:
Fondamentalement, l'objet d'Erreur (fonction? méthode? quoi que!) vous permettra de simuler une erreur. Ce qui signifie, vous pouvez rendre le paquet d'erreur avec ce code.
Vous avez raison que la suppression d'un bloc Try Catch permettra d'échecs pour échouent automatiquement. Je suis tombé sur cette question il y a 1 mois et est venu à la même conclusion. Je suis venu à la solution de premier en forçant une erreur dans le bloc Try Catch. Ensuite, j'ai ajouté une erreur dans le bloc Catch. Dès que je l'ai obtenu à la force de l'échec, j'ai réalisé que le problème était le Try Catch bloquer complètement. Laissez SSIS gérer l'exception au lieu de traiter vous-même.
OriginalL'auteur Registered User
Rétrospectivement, l'erreur de division par zéro n'est pas nécessaire.
Dans ma solution actuelle, je suis à la capture de l'erreur, puis de faire un FireError, puis de réimplanter la gestion des exceptions, comme ceci:
Cela fonctionne car il est contenu dans un Script d'origine, et également de travailler dans une Transformation Script de fournir le flux de données a été mis en échec après 1 erreur. Si non, le script serait nécessaire de mettre en œuvre une sortie d'erreur de chemin d'accès qui, franchement, je n'ai pas de temps pour...
OriginalL'auteur Stuart Steedman
J'ai cherché pendant un certain temps pour la réponse à cette question. La popup d'erreur est trop gênant pour moi! Pour éviter cela, une "simple" solution (hack) est-ce:
Plutôt que de jeter une erreur après l' .FireError, créer un nouveau DT_UI1 sortie de colonne dans la transformation de script, par exemple "ValidationColumn", et le mettre à 1 ou à 0 (Pas de Booléen pour des raisons qui deviendront claires).
Immédiatement après le composant de script, ajouter une colonne dérivée de la transformation et de remplacer le ValidationColumn avec la formule suivante: 1/ValidationColumn. (Cela ne fonctionne pas avec l'opérateur Booléen). Ceci, bien sûr, generateds une erreur de division par zéro, et (à l'aide du réglage par défaut) l'échec de la transformation de la colonne dérivée et donc immédiatement le composant de flux de données. Voila!
Le journal d'erreur a l'origine de la validation du message d'échec de la .FireError, immédiatement suivie par une erreur de division par zéro.
Cela peut être un hack, mais jusqu'à ce que quelqu'un arrive avec une meilleure idée...
BTW, j'utilise ceci pour vérifier que les fichiers Excel d'avoir le bon en-têtes dans le bon lieu (ou des lieux alternatifs), en conjonction avec l'aide de la société IMEX=1, afin de charger 2 ou plus de la colonne de variations à l'aide d'un flux de données unique...
OriginalL'auteur Stuart Steedman
Qui suit est une tâche de script que j'ai créé à l'intérieur d'une boucle. Ce n'est pas une réponse directe à votre question, mais l'idée générale de l'aide.
La tâche de script est conservé à l'intérieur d'un conteneur de séquence. Et la séquence du conteneur
variable
nomméPropagate
est définie comme faux. Aussi, pour lasequence container
laMaximumErrorCount
propriété est définie comme égale à zéro. Ainsi, lorsqu'une erreur se produire à l'intérieur de la séquence de conteneur, il est indiqué en rouge, événement OnError de feu, mais la boucle est poursuivie. Il est important de créer un événement onerror gestionnaire pour le conteneur de séquence pour que cela fonctionne.À l'intérieur de la tâche de script, c'est avec force a échoué à l'intérieur de
catch
bloc (par définition de la tâche résultat que Échec). Aussi le message d'exception est stocké dans une variable pour le stockage dans l'erreur de la table de journalisation. Cette erreur d'insertion de données se produit à partir de l'événement OnError gestionnaire (mentionné ci-dessus) tâche d'exécution sql.Consulter: MSDN - ScriptObjectModel.TaskResult Propriété
Le bloc catch à l'intérieur de la tâche de script ressemble à l'un de ceux énumérés ci-dessous.
Flux De Contrôle
OriginalL'auteur Lijo