Partilhar via


Desenvolvendo uma interface do usuário para uma tarefa personalizada

Aplica-se a: Tempo de execução de integração do SSIS do SQL Server no Azure Data Factory

O modelo de objeto do Integration Services permite que desenvolvedores de tarefas personalizadas criem facilmente uma interface de usuário personalizada para uma tarefa que pode ser integrada e exibida no SQL Server Data Tools (SSDT). A interface de usuário pode fornecer informações úteis para o usuário no Designer SSIS, e orientar usuários na configuração correta das propriedades e definições da tarefa personalizada.

O desenvolvimento de uma interface de usuário personalizada para uma tarefa envolve o uso de duas classes importantes. A tabela a seguir descreve essas classes.

Classe Descrição
DtsTaskAttribute Um atributo que identifica uma tarefa gerenciada e fornece informações em tempo de design através de suas propriedades para controlar como o Designer SSIS exibe e interage com o objeto.
IDtsTaskUI Uma interface usada pela tarefa para associar a tarefa com sua interface de usuário personalizada.

Esta seção descreve a função do atributo DtsTaskAttribute e a interface IDtsTaskUI quando você está desenvolvendo uma interface de usuário para uma tarefa personalizada e fornece detalhes sobre como criar, integrar, implantar e depurar a tarefa dentro do Designer SSIS.

O Designer SSIS fornece vários pontos de entrada à interface do usuário para a tarefa: o usuário pode selecionar Editar no menu de atalho, clicar duas vezes na tarefa ou clicar no link Mostrar Editor no final da folha de propriedades. Quando o usuário acessa um desses pontos de entrada, o Designer SSIS localiza e carrega o assembly que contém a interface de usuário para a tarefa. A interface de usuário para a tarefa é responsável pela criação da caixa de diálogo de propriedades que é exibida para o usuário no SQL Server Data Tools (SSDT).

Uma tarefa e sua interface de usuário são entidades separadas. Elas devem ser implementadas em assemblies separados para reduzir o trabalho de localização, implantação e manutenção. Em geral, a DLL da tarefa não carrega, chama ou contém conhecimento sobre sua interface de usuário, com exceção das informações contidas nos valores de atributo DtsTaskAttribute codificados na tarefa. Essa é a única forma de associação entre uma tarefa e sua interface de usuário.

O atributo DtsTask

O atributo DtsTaskAttribute é incluído no código da classe de tarefa para associar uma tarefa à sua interface de usuário. O Designer SSIS usa as propriedades do atributo para determinar como exibir a tarefa no designer. Essas propriedades incluem o nome a ser exibido e o ícone, caso exista.

A tabela a seguir descreve as propriedades do atributo DtsTaskAttribute.

Propriedade Descrição
DisplayName Exibe o nome da tarefa na caixa de ferramentas Fluxo de Controle.
Description A descrição da tarefa (herdada do DtsLocalizableAttribute). Essa propriedade é mostrada em Dicas de Ferramenta.
IconResource O ícone exibido no Designer SSIS.
RequiredProductLevel Se ele for usado, defina-o com um dos valores da enumeração DTSProductLevel. Por exemplo, RequiredProductLevel = DTSProductLevel.None.
TaskContact Mantém informações de contato para ocasiões em que a tarefa exige suporte técnico.
TaskType Atribui um tipo à tarefa.
Attribute.TypeId Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Atributo. Para obter mais informações, consulte a propriedade Attribute.TypeID na biblioteca de classes .NET Framework.
UITypeName O nome de tipo do assembly que é usado pelo Designer SSIS para carregar o assembly. Esta propriedade é usada para localizar o assembly de interface de usuário para a tarefa.

O exemplo de código a seguir mostra a aparência do DtsTaskAttribute, codificado acima da definição de classe.

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
namespace Microsoft.SSIS.Samples  
{  
  [DtsTask  
  (  
   DisplayName = "MyTask",  
   IconResource = "MyTask.MyTaskIcon.ico",  
   UITypeName = "My Custom Task," +  
   "Version=1.0.0.0," +  
   "Culture = Neutral," +  
   "PublicKeyToken = 12345abc6789de01",  
   TaskType = "PackageMaintenance",  
   TaskContact = "MyTask; company name; any other information",  
   RequiredProductLevel = DTSProductLevel.None  
   )]  
  public class MyTask : Task  
  {  
    // Your code here.  
  }  
}  
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
  
<DtsTask(DisplayName:="MyTask", _  
 IconResource:="MyTask.MyTaskIcon.ico", _  
 UITypeName:="My Custom Task," & _  
 "Version=1.0.0.0,Culture=Neutral," & _  
 "PublicKeyToken=12345abc6789de01", _  
 TaskType:="PackageMaintenance", _  
 TaskContact:="MyTask; company name; any other information", _  
 RequiredProductLevel:=DTSProductLevel.None)> _  
