Codificando e depurando o componente Script

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

No SSIS Designer, o componente Script tem dois modos: modo de design de metadados e modo de design de código. Quando abres o Editor de Transformação de Scripts, o componente entra no modo de design de metadados, no qual configuras metadados e defines propriedades dos componentes. Depois de definir as propriedades do componente Script e configurar as entradas e saídas no modo de design de metadados, pode mudar para o modo design de código para escrever o seu script personalizado. Para mais informações sobre o modo de design de metadados e o modo de design de código, consulte Configurar o Componente de Script no Editor de Componentes de Script.

Escrita do Script em Modo de Design de Código

Ambiente de Desenvolvimento de Componentes de Scripts

Para escrever o seu script, clique em Editar Script na página Script do Script Transformation Editor para abrir o IDE Microsoft Visual Studio Tools for Applications (VSTA). O IDE VSTA inclui todas as funcionalidades padrão do ambiente Visual Studio .NET, como o editor de Visual Studio codificado por cores, IntelliSense e Object Browser.

O código de script é escrito em Microsoft Visual Basic ou Microsoft Visual C#. Especifica a linguagem de scripts definindo a propriedade ScriptLanguage no Script Transformation Editor. 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 no componente Script.

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

Note

Enquanto desenhas o pacote, o código do script é temporariamente escrito num ficheiro de projeto. Como armazenar informação sensível num ficheiro representa um risco potencial 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 do Componente Script

A potência do componente Script é que pode gerar código de infraestrutura que reduz a quantidade de código que tem de escrever. Esta funcionalidade baseia-se no facto de as entradas e saídas, bem como as suas colunas e propriedades, serem fixas e conhecidas antecipadamente. Portanto, quaisquer alterações subsequentes que faça aos metadados do componente podem invalidar o código que escreveu. Isto causa erros de compilação durante a execução do pacote.

Project Items and Classes no Script Component Project

Quando mudas para o modo de design de código, o IDE VSTA abre e mostra o item do projeto ScriptMain . O item do projeto ScriptMain contém a classe editável ScriptMain , que serve como ponto de entrada para o script e é onde escreves o teu código. Os elementos de código na aula variam consoante a linguagem de programação que selecionaste para a tarefa Script.

O projeto de script contém dois itens adicionais de projeto só de leitura gerados automaticamente:

  • O item do projeto ComponentWrapper contém três classes:

    • A classe UserComponent , que herda e ScriptComponent contém os métodos e propriedades que irá usar para processar dados e interagir com o pacote. A classe ScriptMain herda da classe UserComponent .

    • Uma classe de coleção Connections que contém referências às ligações selecionadas na página do Gestor de Ligações do Script Transformation Editor.

    • Uma classe de coleção de variáveis que contém referências às variáveis inseridas nas propriedades ReadOnlyVariable e ReadWriteVariables na página Script do Script Transformation Editor.

  • O item do projeto BufferWrapper contém uma classe que herda de ScriptBuffer para cada entrada e saída configurada na página de Entradas e Saídas do Editor de Transformação de Scripts. Cada uma destas classes contém propriedades de acesso tipadas que correspondem às colunas de entrada e saída configuradas, bem como aos buffers de fluxo de dados que contêm as colunas.

Para informações sobre como usar estes objetos, métodos e propriedades, consulte Compreender o Modelo de Objetos do Componente Script. Para informações sobre como usar os métodos e propriedades destas classes num determinado tipo de componente Script, consulte a secção Exemplos Adicionais de Componentes Script. Os tópicos de exemplo também contêm exemplos completos de código.

Quando configura o componente Script como uma transformação, 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 do componente 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 Component  
' Write scripts using Microsoft Visual Basic 2008.  
' ScriptMain is the entry point class of the script.  
  
Imports System  
Imports System.Data  
Imports System.Math  
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper  
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper  
  
<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _  
<CLSCompliant(False)> _  
Public Class ScriptMain  
    Inherits UserComponent  
  
    Public Overrides Sub PreExecute()  
        MyBase.PreExecute()  
        '  
        ' Add your code here for preprocessing or remove if not needed  
        '  
    End Sub  
  
    Public Overrides Sub PostExecute()  
        MyBase.PostExecute()  
        '  
        ' Add your code here for postprocessing or remove if not needed  
        ' You can set read/write variables here, for example:  
        ' Me.Variables.MyIntVar = 100  
        '  
    End Sub  
  
    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
        '  
        ' Add your code here  
        '  
    End Sub  
  
End Class  
/* Microsoft SQL Server Integration Services user script component  
*  Write scripts using Microsoft Visual C# 2008.  
*  ScriptMain is the entry point class of the script.*/  
  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
