Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
SSIS Integration Runtime em Azure Data Factory
Os programadores de componentes podem fornecer uma interface de utilizador personalizada para um componente, que é exibida no SQL Server Data Tools (SSDT) quando o componente é editado. Implementar uma interface de utilizador personalizada fornece-lhe notificações quando o componente é adicionado ou eliminado de uma tarefa de fluxo de dados, e quando é solicitada ajuda para o componente.
Se não fornecer uma interface de utilizador personalizada para o seu componente, os utilizadores ainda podem configurar o componente e as suas propriedades personalizadas usando o Editor Avançado. Pode garantir que o Editor Avançado permite aos utilizadores editar valores de propriedades personalizados de forma apropriada, usando as TypeConverter propriedades e UITypeEditor dos IDTSCustomProperty100 quando apropriado. Para mais informações, consulte "Criar Propriedades Personalizadas" em Design-time Methods of a Fluxo de Dados Component.
Definir a propriedade UITypeName
Para fornecer uma interface personalizada, o programador deve definir a UITypeName propriedade de o DtsPipelineComponentAttribute como nome de uma classe que implementa a IDtsComponentUI interface. Quando esta propriedade é definida pelo componente, o SQL Server Integration Services carrega e chama a interface de utilizador personalizada quando o componente é editado no SSIS Designer.
A UITypeName propriedade é uma cadeia delimitada por vírgulas que identifica o nome totalmente qualificado do tipo. A lista seguinte mostra, por ordem, os elementos que identificam o tipo:
Nome do tipo
Nome do Assembly
Versão do ficheiro
Cultura
Token de chave pública
O exemplo de código seguinte mostra uma classe que deriva da PipelineComponent classe base e especifica a UITypeName propriedade.
[DtsPipelineComponent(
DisplayName="SampleComponent",
UITypeName="MyNamespace.MyComponentUIClassName,MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcd...",
ComponentType = ComponentType.Transform)]
public class SampleComponent : PipelineComponent
{
//TODO: Implement the component here.
}
<DtsPipelineComponent(DisplayName="SampleComponent", _
UITypeName="MyNamespace.MyComponentUIClassName,MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcd...", ComponentType=ComponentType.Transform)> _
Public Class SampleComponent
Inherits PipelineComponent
End Class
Implementação da Interface IDtsComponentUI
A IDtsComponentUI interface contém métodos que o SSIS Designer chama quando um componente é adicionado, eliminado e editado. Os programadores de componentes podem fornecer código na sua implementação destes métodos para interagir com os utilizadores do componente.
Esta classe é tipicamente implementada num assembly separado do próprio componente. Embora não seja necessário usar um conjunto separado, isto permite ao programador construir e implementar o componente e a interface de utilizador independentemente um do outro, mantendo a área binária do componente pequena.
Implementar uma interface de utilizador personalizada dá ao desenvolvedor do componente mais controlo sobre o componente à medida que este é editado no SSIS Designer. Por exemplo, um componente pode adicionar código ao New método, que é chamado quando um componente é inicialmente adicionado a uma tarefa de fluxo de dados, e exibir um assistente que orienta o utilizador na configuração inicial do componente.
Depois de criar uma classe que implementa a IDtsComponentUI interface, deve adicionar código para responder à interação do utilizador com o componente. O Initialize método fornece a IDTSComponentMetaData100 interface do componente, e é chamado antes dos New métodos e Edit . Esta referência deve ser armazenada numa variável membro privada e usada para modificar os metadados do componente posteriormente.
Modificação de um componente e persistência de alterações
A IDTSComponentMetaData100 interface é fornecida como um parâmetro ao Initialize método. Esta referência deve ser armazenada em cache numa variável membro pelo código da interface do utilizador, e depois usada para modificar o componente em resposta à interação do utilizador com a interface.
Embora possa modificar o componente diretamente através da IDTSComponentMetaData100 interface, é melhor criar uma instância do CManagedComponentWrapper usando o Instantiate método. Quando editas o componente diretamente usando a interface, contornas as salvaguardas de validação do componente. A vantagem de usar a instância em tempo de design do componente é CManagedComponentWrapper garantir que o componente tem controlo sobre as alterações feitas nele.
O valor de retorno do Edit método determina se as alterações feitas a um componente são persistidas ou descartadas. Quando este método retorna falso, todas as alterações são descartadas; True mantém as alterações ao componente e marca o pacote como necessitando de ser guardado.
Utilização dos Serviços do Designer do SSIS
O parâmetro IServiceProvider do Initialize método fornece acesso aos seguintes serviços do SSIS Designer:
| Service | Description |
|---|---|
| IDtsClipboardService | Usado para determinar se o componente foi gerado como parte de uma operação de copiar/colar ou cortar/colar. |
| IDtsConnectionService | Usado para aceder a ligações existentes ou para criar novas ligações no pacote. |
| IErrorCollectionService | Usado para capturar eventos dos componentes do fluxo de dados quando é necessário capturar todos os erros e avisos gerados pelo componente, em vez de receber apenas o último erro ou aviso. |
| IDtsVariableService | Usado para aceder a variáveis existentes ou para criar novas variáveis no pacote. |
| IDtsPipelineEnvironmentService | Utilizado pelos componentes do data flow para aceder à tarefa principal Fluxo de Dados e a outros componentes do data flow. Esta funcionalidade pode ser usada para desenvolver um componente como o Assistente de Dimensões Que Muda Lentamente, que cria e liga componentes adicionais de fluxo de dados conforme necessário. |
Estes serviços oferecem aos programadores de componentes a capacidade de aceder e criar objetos no pacote onde o componente é carregado.
Exemplo
O exemplo de código seguinte mostra a integração de uma classe de interface personalizada que implementa a IDtsComponentUI interface e um formulário Windows que serve como editor para um componente.
Classe de Interface de Utilizador Personalizada
O código seguinte mostra a classe que implementa a IDtsComponentUI interface. O Edit método cria o editor de componentes e depois apresenta o formulário. O valor de retorno do formulário determina se as alterações ao componente são persistentes.
using System;
using System.Windows.Forms;
using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Pipeline.Design;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
namespace Microsoft.Samples.SqlServer.Dts
{
public class SampleComponentUI : IDtsComponentUI
{
IDTSComponentMetaData100 md;
IServiceProvider sp;
public void Help(System.Windows.Forms.IWin32Window parentWindow)
{
}
public void New(System.Windows.Forms.IWin32Window parentWindow)
{
}
public void Delete(System.Windows.Forms.IWin32Window parentWindow)
{
}
public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Variables vars, Connections cons)
{
// Create and display the form for the user interface.
SampleComponentUIForm componentEditor = new SampleComponentUIForm(cons, vars, md);
DialogResult result = componentEditor.ShowDialog(parentWindow);
if (result == DialogResult.OK)
return true;
return false;
}
public void Initialize(IDTSComponentMetaData100 dtsComponentMetadata, IServiceProvider serviceProvider)
{
// Store the component metadata.
this.md = dtsComponentMetadata;
}
}
}
Imports System
Imports System.Windows.Forms
Imports Microsoft.SqlServer.Dts.Runtime
Imports Microsoft.SqlServer.Dts.Pipeline.Design
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Namespace Microsoft.Samples.SqlServer.Dts
Public Class SampleComponentUI
Implements IDtsComponentUI
Private md As IDTSComponentMetaData100
Private sp As IServiceProvider
Public Sub Help(ByVal parentWindow As System.Windows.Forms.IWin32Window)
End Sub
Public Sub New(ByVal parentWindow As System.Windows.Forms.IWin32Window)
End Sub
Public Sub Delete(ByVal parentWindow As System.Windows.Forms.IWin32Window)
End Sub
Public Function Edit(ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal vars As Variables, ByVal cons As Connections) As Boolean
' Create and display the form for the user interface.
Dim componentEditor As SampleComponentUIForm = New SampleComponentUIForm(cons, vars, md)
Dim result As DialogResult = componentEditor.ShowDialog(parentWindow)
If result = DialogResult.OK Then
Return True
End If
Return False
End Function
Public Sub Initialize(ByVal dtsComponentMetadata As IDTSComponentMetaData100, ByVal serviceProvider As IServiceProvider)
Me.md = dtsComponentMetadata
End Sub
End Class
End Namespace
Editor Personalizado
O código seguinte mostra a implementação do formulário Windows que é mostrada durante a chamada ao Edit método.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime;
namespace Microsoft.Samples.SqlServer.Dts
{
public partial class SampleComponentUIForm : System.Windows.Forms.Form
{
private Connections connections;
private Variables variables;
private IDTSComponentMetaData100 metaData;
private CManagedComponentWrapper designTimeInstance;
private System.ComponentModel.IContainer components = null;
public SampleComponentUIForm( Connections cons, Variables vars, IDTSComponentMetaData100 md)
{
variables = vars;
connections = cons;
metaData = md;
}
private void btnOk_Click(object sender, System.EventArgs e)
{
if (designTimeInstance == null)
designTimeInstance = metaData.Instantiate();
designTimeInstance.SetComponentProperty( "CustomProperty", txtCustomPropertyValue.Text);
this.Close();
}
private void btnCancel_Click(object sender, System.EventArgs e)
{
this.Close();
}
}
}
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Data
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime
Namespace Microsoft.Samples.SqlServer.Dts
Public Partial Class SampleComponentUIForm
Inherits System.Windows.Forms.Form
Private connections As Connections
Private variables As Variables
Private metaData As IDTSComponentMetaData100
Private designTimeInstance As CManagedComponentWrapper
Private components As System.ComponentModel.IContainer = Nothing
Public Sub New(ByVal cons As Connections, ByVal vars As Variables, ByVal md As IDTSComponentMetaData100)
variables = vars
connections = cons
metaData = md
End Sub
Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If designTimeInstance Is Nothing Then
designTimeInstance = metaData.Instantiate
End If
designTimeInstance.SetComponentProperty("CustomProperty", txtCustomPropertyValue.Text)
Me.Close
End Sub
Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Me.Close
End Sub
End Class
End Namespace