Codificando e depurando a tarefa de script

Aplica-se a: SQL Server SSIS Integration Runtime em Azure Data Factory

Depois de configurar a tarefa Script no Editor de Tarefas Script, escreve o seu código personalizado no ambiente de desenvolvimento de tarefas Script.

Ambiente de Desenvolvimento de Tarefas de Script

A tarefa Script utiliza Microsoft Visual Studio Tools for Applications (VSTA) como ambiente de desenvolvimento para o próprio script.

O código de script é escrito em Microsoft Visual Basic ou Microsoft Visual C#. Especifica a linguagem de scripts definindo a propriedade ScriptLanguage no Editor de Tarefas de Scripts. Se preferir usar outra linguagem de programação, pode desenvolver um assembly personalizado na sua linguagem preferida e chamar a sua funcionalidade a partir do código na tarefa Script.

O script que crias na tarefa Script é guardado na definição do pacote. Não existe um ficheiro de script separado. Portanto, a utilização da tarefa Script não afeta a implementação dos pacotes.

Note

Quando desenhas o pacote e depuras o script, o código do script é temporário escrito num ficheiro de projeto. Como armazenar informação sensível num ficheiro representa um potencial risco de segurança, recomendamos que não inclua informações sensíveis, como palavras-passe, no código do script.

Por defeito, o Option Strict está desativado no IDE.

Estrutura do Project de Tarefa de Script

Quando crias ou modificas o script contido numa tarefa Script, o VSTA abre um novo projeto vazio ou reabre o projeto existente. A criação deste projeto VSTA não afeta a implementação do pacote, porque o projeto é guardado dentro do ficheiro do pacote; a tarefa Script não cria ficheiros adicionais.

Itens e Classes do Project no Script Task Project

Por defeito, o project de tarefa Script exibido na janela do Explorador de Project VSTA contém um único item, o ScriptMain. O item ScriptMain , por sua vez, contém uma única classe, também chamada ScriptMain. Os elementos de código na aula variam consoante a linguagem de programação que selecionaste para a tarefa Script:

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

    Por defeito, o único código na sub-rotina principal de um novo script é a linha Dts.TaskResult = ScriptResults.Success. Esta linha informa o tempo de execução de que a tarefa foi bem-sucedida na sua operação. A propriedade Dts.TaskResult é discutida em Devolver Resultados da Tarefa do Script.

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

    Por defeito, o método Main inclui a linha Dts.TaskResult = (int)ScriptResults.Success. Esta linha informa o tempo de execução de que a tarefa foi bem-sucedida na sua operação.

O item ScriptMain pode conter classes diferentes da classe ScriptMain . As classes estão disponíveis apenas para a tarefa Script em que residem.

Por defeito, o item do projeto ScriptMain contém o seguinte código gerado automaticamente. O modelo de código também fornece uma visão geral da tarefa Script e informações adicionais sobre como recuperar e manipular objetos SSIS, como variáveis, eventos e ligações.

' 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 Adicionais do Project no Script Task Project

O projeto de tarefa Script pode incluir itens diferentes do item padrão ScriptMain . Podes adicionar classes, módulos e ficheiros de código ao projeto. Também pode usar pastas para organizar grupos de itens. Todos os itens que adicionas são mantidos dentro da embalagem.

Referências no Script Task Project

Pode adicionar referências a assemblies geridos clicando com o botão direito no project de tarefa Script no Project Explorer e depois clicando em Adicionar Referência. Para mais informações, consulte Referenciar Outros Assemblies em Soluções de Scripting.

Note

Pode visualizar referências de project no IDE VSTA na Vista de Classes ou no Project Explorer. Abre qualquer uma destas janelas a partir do menu View . Pode adicionar uma nova referência no menu Project, no Project Explorer ou na Vista de Classes.

Interagir com o Pacote na Tarefa de Script

A tarefa Script utiliza o objeto global Dts , que é uma instância da ScriptObjectModel classe, e os seus membros para interagir com o pacote contendo e com o runtime dos Serviços de Integração.

A tabela seguinte lista os principais membros públicos da ScriptObjectModel classe, que são expostos ao código de tarefa Script através do objeto global DTS . Os temas desta secção discutem a utilização destes membros com mais detalhe.

Membro Purpose
Connections Fornece acesso a gestores de ligação definidos no pacote.
Events Fornece uma interface de eventos para permitir que a tarefa Script gere erros, avisos e mensagens informativas.
ExecutionValue Fornece uma forma simples de devolver um único objeto ao tempo de execução (além do ResultadoTarefa) que também pode ser usada para ramificação de workflow.
Log Informação dos registos, como o progresso da tarefa e os resultados, para os fornecedores de registos ativados.
TaskResult Reporta o sucesso ou fracasso da tarefa.
Transaction Fornece a transação, se existir, dentro da qual o contentor da tarefa está a correr.
Variables Fornece acesso às variáveis listadas nas propriedades das tarefas ReadOnlyVariables e ReadWriteVariables para uso dentro do script.

A ScriptObjectModel aula também inclui alguns membros públicos que provavelmente não vais usar.

Membro Description
VariableDispenser A Variables propriedade proporciona um acesso mais conveniente às variáveis. Embora possa usar o VariableDispenser, deve chamar explicitamente métodos para bloquear e desbloquear variáveis para leitura e escrita. A tarefa Script trata da semântica de bloqueio por ti quando usas a Variables propriedade.

Depuração da Tarefa do 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 IDE VSTA para executar o pacote no SQL Server Data Tools (SSDT). Quando a execução do pacote entra na tarefa Script, o IDE VSTA reabre e apresenta o seu código em modo apenas leitura. Depois de a execução atingir o seu limite, pode examinar os valores das variáveis e passar pelo código restante.

Warning

Não podes depurar a tarefa Script quando executas o pacote em modo de 64 bits.

Note

Deve executar o pacote para depurar na sua tarefa de Script. Se executares apenas a tarefa individual, os pontos de interrupção no código da tarefa Script são ignorados.

Note

Não pode depurar uma tarefa Script quando executa a tarefa Script como parte de um pacote filho que é executado a partir de uma tarefa Executar Pacote. Os pontos de interrupção que defines na tarefa Script do pacote filho são ignorados nestas circunstâncias. Pode depurar o pacote filho normalmente executando-o separadamente.

Note

Quando depuras um pacote que contém várias tarefas Script, o depurador depura uma tarefa Script. O sistema pode depurar outra tarefa Script se o depurador estiver concluído, como no caso de um contentor Foreach Loop ou For Loop.