Codage et débogage de la tâche de script

Après avoir configuré la tâche de script dans l'éditeur de tâche de script, vous pouvez écrire votre code personnalisé dans l'environnement de développement de tâche de script.

Environnement de développement de tâche de script

La tâche de script utilise Microsoft Visual Studio Tools for Applications (VSTA) comme environnement de développement du script proprement dit.

Le code de script est écrit dans Microsoft Visual Basic ou Microsoft Visual C#. Vous pouvez spécifier le langage de script en définissant la propriété ScriptLanguage dans l'éditeur de tâche de script. Si vous préférez utiliser un autre langage de programmation, vous pouvez développer un assembly personnalisé dans le langage de votre choix et appeler ses fonctionnalités à partir du code inclus dans la de script.

Le script que vous créez dans la tâche de script est stocké dans la définition du package. Aucun fichier de script distinct n'est créé. Par conséquent, l'utilisation de la tâche de script n'affecte pas le déploiement de package.

[!REMARQUE]

Lorsque vous concevez le package et déboguez le script, le code de script est écrit temporairement dans un fichier projet. Étant donné que le stockage d'informations sensibles dans un fichier représente un risque potentiel en termes de sécurité, nous vous recommandons de ne pas inclure d'informations sensibles, telles que des mots de passe, dans le code de script.

Par défaut, Option Strict est désactivé dans l'environnement de développement intégré.

Structure du projet de tâche de script

Lorsque vous créez ou modifiez le script contenu dans une tâche de script, VSTA ouvre un nouveau projet vide ou rouvre le projet existant. La création de ce projet VSTA n'affecte pas le déploiement du package étant donné que le projet est enregistré à l'intérieur du fichier de package ; la tâche de script ne crée pas de fichiers supplémentaires.

Éléments et classes du projet de tâche de script

Par défaut, le projet de tâche de script affiché dans la fenêtre Explorateur de projets VSTA contient un seul élément, ScriptMain. L'élément ScriptMain contient à son tour une classe unique, également appelée ScriptMain. Les éléments de code inclus dans la classe varient selon le langage de programmation sélectionné pour la tâche de script :

  • Lorsque la tâche de script est configurée pour le langage de programmation Visual Basic 2010, la classe ScriptMain possède une sous-routine publique, Main. La sous-routine ScriptMain.Main est la méthode appelée par le runtime lorsque vous exécutez votre tâche de script.

    Par défaut, le seul code figurant dans la sous-routine Main d'un nouveau script est la ligne Dts.TaskResult = ScriptResults.Success. Cette ligne informe le runtime que la tâche a été menée à bien. La propriété Dts.TaskResult est examinée dans Retour de résultats de la tâche de script.

  • Lorsque la tâche de script est configurée pour le langage de programmation Visual C#, la classe ScriptMain possède une méthode publique, Main. La méthode est appelée lors de l'exécution de la tâche de script.

    Par défaut, la méthode Main inclut la ligne Dts.TaskResult = (int)ScriptResults.Success. Cette ligne informe le runtime que la tâche a été menée à bien.

L'élément ScriptMain peut contenir d'autres classes que la classe ScriptMain. La tâche de script ne peut accéder qu'aux classes qu'elle héberge.

Par défaut, l'élément de projet ScriptMain contient le code généré automatiquement suivant : Le modèle de code fournit également une vue d'ensemble de la tâche de script, ainsi que des informations supplémentaires sur la récupération et la manipulation des objets SSIS, tels que les variables, les événements et les connexions.

' Microsoft SQL Server Integration Services Script Task
' Write scripts using Microsoft Visual Basic 2008.
' The ScriptMain is the entry point class of the script.

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime.VSTAProxy

<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
Partial Class ScriptMain

Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup

End Sub

Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
Try
' Unlock variables from the read-only and read-write variable collection properties
If (Dts.Variables.Count <> 0) Then
Dts.Variables.Unlock()
End If
Catch ex As Exception
        End Try
End Sub

Enum ScriptResults
Success = DTSExecResult.Success
Failure = DTSExecResult.Failure
End Enum


' The execution engine calls this method when the task executes.
' To access the object model, use the Dts property. Connections, variables, events,
' and logging features are available as members of the Dts property as shown in the following examples.
'
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)
'
' To use the connections collection use something like the following:
' ConnectionManager cm = Dts.Connections.Add("OLEDB")
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"
'
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.
' 
' To open Help, press F1.

Public Sub Main()
'
' Add your code here
'
Dts.TaskResult = ScriptResults.Success
End Sub

End Class
/*
   Microsoft SQL Server Integration Services Script Task
   Write scripts using Microsoft Visual C# 2008.
   The ScriptMain is the entry point class of the script.
*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime.VSTAProxy;
using System.Windows.Forms;

namespace ST_1bcfdbad36d94f8ba9f23a10375abe53.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain
    {
        private void ScriptMain_Startup(object sender, EventArgs e)
        {

        }

        private void ScriptMain_Shutdown(object sender, EventArgs e)
        {
            try
            {
                // Unlock variables from the read-only and read-write variable collection properties
                if (Dts.Variables.Count != 0)
                {
                    Dts.Variables.Unlock();
                }
            }
            catch
            {
            }
        }

        #region VSTA generated code
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ScriptMain_Startup);
            this.Shutdown += new System.EventHandler(ScriptMain_Shutdown);
        }
        enum ScriptResults
        {
            Success = DTSExecResult.Success,
            Failure = DTSExecResult.Failure
        };

        #endregion

        /*
The execution engine calls this method when the task executes.
To access the object model, use the Dts property. Connections, variables, events,
and logging features are available as members of the Dts property as shown in the following examples.

To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;
To post a log entry, call Dts.Log("This is my log text", 999, null);
To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);

To use the connections collection use something like the following:
ConnectionManager cm = Dts.Connections.Add("OLEDB");
cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";

Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

To open Help, press F1.
*/

        public void Main()
        {
            // TODO: Add your code here
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }

