Présentation du modèle objet du composant Script
Comme indiqué dans [Codage et débogage du composant script](.. /extension-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md, le projet de composant Script contient trois éléments de projet :
L'élément
ScriptMain
, qui contient la classeScriptMain
dans laquelle vous écrivez votre code. La classeScriptMain
hérite de la classeUserComponent
.L'élément
ComponentWrapper
, qui contient la classeUserComponent
, une instance de ScriptComponent contenant les méthodes et les propriétés qui permettent de traiter les données et d'interagir avec le package. L'élémentComponentWrapper
contient également des classes de collectionConnections
etVariables
.L'élément
BufferWrapper
, qui contient des classes qui héritent de ScriptBuffer pour chaque entrée et sortie, et des propriétés typées pour chaque colonne.
Les objets, méthodes et propriétés présentés dans cette rubrique vous permettent d'écrire du code dans l'élément ScriptMain
. Chaque composant n'utilise pas toutes les méthodes répertoriées ici ; cependant, lorsque ces méthodes sont utilisées, elles le sont dans l'ordre indiqué.
La classe de base ScriptComponent ne contient pas de code d'implémentation pour les méthodes présentées dans cette rubrique. Il est donc inutile, mais sans conséquence, d'ajouter un appel à l'implémentation de la classe de base à votre propre implémentation de la méthode.
Pour plus d’informations sur l’utilisation des méthodes et des propriétés de ces classes dans un type de composant Script particulier, consultez la section Autres exemples de composants Script. Les rubriques d'exemples contiennent également des exemples de code complets.
Méthode AcquireConnections
Généralement, les sources et les destinations doivent se connecter à une source de données externe. Substituez la méthode AcquireConnections de la classe de base ScriptComponent pour extraire la connexion ou les informations de connexion du gestionnaire de connexions approprié.
L'exemple suivant retourne System.Data.SqlClient.SqlConnection
à partir d'un gestionnaire de connexions ADO.NET.
Dim connMgr As IDTSConnectionManager100
Dim sqlConn As SqlConnection
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
connMgr = Me.Connections.MyADONETConnection
sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)
End Sub
L'exemple suivant retourne un chemin d'accès complet et un nom de fichier à partir d'un gestionnaire de connexions de fichiers plats, puis ouvre le fichier à l'aide de System.IO.StreamReader
.
Private textReader As StreamReader
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
Dim connMgr As IDTSConnectionManager100 = _
Me.Connections.MyFlatFileSrcConnectionManager
Dim exportedAddressFile As String = _
CType(connMgr.AcquireConnection(Nothing), String)
textReader = New StreamReader(exportedAddressFile)
End Sub
Méthode PreExecute
Substituez la méthode PreExecute de la classe de base ScriptComponent lorsque vous devez effectuer un traitement une seule fois avant d'entamer le traitement des lignes de données. Par exemple, dans une destination, vous pouvez configurer la commande paramétrable que la destination utilise pour insérer chaque ligne de données dans la source de données.
Dim sqlConn As SqlConnection
Dim sqlCmd As SqlCommand
Dim sqlParam As SqlParameter
...
Public Overrides Sub PreExecute()
sqlCmd = New SqlCommand("INSERT INTO Person.Address2(AddressID, City) " & _
"VALUES(@addressid, @city)", sqlConn)
sqlParam = New SqlParameter("@addressid", SqlDbType.Int)
sqlCmd.Parameters.Add(sqlParam)
sqlParam = New SqlParameter("@city", SqlDbType.NVarChar, 30)
sqlCmd.Parameters.Add(sqlParam)
End Sub
SqlConnection sqlConn;
SqlCommand sqlCmd;
SqlParameter sqlParam;
public override void PreExecute()
{
sqlCmd = new SqlCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(@addressid, @city)", sqlConn);
sqlParam = new SqlParameter("@addressid", SqlDbType.Int);
sqlCmd.Parameters.Add(sqlParam);
sqlParam = new SqlParameter("@city", SqlDbType.NVarChar, 30);
sqlCmd.Parameters.Add(sqlParam);
}
Traitement des entrées et des sorties
Traitement des entrées
Les composants Script configurés en tant que transformations ou destinations possèdent une entrée.
Composants fournis par l'élément de projet BufferWrapper
Pour chaque entrée configurée, l'élément de projet BufferWrapper
contient une classe qui dérive de ScriptBuffer et qui porte le même nom que l'entrée. Chaque classe de mémoire tampon d'entrée contient les propriétés, fonctions et méthodes suivantes :
Des propriétés d'accesseur typées et nommées pour chaque colonne d'entrée sélectionnée. Ces propriétés sont en lecture seule ou en lecture/écriture selon le Type d’utilisation spécifié pour la colonne dans la page Colonnes d’entrée de l’Éditeur de transformation de script.
Une propriété <column>_IsNull pour chaque colonne d’entrée sélectionnée. Cette propriété est également en lecture seule ou en lecture/écriture selon le Type d’utilisation spécifié pour la colonne.
Une méthode DirectRowTo<outputbuffer> pour chaque sortie configurée. Vous utilisez ces méthodes lorsque vous filtrez des lignes vers l'une des multiples sorties dans le même
ExclusionGroup
.Une fonction
NextRow
pour récupérer la ligne d'entrée suivante et une fonctionEndOfRowset
pour déterminer si la dernière mémoire tampon de données a été traitée. Généralement, vous n'avez pas besoin de ces fonctions lorsque vous exécutez les méthodes de traitement d'entrée implémentées dans la classe de baseUserComponent
. La section suivante fournit des informations supplémentaires sur la classe de baseUserComponent
.
Composants fournis par l'élément de projet ComponentWrapper
L'élément de projet ComponentWrapper contient une classe nommée UserComponent
dérivée de ScriptComponent. La classe ScriptMain
dans laquelle vous écrivez votre code personnalisé dérive à son tour de UserComponent
. La classe UserComponent
contient les méthodes suivantes :
Une implémentation substituée de la méthode
ProcessInput
. Il s'agit de la méthode que le moteur de flux de données appelle au moment de l'exécution, juste après la méthodePreExecute
. Elle peut être appelée plusieurs fois.ProcessInput
remet le traitement à la <méthode inputbuffer>_ProcessInput . La méthodeProcessInput
recherche ensuite la fin de la mémoire tampon d'entrée et si elle la trouve, appelle la méthodeFinishOutputs
substituable et la méthodeMarkOutputsAsFinished
privée. Puis, la méthodeMarkOutputsAsFinished
appelleSetEndOfRowset
sur la dernière mémoire tampon de sortie.Une implémentation substituable de la méthode <inputbuffer>_ProcessInput. Cette implémentation par défaut effectue simplement une boucle sur chaque ligne d’entrée et appelle <inputbuffer>_ProcessInputRow.
Une implémentation substituable de la méthode <inputbuffer>_ProcessInputRow. L'implémentation par défaut est vide. Il s'agit normalement de la méthode que vous devez substituer pour écrire votre code de traitement de données personnalisé.
Opérations à effectuer par votre code personnalisé
Vous pouvez utiliser les méthodes suivantes pour traiter l'entrée dans la classe ScriptMain
:
Substituez <inputbuffer>_ProcessInputRow pour traiter les données dans chaque ligne d’entrée lors de leur transfert.
Substituez <inputbuffer>_ProcessInput uniquement si vous devez effectuer une autre opération pendant que vous parcourez les lignes d’entrée. (Par exemple, vous devez tester pour
EndOfRowset
effectuer une autre action une fois que toutes les lignes ont été traitées.) Appelez <inputbuffer>_ProcessInputRow pour effectuer le traitement des lignes.Substituez
FinishOutputs
si vous devez effectuer une opération sur les sorties avant leur fermeture.
La méthode ProcessInput
garantit que ces méthodes sont appelées aux moments appropriés.
Traitement des sorties
Les composants Script configurés en tant que sources ou transformations possèdent une ou plusieurs sorties.
Composants fournis par l'élément de projet BufferWrapper
Pour chaque sortie configurée, l'élément de projet BufferWrapper contient une classe qui dérive de ScriptBuffer et qui porte le même nom que la sortie. Chaque classe de mémoire tampon d'entrée contient les propriétés et méthodes suivantes :
Des propriétés d'accesseur nommées, typées et en écriture seule pour chaque colonne de sortie.
Une colonne> en écriture seule<_IsNull propriété pour chaque colonne de sortie sélectionnée que vous pouvez utiliser pour définir la valeur
null
de colonne sur .Une méthode
AddRow
pour ajouter une ligne vide à la mémoire tampon de sortie.Une méthode
SetEndOfRowset
pour indiquer au moteur de flux de données qu'aucune mémoire tampon de données supplémentaires n'est attendue. Il existe également une fonctionEndOfRowset
pour déterminer si la mémoire tampon active est la dernière mémoire tampon de données. Vous n’avez généralement pas besoin de ces fonctions lorsque vous utilisez les méthodes de traitement d’entrée implémentées dans laUserComponent
classe de base.
Composants fournis par l'élément de projet ComponentWrapper
L'élément de projet ComponentWrapper contient une classe nommée UserComponent
dérivée de ScriptComponent. La classe ScriptMain
dans laquelle vous écrivez votre code personnalisé dérive à son tour de UserComponent
. La classe UserComponent
contient les méthodes suivantes :
Une implémentation substituée de la méthode
PrimeOutput
. Le moteur de flux de données appelle cette méthode avantProcessInput
au moment de l'exécution. La méthode est appelée une seule fois.PrimeOutput
fait appel à la méthodeCreateNewOutputRows
pour effectuer le traitement. Puis, si le composant est une source (autrement dit, le composant ne possède pas d'entrée),PrimeOutput
appelle la méthodeFinishOutputs
substituable et la méthodeMarkOutputsAsFinished
privée. La méthodeMarkOutputsAsFinished
appelleSetEndOfRowset
sur la dernière mémoire tampon de sortie.Une implémentation substituable de la méthode
CreateNewOutputRows
. L'implémentation par défaut est vide. Il s'agit normalement de la méthode que vous devez substituer pour écrire votre code de traitement de données personnalisé.
Opérations à effectuer par votre code personnalisé
Vous pouvez utiliser les méthodes suivantes pour traiter les sorties dans la classe ScriptMain
:
Substituez
CreateNewOutputRows
uniquement lorsque vous pouvez ajouter et remplir des lignes de sortie avant de traiter des lignes d'entrée. Par exemple, vous pouvez utiliserCreateNewOutputRows
dans une source, mais dans une transformation à sorties asynchrones, vous devez appelerAddRow
pendant ou après le traitement des données d'entrée.Substituez
FinishOutputs
si vous devez effectuer une opération sur les sorties avant leur fermeture.
La méthode PrimeOutput
garantit que ces méthodes sont appelées aux moments appropriés.
Méthode PostExecute
Substituez la méthode PostExecute de la classe de base ScriptComponent lorsque vous devez effectuer un traitement une seule fois après avoir traité les lignes de données. Par exemple, dans une source, vous pouvez fermer System.Data.SqlClient.SqlDataReader
qui vous a permis de charger des données dans le flux de données.
Important
La collection de ReadWriteVariables
est uniquement disponible dans la méthode PostExecute
. Par conséquent, vous ne pouvez pas incrémenter directement la valeur d'une variable de package à mesure que vous traitez chaque ligne de données. Incrémentez plutôt la valeur d'une variable locale, puis attribuez à la variable de package la valeur de la variable locale dans la méthode PostExecute
une fois que toutes les données ont été traitées.
Méthode ReleaseConnections
Généralement, les sources et les destinations doivent se connecter à une source de données externe. Substituez la méthode ReleaseConnections de la classe de base ScriptComponent pour fermer et libérer la connexion que vous avez ouverte précédemment dans la méthode AcquireConnections.
Dim connMgr As IDTSConnectionManager100
...
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
IDTSConnectionManager100 connMgr;
public override void ReleaseConnections()
{
connMgr.ReleaseConnection(sqlConn);
}
Rester à jour avec Integration Services
Pour obtenir les derniers téléchargements, articles, exemples et vidéos de Microsoft, ainsi que les solutions sélectionnées de la communauté, visitez la page Integration Services sur MSDN :
Visiter la page Integration Services sur MSDN
Pour recevoir une notification automatique de ces mises à jour, abonnez-vous aux flux RSS disponibles sur la page.
Voir aussi
Configuration du composant Script dans l’éditeur de composant script [Codage et débogage du composant script](.. /extension-packages-scripting/data-flow-script-component/coding-and-debugging-the-script-component.md