Codificando e depurando a tarefa Script

Depois de configurar a tarefa Script no Editor da Tarefa Script, você escreve seu código personalizado no ambiente de desenvolvimento da tarefa Script.

Ambiente de desenvolvimento da tarefa Script

A tarefa Script usa o MicrosoftVisual Studio Tools for Applications (VSTA) como o ambiente de desenvolvimento do próprio script.

O código de Script é escrito em MicrosoftVisual Basic 2008 ou MicrosoftVisual C# 2008. Você especifica a linguagem de script definindo a propriedade ScriptLanguage no Editor da Tarefa Script. Caso prefira usar outra linguagem de programação, você pode desenvolver um assembly personalizado na linguagem de sua escolha e chamar sua funcionalidade a partir do código na tarefa Script.

O script criado na tarefa Script é armazenado na definição do pacote. Não há arquivo de script separado. Portanto, o uso da tarefa Script não afeta a implantação do pacote.

ObservaçãoObservação

Quando você projeta o pacote e depura o script, o código de script é gravado temporariamente em um arquivo de projeto. Como o fato de armazenar informações confidenciais em um arquivo é um risco em potencial à segurança, recomendamos não incluir informações confidenciais, como senhas, no código de script.

Por padrão, Option Strict fica desabilitado no IDE.

Estrutura do projeto da tarefa Script

Quando você cria ou modifica o script contido em uma tarefa Script, o VSTA abre um novo projeto vazio ou reabre o projeto existente. A criação desse projeto VSTA não afeta a implantação do pacote, pois o projeto é salvo dentro do arquivo de pacote; a tarefa Script não cria arquivos adicionais.

Itens e classes de projeto no projeto da tarefa Script

Por padrão, o projeto da tarefa Script exibido na janela Explorador de Projeto VSTA contém um único item, ScriptMain. O item ScriptMain, por sua vez, contém uma única classe, também nomeada ScriptMain. Os elementos de código na classe variam de acordo com a linguagem de programação selecionada para a tarefa Script:

  • Quando a tarefa Script é configurada para a linguagem de programação Visual Basic 2008, a classe ScriptMain tem uma sub-rotina pública, Main. A sub-rotina ScriptMain.Main é o método que o tempo de execução chama quando você executa sua tarefa Script.

    Por padrão, o único código na sub-rotina Main de um script novo é a linha Dts.TaskResult = ScriptResults.Success. Essa linha informa o tempo de execução em que a tarefa teve êxito em sua operação. A propriedade Dts.TaskResult é discutida em Retornando resultados da tarefa Script.

  • Quando a tarefa Script é configurada para a linguagem de programação Visual C# 2008, a classe ScriptMain tem um método público, Main. O método é chamado quando a tarefa Script é executada.

    Por padrão, o método Main inclui a linha Dts.TaskResult = (int)ScriptResults.Success. Essa linha informa o tempo de execução em que a tarefa teve êxito em sua operação.

O item ScriptMain pode conter classes que não sejam a classe ScriptMain. Classes só estão disponíveis à tarefa Script na qual elas residem.

Por padrão, o item de projeto ScriptMain contém o seguinte código gerado automaticamente:

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

Itens de projeto adicionais no projeto da tarefa Script

O projeto da tarefa Script pode incluir itens que não sejam o item padrão ScriptMain. Você pode adicionar classes, módulos e arquivos de código ao projeto. Você também pode usar pastas para organizar grupos de itens. Todos os itens que você adiciona persistem dentro do pacote.

Referências no projeto da tarefa Script

Você pode adicionar referências a assemblies gerenciados clicando com o botão direito no projeto da tarefa Script no Explorador de Projeto e, depois, clicando em Adicionar Referência. Para obter mais informações, consulte Referenciando outros assemblies em soluções de script.

ObservaçãoObservação

Você pode exibir as referências do projeto no VSTA IDE em Modo de Exibição de Classe ou em Explorador de Projeto. É possível abrir qualquer uma dessas janelas no menu Exibir. Você pode adicionar uma referência nova através do menu Projeto, de Explorador de Projeto ou de Modo de Exibição de Classe.

Interagindo com o pacote na tarefa Script

A tarefa Script usa o objeto global Dts, que é uma instância da classe ScriptObjectModel e de seus membros para interagir com o pacote que a contém e com o tempo de execução do Integration Services.

A tabela a seguir lista os membros públicos principais da classe ScriptObjectModel, que é exposta ao código da tarefa Script através do objeto global Dts. Os tópicos dessa seção apresentam uma discussão detalhada sobre o uso desses membros.

Membro

Finalidade

Connections

Fornece acesso a gerenciadores de conexões definidos no pacote.

Events

Fornece uma interface de eventos para deixar a tarefa Script gerar erros, avisos e mensagens informativas.

ExecutionValue

Apresenta uma forma simples de retornar um único objeto ao tempo de execução (além do TaskResult) que também pode ser usado para a ramificação de fluxos de trabalho.

Log

Registra informações tais como o progresso da tarefa e resultados para provedores de log habilitados.

TaskResult

Reporta o êxito ou falha da tarefa.

Transaction

Fornece a transação, caso exista, dentro da qual o contêiner da tarefa está em execução.

Variables

Fornece acesso às variáveis listadas nas propriedades de tarefa ReadOnlyVariables e ReadWriteVariables para uso dentro do script.

A classe ScriptObjectModel também contém alguns membros públicos que você provavelmente não usará.

Membro

Descrição

VariableDispenser

A propriedade Variables fornece acesso mais conveniente a variáveis. Embora você possa usar o VariableDispenser, chame explicitamente métodos para bloquear e desbloquear variáveis para leitura e gravação. A tarefa Script trata de semânticas de bloqueio quando você usa a propriedade Variables.

Depurando a tarefa Script

Para depurar o código na sua tarefa Script, defina pelo menos um ponto de interrupção no código e, depois, feche o VSTA IDE para executar o pacote no Business Intelligence Development Studio. Quando a execução do pacote insere a tarefa Script, o VSTA IDE é reaberto e exibe seu código em modo somente leitura. Depois que a execução atingir seu ponto de interrupção, você poderá examinar valores de variáveis e passar pelo código restante.

ObservaçãoObservação

Execute o pacote para depurar em sua tarefa Script. Se você executar apenas a tarefa individual, os pontos de interrupção no código da tarefa Script serão ignorados.

ObservaçãoObservação

Você não pode depurar uma tarefa Script quando executa-a como parte de um pacote filho que é executado a partir de uma tarefa Executar Pacote. Nessas circunstâncias, os pontos de interrupção definidos na tarefa Script no pacote filho são desconsiderados. Você pode depurar o pacote filho normalmente, executando-o separadamente.

ObservaçãoObservação

Quando você depura um pacote contendo várias tarefas Script, o depurador acessa pontos de interrupção em apenas uma tarefa Script e ignora pontos de interrupção em outras tarefas Script. Se uma tarefa Script fizer parte de um contêiner Loop Foreach ou Loop For, o depurador ignorará os pontos de interrupção na tarefa Script depois da primeira iteração do loop.

Ícone do Integration Services (pequeno) Fique atualizado com o Integration Services

Para obter os mais recentes downloads, artigos, exemplos e vídeos da Microsoft, bem como soluções selecionadas da comunidade, visite a página do Integration Services no MSDN ou TechNet:

Para receber uma notificação automática das atualizações, assine os feeds RSS disponíveis na página.