Codificar y depurar la tarea Script
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 MicrosoftVisual Studio Tools para aplicaciones (VSTA) como el entorno de desarrollo del propio script.
El código de script se escribe en MicrosoftVisual Basic 2008 o en MicrosoftVisual C# 2008. 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.
La 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 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, 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 2008, la clase ScriptMain tiene una subrutina pública, Main. La subrutina ScriptMain.Main es el método al que el módulo ejecutable 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# 2008, 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 que no sean la clase ScriptMain. Las clases sólo 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:
' 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 agrega 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 secundario en el proyecto de la tarea Script en Explorador de proyectosy después haga clic en Agregar referencia. Para obtener más información, vea 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 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.
Miembro |
Finalidad |
---|---|
Proporciona acceso a los administradores de conexión definidos en el paquete. |
|
Proporciona una interfaz de eventos que permite a la tarea Script generar errores, advertencias y mensajes informativos. |
|
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. |
|
Registra información como el progreso y los resultados de las tareas en proveedores de registro habilitados. |
|
Informa del éxito o error de la tarea. |
|
Proporciona la transacción, si hay alguna, dentro de la que el contenedor de la tarea se está ejecutando. |
|
Proporciona acceso a las variables enumeradas en las propiedades de tarea ReadWriteVariables y ReadOnlyVariables para su uso en el script. |
La clase ScriptObjectModel contiene también algunos miembros públicos que probablemente no utilizará.
Miembro |
Descripción |
---|---|
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 Business Intelligence Development Studio. 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 sólo 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.
[!NOTA]
Debe ejecutar el paquete para depurar en la tarea Script. Si ejecuta sólo 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 alcanzará los puntos de interrupción sólo en una tarea Script y omitirá los puntos de interrupción del resto. Si una tarea Script forma parte de un contenedor de bucles Foreach o For, el depurador omite los puntos de interrupción en la tarea Script después de la primera iteración del bucle.
|