Autres éléments du projet de tâche de script

La tâche de script peut inclure d'autres éléments que l'élément ScriptMain par défaut. Vous pouvez ajouter des classes, des modules et des fichiers de code au projet. Vous pouvez également utiliser des dossiers pour organiser des groupes d'éléments. Tous les éléments que vous ajoutez sont rendus persistants à l'intérieur du package.

Références dans le projet de tâche de script

Vous pouvez ajouter des références aux assemblys managés en cliquant avec le bouton droit sur le projet de tâche de script dans l'Explorateur de projets, puis en cliquant sur Ajouter une référence. Pour plus d'informations, consultez Référencement d'autres assemblys dans les solutions de script.

[!REMARQUE]

Vous pouvez consulter des références de projet dans l'environnement de développement intégré VSTA depuis l'Affichage de classes ou l'Explorateur de projets. Vous ouvrez l'une ou l'autre de ces fenêtres à partir du menu Affichage. Vous pouvez ajouter une nouvelle référence à partir du menu Projet, depuis l'Explorateur de projets ou l'Affichage de classes.

Interaction avec le package dans la tâche de script

La tâche de script utilise l'objet Dts global, qui est une instance de la classe ScriptObjectModel, ainsi que ses membres, pour interagir avec le package qui la contient et avec le runtime Integration Services.

Le tableau suivant répertorie les principaux membres publics de la classe ScriptObjectModel, exposée au code de la tâche de script par le biais de l'objet Dts global. Les rubriques de cette section examinent en détail l'utilisation de ces membres.

Membre

Fonction

Connections

Permet d'accéder aux gestionnaires de connexion définis dans le package.

Events

Fournit une interface d'événements pour permettre à la tâche de script de déclencher des erreurs, des avertissements et des messages d'information.

ExecutionValue

Offre un moyen simple de retourner un objet unique au runtime (en plus de TaskResult) qui peut également être utilisé pour la création de branche de flux de travail.

Log

Enregistre des informations, telles que la progression et le résultat d'une tâche, à des modules fournisseurs d'informations activés.

TaskResult

Signale le succès ou l'échec de la tâche.

Transaction

Fournit la transaction, le cas échéant, dans laquelle le conteneur de la tâche s'exécute.

Variables

Permet d'accéder aux variables répertoriées dans les propriétés de tâche ReadOnlyVariables et ReadWriteVariables à utiliser dans le script.

La classe ScriptObjectModel contient également quelques membres publics que vous n'utiliserez probablement pas.

Membre

Description

VariableDispenser

La propriété Variables fournit un accès plus pratique aux variables. Vous pouvez utiliser VariableDispenser, mais vous devez alors appeler des méthodes de manière explicite pour verrouiller et déverrouiller l'accès en lecture ou en écriture aux variables. La tâche de script se charge de gérer la sémantique de verrouillage lorsque vous utilisez la propriété Variables.

Débogage de la tâche de script

Pour déboguer le code dans votre tâche de script, définissez au moins un point d'arrêt dans le code, puis fermez l'environnement de développement intégré VSTA pour exécuter le package dans Outils de données SQL Server (SSDT). Lorsque l'exécution du package entre la tâche de script, l'environnement de développement intégré s'ouvre à nouveau et affiche votre code en lecture seule. Lorsque l'exécution atteint le point d'arrêt, vous pouvez examiner les valeurs des variables et exécuter pas à pas le code restant.

AttentionAttention

Vous pouvez déboguer la tâche de script lorsque vous exécutez le package en mode 64 bits.

[!REMARQUE]

Vous devez exécuter le package à déboguer dans votre tâche de script. Si vous exécutez uniquement la tâche, les points d'arrêt figurant dans le code de tâche de script sont ignorés.

[!REMARQUE]

Vous ne pouvez pas déboguer une tâche de script si vous l'exécutez dans le cadre d'un package enfant exécuté à partir d'une tâche d'exécution de package. Dans ce cas, les points d'arrêt définis dans la tâche de script dans le package enfant sont ignorés. Vous pouvez déboguer normalement le package enfant en l'exécutant séparément.

[!REMARQUE]

Lorsque vous déboguez un package qui contient plusieurs tâches Script, le débogueur n'en débogue qu'une seule. Le système peut déboguer une autre tâche Script si le débogueur a terminé, comme dans le cas d'une boucle Foreach ou du conteneur de boucles For.

Ressources externes

Icône Integration Services (petite) Rester à jour avec Integration Services

Pour obtenir les téléchargements, articles, exemples et vidéos les plus récents de Microsoft, ainsi que les solutions retenues par la communauté informatique, consultez 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

Référence

Référencement d'autres assemblys dans les solutions de script

Configuration de la tâche de script dans l'éditeur de tâche de script