Public Class MyTask  
  Inherits Task  
  
  ' Your code here.  
  
End Class 'MyTask  

O Designer SSIS utiliza a propriedade UITypeName do atributo que inclui o nome do assembly, o nome do tipo, a versão, a cultura e o token de chave pública, para localizar o assembly no Cache de Assembly Global (GAC) e carregá-lo para ser usado pelo designer.

Depois de o assembly ser localizado, o Designer SSIS utiliza as outras propriedades do atributo para exibir informações adicionais sobre a tarefa no Designer SSIS, tais como nome, ícone e descrição da tarefa.

As propriedades DisplayName, Descriptione IconResource especificam como a tarefa é apresentada ao usuário. A propriedade IconResource contém a ID do recurso do ícone inserida no assembly de interface do usuário. O designer carrega o recurso de ícone pelo ID do assembly e exibe-o ao lado do nome da tarefa na caixa de ferramentas e na superfície do designer quando a tarefa é adicionada a um pacote. Se uma tarefa não fornecer um recurso de ícone, o designer usará um ícone padrão para a tarefa.

The IDTSTaskUI Interface

A interface IDtsTaskUI define a coleção de métodos e propriedades chamados pelo Designer SSIS para inicializar e exibir a interface de usuário associada à tarefa. Quando a interface de usuário para uma tarefa é invocada, o designer chama o método Initialize, implementado pela interface de usuário da tarefa quando você o escreveu, e depois fornece as coleções TaskHost e Connections da tarefa e pacote, respectivamente, como parâmetros. Essas coleções são armazenadas localmente e usadas subsequentemente no método GetView.

O designer chama o método GetView para solicitar a janela que é exibida no Designer SSIS. A tarefa cria uma instância da janela que contém a interface de usuário para a tarefa e retorna a interface de usuário a ser exibida pelo designer. Normalmente, são fornecidos os objetos TaskHost e Connections para a janela através de um construtor sobrecarregado; assim, eles podem ser usados para configurar a tarefa.

O Designer SSIS chama o método GetView da tarefa UI para exibir a interface de usuário para a tarefa. A interface de usuário da tarefa retorna o formulário Windows desse método e o Designer SSIS mostra esse formulário como uma caixa de diálogo modal. Quando o formulário é fechado, o Designer SSIS verifica o valor da propriedade DialogResult do formulário para determinar se a tarefa foi modificada e se essas modificações devem ser salvas. Se o valor da propriedade DialogResult for OK, o Designer SSIS chamará os métodos de persistência da tarefa para salvar as alterações; caso contrário, as alterações serão descartadas.

O exemplo de código a seguir implementa a interface IDtsTaskUI e pressupõe a existência de uma classe de formulário do Windows nomeada SampleTaskForm.

using System;  
using System.Windows.Forms;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Runtime.Design;  
  
namespace Sample  
{  
   public class HelloWorldTaskUI : IDtsTaskUI  
   {  
      TaskHost   taskHost;  
      Connections connections;  
      public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)  
      {  
         this.taskHost = taskHost;  
         IDtsConnectionService cs = serviceProvider.GetService  
         ( typeof( IDtsConnectionService ) ) as   IDtsConnectionService;   
         this.connections = cs.GetConnections();  
      }  
      public ContainerControl GetView()  
      {  
        return new HelloWorldTaskForm(this.taskHost, this.connections);  
      }  
     public void Delete(IWin32Window parentWindow)  
     {  
     }  
     public void New(IWin32Window parentWindow)  
     {  
     }  
   }  
}  
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
Imports Microsoft.SqlServer.Dts.Runtime.Design  
Imports System.Windows.Forms  
  
Public Class HelloWorldTaskUI  
  Implements IDtsTaskUI  
  
  Dim taskHost As TaskHost  
  Dim connections As Connections  
  
  Public Sub Initialize(ByVal taskHost As TaskHost, ByVal serviceProvider As IServiceProvider) _  
    Implements IDtsTaskUI.Initialize  
  
    Dim cs As IDtsConnectionService  
  
    Me.taskHost = taskHost  
    cs = DirectCast(serviceProvider.GetService(GetType(IDtsConnectionService)), IDtsConnectionService)  
    Me.connections = cs.GetConnections()  
  
  End Sub  
  
  Public Function GetView() As ContainerControl _  
    Implements IDtsTaskUI.GetView  
  
    Return New HelloWorldTaskForm(Me.taskHost, Me.connections)  
  
  End Function  
  
  Public Sub Delete(ByVal parentWindow As IWin32Window) _  
    Implements IDtsTaskUI.Delete  
  
  End Sub  
  
  Public Sub [New](ByVal parentWindow As IWin32Window) _  
    Implements IDtsTaskUI.[New]  
  
  End Sub  
  
End Class  

Consulte Também

Criar uma tarefa personalizada
Codificar uma tarefa personalizada
Desenvolver uma interface do usuário para uma tarefa personalizada