Sviluppo di un'interfaccia utente per una gestione connessione personalizzata
Si applica a: SQL Server SSIS Integration Runtime in Azure Data Factory
Dopo aver eseguito l'override dell'implementazione delle proprietà e dei metodi della classe di base per fornire la funzionalità personalizzata, è possibile creare un'interfaccia utente personalizzata per la gestione connessione. Se non si crea un'interfaccia utente personalizzata, gli utenti possono configurare la gestione connessione solo utilizzando la finestra delle proprietà.
In un progetto o assembly di interfaccia utente personalizzata sono in genere incluse due classi: una classe che implementa l'oggetto IDtsConnectionManagerUI e il Windows Form che quest'ultimo visualizza per raccogliere informazioni dall'utente.
Importante
Dopo aver firmato, compilato e installato l'interfaccia utente nella Global Assembly Cache, come descritto in Scrittura del codice di una gestione connessione personalizzata, specificare il nome completo di questa classe nella proprietà UITypeName dell'oggetto DtsConnectionAttribute.
Nota
La maggior parte delle attività, delle origini e delle destinazioni incluse in Integration Services funziona solo con tipi specifici di gestioni connessioni predefinite. Questi esempi, pertanto, non possono essere testati con le attività e i componenti predefiniti.
Scrittura del codice della classe dell'interfaccia utente
L'interfaccia IDtsConnectionManagerUI include quattro metodi: Initialize, New, Edit e Delete. Nelle sezioni seguenti vengono descritti questi quattro metodi.
Nota
Può non essere necessario scrivere codice per il metodo Delete se non è richiesta alcuna pulizia quando l'utente elimina un'istanza della gestione connessione.
Inizializzazione dell'interfaccia utente
Nel metodo Initialize la finestra di progettazione fornisce un riferimento alla gestione connessione configurata, in modo che la classe dell'interfaccia utente possa modificarne le proprietà. Come illustrato nel codice seguente, il codice deve memorizzare nella cache il riferimento alla gestione connessione per un uso successivo.
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;
}
Creazione di una nuova istanza dell'interfaccia utente
Il metodo New, che non è un costruttore, viene chiamato dopo il metodo Initialize quando l'utente crea una nuova istanza della gestione connessione. Nel metodo New si desidera in genere visualizzare il form per la modifica, a meno che l'utente non abbia copiato e incollato una gestione connessione esistente. Nell'esempio di codice seguente è illustrata un'implementazione di questo metodo.
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);
}
Modifica della gestione connessione
Poiché il form per la modifica viene chiamato dai metodi New e Edit, è consigliabile utilizzare una funzione di supporto per incapsulare il codice che visualizza il form. Nell'esempio di codice seguente è illustrata un'implementazione di questa funzione di supporto.
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;
}
}
Nel metodo Edit, è necessario semplicemente visualizzare il form per la modifica. Nel codice seguente è illustrata un'implementazione del metodo Edit che utilizza una funzione di supporto per incapsulare il codice per il form.
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);
}
Scrittura del codice del form dell'interfaccia utente
Dopo aver creato la classe dell'interfaccia utente che implementa i metodi dell'interfaccia IDtsConnectionManagerUI, è necessario creare un Windows Form in cui l'utente possa configurare le proprietà della gestione connessione.
Inizializzazione del form dell'interfaccia utente
Quando si visualizza il form personalizzato per la modifica, è possibile passare un riferimento alla gestione connessione da modificare. È possibile passare questo riferimento tramite un costruttore personalizzato per la classe del form oppure creando un metodo Initialize personalizzato come illustrato di seguito.
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();
}
Impostazione di proprietà sul form dell'interfaccia utente
Infine, la classe del form richiede una funzione di supporto che popola i controlli del form la prima volta che viene caricato con i valori esistenti o predefiniti delle proprietà della gestione connessione. La classe del form richiede inoltre una funzione simile che imposta i valori delle proprietà sui valori immessi dall'utente quando fa clic su OK e chiude il form.
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);
}
}
Vedi anche
Creazione di una gestione connessione personalizzata
Scrittura del codice di una gestione connessione personalizzata