Share via


Codificar y depurar la tarea Script

Se aplica a:SQL Server SSIS Integration Runtime en Azure Data Factory

Después de configurar la tarea Script en el Editor de la tarea Script, puede escribir el código personalizado en el entorno de desarrollo de la tarea Script.

Entorno de desarrollo de la tarea Script

La tarea Script usa Microsoft Visual Studio Tools for Applications (VSTA) como el entorno de desarrollo del propio script.

El código de script se escribe en Microsoft Visual Basic o Microsoft Visual C#. Puede especificar el lenguaje de script estableciendo la propiedad ScriptLanguage en el Editor de la tarea Script. Si prefiere utilizar otro lenguaje de programación, puede desarrollar un ensamblado personalizado en el lenguaje seleccionado y utilizar su funcionalidad en el código de la tarea Script.

El script que crea en la tarea Script se almacena en la definición de paquete. No hay un archivo de script independiente. Por consiguiente, el uso de la tarea Script no afecta a la implementación del paquete.

Nota

Al diseñar el paquete y depurar el script, el código de script se escribe temporalmente en un archivo de proyecto. Dado que almacenar información confidencial en un archivo supone un riesgo potencial para la seguridad, recomendamos que no incluya información confidencial como contraseñas en el código de script.

De forma predeterminada, la instrucción Option Strict está deshabilitada en el IDE.

Estructura del proyecto de la tarea Script

Al crear o modificar el script contenido en una tarea Script, VSTA abre un proyecto nuevo vacío o vuelve a abrir el proyecto existente. La creación de este proyecto VSTA no afecta a la implementación del paquete, porque el proyecto está guardado en el archivo empaquetado; la tarea Script no crea archivos adicionales.

Elementos y clases de proyecto en el proyecto de la tarea Script

De forma predeterminada, el proyecto de la tarea Script mostrado en la ventana Explorador de proyectos de VSTA contiene un elemento único, ScriptMain. El elemento ScriptMain, a su vez, contiene una clase única, también denominada ScriptMain. Los elementos de código de la clase varían, dependiendo del lenguaje de programación seleccionado para la tarea Script:

  • Cuando la tarea Script se configura para el lenguaje de programación Visual Basic, la clase ScriptMain tiene una subrutina pública, Main. La subrutina ScriptMain.Main es el método al que el entorno en tiempo de ejecución llama cuando ejecuta la tarea Script.

    De forma predeterminada, el único código de la subrutina Main de un script nuevo es la línea Dts.TaskResult = ScriptResults.Success. Esta línea informa al módulo ejecutable que la tarea se realizó correctamente en su operación. La propiedad Dts.TaskResult se describe en Devolver los resultados de la tarea Script.

  • Cuando la tarea Script está configurada para el lenguaje de programación Visual C#, la clase ScriptMain tiene un método público, Main. Se llama al método cuando se ejecuta la tarea Script.

    De manera predeterminada, el método Main incluye la línea Dts.TaskResult = (int)ScriptResults.Success. Esta línea informa al módulo ejecutable que la tarea se realizó correctamente en su operación.

El elemento ScriptMain puede contener clases distintas de la clase ScriptMain. Las clases solo están disponibles en la tarea Script en la que residen.

De forma predeterminada, el elemento de proyecto ScriptMain contiene el código siguiente generado automáticamente. La plantilla de código también proporciona información general sobre la tarea Script, así como información adicional sobre cómo recuperar y manipular objetos SSIS, como variables, eventos y conexiones.

' 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;  
        }  
    }  

Elementos de proyecto adicionales del proyecto de la tarea Script

El proyecto de la tarea Script puede incluir elementos distintos del elemento ScriptMain predeterminado. Puede agregar clases, módulos y archivos de código al proyecto. También puede utilizar las carpetas para organizar los grupos de elementos. Todos los elementos que se agregan se conservan dentro del paquete.

Referencias en el proyecto de la tarea Script

Para agregar referencias a los ensamblados administrados, haga clic con el botón derecho en el proyecto de la tarea Script en el Explorador de proyectos y, después, haga clic en Agregar referencia. Para obtener más información, consulte Hacer referencia a otros ensamblados en soluciones de scripting.

Nota

Puede ver las referencias de proyecto en el IDE de VSTA en la Vista de clases o en el Explorador de proyectos. Puede abrir cualquiera de estas ventanas en el menú Ver. Puede agregar una referencia nueva en el menú Proyecto, en el Explorador de proyectos o en Vista de clases.

Interactuar con el paquete de la tarea Script

La tarea Script utiliza el objeto Dts global, que es una instancia de la clase ScriptObjectModel y sus miembros para interactuar con el paquete contenedor y con el módulo ejecutable de Integration Services.

En la tabla siguiente se enumeran los miembros públicos principales de la clase ScriptObjectModel, que se expone al código de la tarea Script a través del objeto Dts global. Los temas de esta sección describen con más detalle el uso de estos miembros.

Member Propósito
Connections Proporciona acceso a los administradores de conexión definidos en el paquete.
Events Proporciona una interfaz de eventos que permite a la tarea Script generar errores, advertencias y mensajes informativos.
ExecutionValue Proporciona una manera simple de devolver un objeto único al módulo ejecutable (además de TaskResult) que también se puede utilizar para la bifurcación del flujo de trabajo.
Log Registra información como el progreso y los resultados de las tareas en proveedores de registro habilitados.
TaskResult Informa del éxito o error de la tarea.
Transaction Proporciona la transacción, si hay alguna, dentro de la que el contenedor de la tarea se está ejecutando.
Variables Proporciona acceso a las variables enumeradas en las propiedades de tarea ReadOnlyVariables y ReadWriteVariables para su uso en el script.

La clase ScriptObjectModel contiene también algunos miembros públicos que probablemente no utilizará.

Member Descripción
VariableDispenser La propiedad Variables proporciona un acceso más cómodo a las variables. Aunque puede utilizar VariableDispenser, debe llamar explícitamente a los métodos para bloquear y desbloquear las variables para leer y escribir. La tarea Script controla la semántica de bloqueo automáticamente cuando usa la propiedad Variables.

Depurar la tarea Script

Para depurar el código de la tarea Script, establezca al menos un punto de interrupción en el código y, a continuación, cierre el IDE de VSTA para ejecutar el paquete en SQL Server Data Tools (SSDT). Cuando la ejecución del paquete entra en la tarea Script, el IDE de VSTA se vuelve a abrir y muestra el código en modo de solo lectura. Después de que la ejecución llega al punto de interrupción, puede examinar los valores de variable y completar el código restante.

Advertencia

No se puede depurar la tarea Script al ejecutar el paquete en modo de 64 bits.

Nota

Debe ejecutar el paquete para depurar en la tarea Script. Si ejecuta solamente la tarea individual, se pasan por alto los puntos de interrupción del código de la tarea Script.

Nota

No puede depurar una tarea Script al ejecutar esta última como parte de un paquete secundario que se ejecuta desde una tarea Ejecutar paquete. Los puntos de interrupción establecidos en la tarea Script del paquete secundario se descartan en estas circunstancias. Puede depurar el paquete secundario ejecutándolo normalmente por separado.

Nota

Al depurar un paquete que contiene varias tareas Script, el depurador depura una tarea Script. El sistema puede depurar otra tarea Script si el depurador se completa, como en el caso de un bucle Foreach o un contenedor de bucles For.

Recursos externos

Consulte también

Hacer referencia a otros ensamblados en soluciones de scripting
Configurar la tarea Script en el editor de la tarea Script