Desenvolvendo uma interface de usuário para um gerenciador de conexões personalizado
se aplica a:SQL Server SSIS Integration Runtime no Azure Data Factory
Depois de substituir a implementação das propriedades e métodos da classe base para fornecer sua funcionalidade personalizada, convém criar uma interface de usuário personalizada para seu gerenciador de conexões. Se você não criar uma interface de usuário personalizada, os usuários poderão configurar seu gerenciador de conexões somente usando a janela Propriedades.
Em um projeto ou assembly de interface do usuário personalizado, você normalmente tem duas classes: uma classe que implementa IDtsConnectionManagerUIe o formulário do Windows que ele exibe para coletar informações do usuário.
Importante
Depois de assinar e criar sua interface de usuário personalizada e instalá-la no cache de assembly global, conforme descrito em Coding a Custom Connection Manager, lembre-se de fornecer o nome totalmente qualificado dessa classe na propriedade UITypeName do DtsConnectionAttribute.
Observação
A maioria das tarefas, origens e destinos que foram incorporados ao Integration Services funcionam apenas com tipos específicos de gerenciadores de conexões internos. Portanto, esses exemplos não podem ser testados com as tarefas e componentes internos.
Codificando a classe de interface do usuário
A interface IDtsConnectionManagerUI tem quatro métodos: Initialize, New, Edite Delete. As seções a seguir descrevem esses quatro métodos.
Observação
Talvez não seja necessário escrever nenhum código para o método Delete se nenhuma limpeza for necessária quando o usuário excluir uma instância do gerenciador de conexões.
Inicializando a interface do usuário
No método Initialize, o designer fornece uma referência ao gerenciador de conexões que está sendo configurado para que a classe de interface do usuário possa modificar as propriedades do gerenciador de conexões. Conforme mostrado no código a seguir, seu código precisa armazenar em cache a referência ao gerenciador de conexões para uso posterior.
Public Sub Initialize(ByVal connectionManager As Microsoft.SqlServer.Dts.Runtime.ConnectionManager, ByVal serviceProvider As System.IServiceProvider) Implements Microsoft.SqlServer.Dts.Runtime.Design.IDtsConnectionManagerUI.Initialize
_connectionManager = connectionManager
_serviceProvider = serviceProvider
End Sub
public void Initialize(Microsoft.SqlServer.Dts.Runtime.ConnectionManager connectionManager, System.IServiceProvider serviceProvider)
{
_connectionManager = connectionManager;
_serviceProvider = serviceProvider;
}
Criando uma nova instância da interface do usuário
O método New, que não é um construtor, é chamado após o método Initialize quando o usuário cria uma nova instância do gerenciador de conexões. No método New, você geralmente deseja exibir o formulário para edição, a menos que o usuário tenha copiado e colado um gerenciador de conexões existente. O código a seguir mostra uma implementação desse método.
Public Function [New](ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, ByVal connectionUIArgs As Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs) As Boolean Implements Microsoft.SqlServer.Dts.Runtime.Design.IDtsConnectionManagerUI.New
Dim clipboardService As IDtsClipboardService
clipboardService = _
DirectCast(_serviceProvider.GetService(GetType(IDtsClipboardService)), IDtsClipboardService)
If Not clipboardService Is Nothing Then
' If the connection manager has been copied and pasted, take no action.
If clipboardService.IsPasteActive Then
Return True
End If
End If
Return EditSqlConnection(parentWindow)
End Function
public bool New(System.Windows.Forms.IWin32Window parentWindow, Microsoft.SqlServer.Dts.Runtime.Connections connections, Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs connectionUIArgs)
{
IDtsClipboardService clipboardService;
clipboardService = (IDtsClipboardService)_serviceProvider.GetService(typeof(IDtsClipboardService));
if (clipboardService != null)
// If connection manager has been copied and pasted, take no action.
{
if (clipboardService.IsPasteActive)
{
return true;
}
}
return EditSqlConnection(parentWindow);
}
Editando o Connection Manager
Como o formulário para edição é chamado a partir dos métodos New e Edit, é conveniente usar uma função auxiliar para encapsular o código que exibe o formulário. O código a seguir mostra uma implementação dessa função auxiliar.
Private Function EditSqlConnection(ByVal parentWindow As IWin32Window) As Boolean
Dim sqlCMUIForm As New SqlConnMgrUIFormVB
sqlCMUIForm.Initialize(_connectionManager, _serviceProvider)
If sqlCMUIForm.ShowDialog(parentWindow) = DialogResult.OK Then
Return True
Else
Return False
End If
End Function
private bool EditSqlConnection(IWin32Window parentWindow)
{
SqlConnMgrUIFormCS sqlCMUIForm = new SqlConnMgrUIFormCS();
sqlCMUIForm.Initialize(_connectionManager, _serviceProvider);
if (sqlCMUIForm.ShowDialog(parentWindow) == DialogResult.OK)
{
return true;
}
else
{
return false;
}
}
No método Edit, basta exibir o formulário para edição. O código a seguir mostra uma implementação do método Edit que usa uma função auxiliar para encapsular o código para o formulário.
Public Function Edit(ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, ByVal connectionUIArg As Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs) As Boolean Implements Microsoft.SqlServer.Dts.Runtime.Design.IDtsConnectionManagerUI.Edit
Return EditSqlConnection(parentWindow)
End Function
public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Microsoft.SqlServer.Dts.Runtime.Connections connections, Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs connectionUIArg)
{
return EditSqlConnection(parentWindow);
}
Codificando o formulário de interface do usuário
Depois de criar a classe de interface do usuário que implementa os métodos da interface IDtsConnectionManagerUI, você deve criar um formulário do Windows onde o usuário pode configurar as propriedades do seu gerenciador de conexões.
Inicializando o formulário de interface do usuário
Ao exibir seu formulário personalizado para edição, você pode passar uma referência para o gerenciador de conexões que está sendo editado. Você pode passar essa referência usando um construtor personalizado para a classe de formulário ou criando seu próprio método Initialize, conforme mostrado aqui.
Public Sub Initialize(ByVal connectionManager As ConnectionManager, ByVal serviceProvider As IServiceProvider)
_connectionManager = connectionManager
_serviceProvider = serviceProvider
ConfigureControlsFromConnectionManager()
EnableControls()
End Sub
public void Initialize(ConnectionManager connectionManager, IServiceProvider serviceProvider)
{
_connectionManager = connectionManager;
_serviceProvider = serviceProvider;
ConfigureControlsFromConnectionManager();
EnableControls();
}
Definindo propriedades no formulário de interface do usuário
Finalmente, sua classe de formulário precisa de uma função auxiliar que preencha os controles no formulário quando ele é carregado pela primeira vez com os valores existentes ou padrão das propriedades do gerenciador de conexões. Sua classe de formulário também precisa de uma função semelhante que define os valores das propriedades para os valores inseridos pelo usuário quando o usuário clica em OK e fecha o formulário.
Private Const CONNECTIONNAME_BASE As String = "SqlConnectionManager"
Private Sub ConfigureControlsFromConnectionManager()
Dim tempName As String
Dim tempServerName As String
Dim tempDatabaseName As String
With _connectionManager
tempName = .Properties("Name").GetValue(_connectionManager).ToString
If Not String.IsNullOrEmpty(tempName) Then
_connectionName = tempName
Else
_connectionName = CONNECTIONNAME_BASE
End If
tempServerName = .Properties("ServerName").GetValue(_connectionManager).ToString
If Not String.IsNullOrEmpty(tempServerName) Then
_serverName = tempServerName
txtServerName.Text = _serverName
End If
tempDatabaseName = .Properties("DatabaseName").GetValue(_connectionManager).ToString
If Not String.IsNullOrEmpty(tempDatabaseName) Then
_databaseName = tempDatabaseName
txtDatabaseName.Text = _databaseName
End If
End With
End Sub
Private Sub ConfigureConnectionManagerFromControls()
With _connectionManager
.Properties("Name").SetValue(_connectionManager, _connectionName)
.Properties("ServerName").SetValue(_connectionManager, _serverName)
.Properties("DatabaseName").SetValue(_connectionManager, _databaseName)
End With
End Sub
private const string CONNECTIONNAME_BASE = "SqlConnectionManager";
private void ConfigureControlsFromConnectionManager()
{
string tempName;
string tempServerName;
string tempDatabaseName;
{
tempName = _connectionManager.Properties["Name"].GetValue(_connectionManager).ToString();
if (!String.IsNullOrEmpty(tempName))
{
_connectionName = tempName;
}
else
{
_connectionName = CONNECTIONNAME_BASE;
}
tempServerName = _connectionManager.Properties["ServerName"].GetValue(_connectionManager).ToString();
if (!String.IsNullOrEmpty(tempServerName))
{
_serverName = tempServerName;
txtServerName.Text = _serverName;
}
tempDatabaseName = _connectionManager.Properties["DatabaseName"].GetValue(_connectionManager).ToString();
if (!String.IsNullOrEmpty(tempDatabaseName))
{
_databaseName = tempDatabaseName;
txtDatabaseName.Text = _databaseName;
}
}
}
private void ConfigureConnectionManagerFromControls()
{
{
_connectionManager.Properties["Name"].SetValue(_connectionManager, _connectionName);
_connectionManager.Properties["ServerName"].SetValue(_connectionManager, _serverName);
_connectionManager.Properties["DatabaseName"].SetValue(_connectionManager, _databaseName);
}
}
Ver também
Criando um personalizado do Connection Manager
codificando um personalizado do Connection Manager