Desenvolvendo uma interface do usuário para uma tarefa personalizada
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 Business Intelligence Development Studio. 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 |
---|---|
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. |
|
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 de 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 Business Intelligence Development Studio.
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 |
---|---|
Exibe o nome da tarefa na caixa de ferramentas Fluxo de Controle. |
|
A descrição da tarefa (herdada do DtsLocalizableAttribute). Essa propriedade é mostrada em Dicas de Ferramenta. |
|
O ícone exibido no Designer SSIS. |
|
Se ele for usado, defina-o com um dos valores da enumeração DTSProductLevel. Por exemplo, RequiredProductLevel = DTSProductLevel.None. |
|
Mantém informações de contato para ocasiões em que a tarefa requer suporte técnico. |
|
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. |
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 incorporada 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 subseqüentemente 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
|