using Microsoft.SqlServer.Dts.Runtime.Wrapper;  
  
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]  
public class ScriptMain : UserComponent  
{  
  
    public override void PreExecute()  
    {  
        base.PreExecute();  
        /*  
          Add your code here for preprocessing or remove if not needed  
        */  
    }  
  
    public override void PostExecute()  
    {  
        base.PostExecute();  
        /*  
          Add your code here for postprocessing or remove if not needed  
          You can set read/write variables here, for example:  
          Variables.MyIntVar = 100  
        */  
    }  
  
    public override void Input0_ProcessInputRow(Input0Buffer Row)  
    {  
        /*  
          Add your code here  
        */  
    }  
  
}  

Itens Adicionais do Project no Script Component Project

O projeto do componente Script pode incluir itens diferentes do item padrão do ScriptMain . Podes adicionar classes, módulos, ficheiros de código e pastas ao projeto, e podes usar pastas para organizar grupos de itens.

Todos os itens que adicionas são mantidos dentro da embalagem.

Referências no Script Component 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.

Interação com o Pacote no Componente Script

O script personalizado que escreves no componente Script pode aceder e usar variáveis e gestores de ligação do pacote que contém através de acessores fortemente tipados nas classes base geradas automaticamente. No entanto, deve configurar tanto variáveis como gestores de ligação antes de entrar no modo de design de código se quiser disponibilizá-los ao seu script. Também pode criar eventos e realizar registos a partir do seu código de componente Script.

Os itens do projeto gerados automaticamente no projeto componente Script fornecem os seguintes objetos, métodos e propriedades para interagir com o pacote.

Funcionalidade do Pacote Método de acesso
Variables Use as propriedades de acessório nomeadas e tipadas na classe de coleção Variables no item do projeto ComponentWrapper , expostas através da propriedade Variables da classe ScriptMain .

O método PreExecute só pode aceder a variáveis de apenas leitura. O método PostExecute pode aceder tanto a variáveis de apenas leitura como a variáveis de leitura/escrita.
Connections Use as propriedades do acessório nomeado e tipado na classe de coleção Connections no item do projeto ComponentWrapper , expostas através da propriedade Connections da classe ScriptMain .
Events Criar eventos usando a ComponentMetaData propriedade da classe ScriptMain e os métodos Fire<X> da IDTSComponentMetaData100 interface.
Logging Realize registos utilizando o Log método da classe ScriptMain .

Depuração do Componente de Script

Para depurar o código no seu componente 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 no componente Script, o IDE VSTA reabre e exibe o seu código em modo apenas de leitura. Depois de a execução atingir o seu limite, pode examinar os valores das variáveis e passar pelo código restante.

Note

Não pode depurar um componente Script quando executa o componente Script como parte de um pacote filho executado a partir de uma tarefa Executar Pacote. Os pontos de interrupção que defines no componente 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 múltiplos componentes Script, o depurador depura um componente Script. O sistema pode depurar outro componente Script se o depurador estiver completo, como no caso de um contentor Foreach Loop ou For Loop.

Também pode monitorizar a execução do componente Script usando os seguintes métodos:

  • Interrupe a execução e exibe uma mensagem modal usando o método MessageBox.Show no System.Windows. Namespace de formulários. (Remova este código depois de concluir o processo de depuração.)

  • Levante eventos para mensagens informativas, avisos e erros. Os métodos FireInformation, FireWarning e FireError exibem a descrição do evento na janela de Saída do Visual Studio. No entanto, o método FireProgress, o método Console.Write e o método Console.WriteLine não mostram qualquer informação na janela de Saída . As mensagens do evento FireProgress aparecem no separador Progress do SSIS Designer. Para mais informações, consulte Elevação de Eventos no Componente de Guião.

  • Registar eventos ou mensagens definidas pelo utilizador para os fornecedores de registo ativados. Para mais informações, consulte Iniciar sessão no Componente de Script.

Se quiser apenas examinar a saída de um componente Script configurado como fonte ou como transformação, sem guardar os dados num destino, pode parar o fluxo de dados com uma Transformação de Contagem de Linhas e anexar um visualizador de dados à saída do componente Script. Para informações sobre visualizadores de dados, consulte Debugging Fluxo de Dados.

Na presente seção

Para mais informações sobre a programação do componente Script, consulte os seguintes tópicos nesta secção.

Compreensão do Modelo de Objeto do Componente do Script
Explica como usar os objetos, métodos e propriedades disponíveis no componente Script.

Referenciação de Outros Assemblies em Soluções de Scripting
Explica como referenciar objetos da biblioteca de classes .NET Framework no componente Script.

Simulação de uma saída de erro para o componente script
Explica como simular uma saída de erro para linhas que geram erros durante o processamento pelo componente Script.