Freigeben über


Entwickeln einer Benutzeroberfläche für einen benutzerdefinierten Verbindungs-Manager

Gilt für: SQL Server SSIS Integration Runtime in Azure Data Factory

Nachdem Sie die Implementierung der Eigenschaften und Methoden der Basisklasse überschrieben haben, um benutzerdefinierte Funktionen bereitzustellen, möchten Sie vielleicht eine benutzerdefinierte Oberfläche für den Verbindungs-Manager erstellen. Wenn Sie keine individuelle Benutzeroberfläche erstellen, können die Benutzer den Verbindungs-Manager nur über das Eigenschaftenfenster konfigurieren.

In einem individuellen Benutzeroberflächenprojekt oder einer entsprechenden Assembly gibt es im Allgemeinen zwei Klassen: eine Klasse, die IDtsConnectionManagerUI implementiert, und das Windows Form, in dem diese angezeigt wird, um Informationen vom Benutzer zu erfassen.

Wichtig

Nach dem Signieren und Erstellen der benutzerdefinierten Oberfläche und der Installation im globalen Assemblycache (siehe Codieren eines benutzerdefinierten Verbindungs-Managers) müssen Sie den vollqualifizierten Namen dieser Klasse in der UITypeName-Eigenschaft des DtsConnectionAttribute bereitstellen.

Hinweis

Die meisten Tasks, Quellen und Ziele, die in Integration Services integriert wurden, können nur mit bestimmten Typen integrierter Verbindungs-Manager verwendet werden. Daher können diese Beispiele nicht mit den integrierten Tasks und Komponenten getestet werden.

Codieren der Benutzeroberflächenklasse

Die IDtsConnectionManagerUI-Schnittstelle verfügt über vier Methoden: Initialize, New, Edit und Delete. In den folgenden Abschnitten werden diese vier Methoden beschrieben.

Hinweis

Für die Delete-Methode müssen Sie möglicherweise keinen Code schreiben, wenn beim Löschen einer Instanz des Verbindungs-Managers durch einen Benutzer kein Cleanup erforderlich ist.

Initialisieren der Benutzeroberfläche

In der Initialize-Methode stellt der Designer einen Verweis auf den Verbindungs-Manager, der konfiguriert wird, bereit, damit die Benutzeroberflächenklasse die Eigenschaften des Verbindungs-Managers ändern kann. Wie im folgenden Beispiel dargestellt, muss der Code den Verweis auf den Verbindungs-Manager zur späteren Verwendung zwischenspeichern.

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;  
  
}  

Erstellen einer neuen Instanz der Benutzeroberfläche

Die New-Methode, bei der es sich nicht um einen Konstruktor handelt, wird nach der Initialize-Methode aufgerufen, wenn der Benutzer eine neue Instanz des Verbindungs-Managers erstellt. Sie sollten in der New-Methode das Formular zum Bearbeiten anzeigen, außer der Benutzer hat einen vorhandenen Verbindungs-Manager kopiert und eingefügt. Im folgenden Codebeispiel wird eine Implementierung dieser Methode veranschaulicht.

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);  
  }  

Bearbeiten des Verbindungs-Managers

Da das Formular zum Bearbeiten sowohl von der New-Methode als auch von der Edit-Methode aufgerufen wird, sollten Sie eine Hilfsfunktion zum Kapseln des Codes, der das Formular anzeigt, verwenden. Im folgenden Codebeispiel wird eine Implementierung dieser Hilfsfunktion veranschaulicht.

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;  
   }  
  
 }  

In der Edit-Methode müssen Sie nur das Formular zum Bearbeiten anzeigen. Im folgenden Codebeispiel wird eine Implementierung der Edit-Methode veranschaulicht, die den Code für das Formular mit einer Hilfsfunktion kapselt.

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);  
  
}  

Codieren des Benutzeroberflächenformulars

Nachdem Sie die Benutzeroberflächenklasse erstellt haben, die die Methoden der IDtsConnectionManagerUI-Schnittstelle implementiert, müssen Sie ein Windows Form erstellen, in dem der Benutzer die Eigenschaften des Verbindungs-Managers konfigurieren kann.

Initialisieren des Benutzeroberflächenformulars

Wenn Sie das benutzerdefinierte Formular zum Bearbeiten anzeigen, können Sie einen Verweis an den Verbindungs-Manager übergeben, der bearbeitet wird. Dazu können Sie entweder einen benutzerdefinierten Konstruktor für die Formularklasse verwenden oder, wie hier gezeigt, eine eigene Initialize-Methode erstellen.

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();  
  
 }  

Festlegen von Eigenschaften im Benutzeroberflächenformular

Zum Schluss benötigt die Formularklasse eine Hilfsfunktion, die die Steuerelemente im Formular auffüllt, wenn es zum ersten Mal mit den vorhandenen oder den Standardwerten der Eigenschaften des Verbindungs-Managers geladen wird. Außerdem benötigt die Formularklasse eine ähnliche Funktion, die die Werte der Eigenschaften auf die vom Benutzer eingegebenen Werte setzt, wenn dieser auf OK klickt und das Formular schließt.

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);  
   }  
  
 }  

Weitere Informationen

Erstellen eines benutzerdefinierten Verbindungs-Managers
Codieren eines benutzerdefinierten Verbindungs-Managers