Udostępnij za pośrednictwem


Tworzenie interfejsu użytkownika dla niestandardowego menedżera połączeń

Dotyczy:sql Server SSIS Integration Runtime w usłudze Azure Data Factory

Po zastąpieniu implementacji właściwości i metod klasy bazowej w celu zapewnienia niestandardowych funkcji możesz utworzyć niestandardowy interfejs użytkownika dla menedżera połączeń. Jeśli nie utworzysz niestandardowego interfejsu użytkownika, użytkownicy będą mogli skonfigurować menedżera połączeń tylko przy użyciu okna Właściwości.

W niestandardowym projekcie lub zestawie interfejsu użytkownika zwykle istnieją dwie klasy klasy implementujące IDtsConnectionManagerUIi formularz systemu Windows wyświetlany w celu zbierania informacji od użytkownika.

Ważny

Po podpisaniu i utworzeniu niestandardowego interfejsu użytkownika i zainstalowaniu go w globalnej pamięci podręcznej zestawów zgodnie z opisem w Kodowanie niestandardowego menedżera połączeńnależy pamiętać o podaniu w pełni kwalifikowanej nazwy tej klasy we właściwości UITypeNameDtsConnectionAttribute.

Nuta

Większość zadań, źródeł i miejsc docelowych wbudowanych w usługi Integration Services działa tylko z określonymi typami wbudowanych menedżerów połączeń. W związku z tym te próbki nie mogą być testowane za pomocą wbudowanych zadań i składników.

Kodowanie klasy interfejsu użytkownika

Interfejs IDtsConnectionManagerUI ma cztery metody: Initialize, New, Editi Delete. W poniższych sekcjach opisano te cztery metody.

Nuta

Może nie być konieczne napisanie żadnego kodu dla metody Delete, jeśli nie jest wymagane czyszczenie, gdy użytkownik usunie wystąpienie menedżera połączeń.

Inicjowanie interfejsu użytkownika

W metodzie Initialize projektant udostępnia odwołanie do konfigurowanego menedżera połączeń, aby klasa interfejsu użytkownika mogła modyfikować właściwości menedżera połączeń. Jak pokazano w poniższym kodzie, kod musi buforować odwołanie do menedżera połączeń do późniejszego użycia.

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

Tworzenie nowego wystąpienia interfejsu użytkownika

Metoda New, która nie jest konstruktorem, jest wywoływana po metodzie Initialize, gdy użytkownik tworzy nowe wystąpienie menedżera połączeń. W metodzie New zazwyczaj chcesz wyświetlić formularz do edycji, chyba że użytkownik skopiował i wklejił istniejącego menedżera połączeń. Poniższy kod przedstawia implementację tej metody.

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

Edytowanie Menedżera połączeń

Ponieważ formularz do edycji jest wywoływany zarówno z New, jak i metod Edit, wygodnie jest użyć funkcji pomocniczej, aby hermetyzować kod, który wyświetla formularz. Poniższy kod przedstawia implementację tej funkcji pomocniczej.

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

W metodzie Edit wystarczy wyświetlić formularz do edycji. Poniższy kod przedstawia implementację metody Edit, która używa funkcji pomocniczej do hermetyzacji kodu formularza.

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

Kodowanie formularza interfejsu użytkownika

Po utworzeniu klasy interfejsu użytkownika, która implementuje metody interfejsu IDtsConnectionManagerUI, należy utworzyć formularz systemu Windows, w którym użytkownik może skonfigurować właściwości menedżera połączeń.

Inicjowanie formularza interfejsu użytkownika

Po wyświetleniu niestandardowego formularza do edycji można przekazać odwołanie do edytowanego menedżera połączeń. To odwołanie można przekazać przy użyciu konstruktora niestandardowego dla klasy formularza lub tworząc własną metodę Initialize, jak pokazano poniżej.

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

Ustawianie właściwości w formularzu interfejsu użytkownika

Na koniec klasa formularzy wymaga funkcji pomocniczej, która wypełnia kontrolki w formularzu po pierwszym załadowaniu z istniejącymi lub domyślnymi wartościami właściwości menedżera połączeń. Klasa formularzy wymaga również podobnej funkcji, która ustawia wartości właściwości na wartości wprowadzone przez użytkownika, gdy użytkownik kliknie przycisk OK i zamknie formularz.

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

Zobacz też

tworzenie niestandardowego menedżera połączeń
kodowanie niestandardowego menedżera połączeń