Partager via


Présentation du modèle objet du composant Script

S’applique à : SQL Server SSIS Integration Runtime dans Azure Data Factory

Comme expliqué dans Codage et débogage du composant Script, le projet de composant Script contient trois éléments de projet :

  1. L’élément ScriptMain, qui contient la classe ScriptMain dans laquelle vous écrivez votre code. La classe ScriptMain hérite de la classe UserComponent.

  2. L’élément ComponentWrapper, qui contient la classe UserComponent, 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ément ComponentWrapper contient également les classes de collection Connections et Variables.

  3. 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 un 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 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 sur l’une des différentes sorties dans le même ExclusionGroup.

  • Une fonction NextRow pour récupérer la ligne d’entrée suivante et une fonction EndOfRowset 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 base UserComponent. La section suivante fournit des informations supplémentaires sur la classe de base UserComponent.

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éthode PreExecute. Elle peut être appelée plusieurs fois. ProcessInput transfère le traitement à la méthode <inputbuffer>_ProcessInput. La méthode ProcessInput recherche ensuite la fin de la mémoire tampon d’entrée et, si elle la trouve, appelle la méthode remplçable FinishOutputs et la méthode privée MarkOutputsAsFinished. La méthode MarkOutputsAsFinished appelle ensuite SetEndOfRowset 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 effectuer un test pour que EndOfRowset exécute une autre action une fois que toutes les lignes ont été traitées). Appelez <inputbuffer>_ProcessInputRow pour effectuer le traitement de la ligne.

  • 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 propriété <column>_IsNull en écriture seule pour chaque colonne de sortie sélectionnée qui vous permet d’affecter la valeur null à la valeur de colonne.

  • Une méthode AddRow permettant d’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 autre mémoire tampon de données n’est attendue. Une fonction EndOfRowset permet également de déterminer si la mémoire tampon active est la dernière mémoire tampon de données. 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 base UserComponent.

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 avant ProcessInput au moment de l’exécution. La méthode est appelée une seule fois. PrimeOutput transfère le traitement à la méthode CreateNewOutputRows. Puis, si le composant est une source (autrement dit, s’il ne possède pas d’entrée), PrimeOutput appelle la méthode substituable FinishOutputs et la méthode privée MarkOutputsAsFinished. La méthode MarkOutputsAsFinished appelle SetEndOfRowset 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 utiliser CreateNewOutputRows dans une source, mais dans une transformation à sorties asynchrones, vous devez appeler AddRow 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 le 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 disponible uniquement 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 définissez la valeur de la variable de package sur 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);  
  
}  

Voir aussi

Configuration du composant Script dans l’éditeur de composant de script
Codage et débogage du composant Script