사용자 지정 연결 관리자의 사용자 인터페이스 개발Developing a User Interface for a Custom Connection Manager

기본 클래스의 속성 및 메서드 구현을 재정의하여 사용자 지정 기능을 제공한 후 연결 관리자의 사용자 지정 사용자 인터페이스를 만들 수 있습니다.After you have overridden the implementation of the properties and methods of the base class to provide your custom functionality, you may want to create a custom user interface for your connection manager. 사용자 지정 사용자 인터페이스를 만들지 않은 경우 사용자는 속성 창에서만 연결 관리자를 구성할 수 있습니다.If you do not create a custom user interface, users can configure your connection manager only by using the Properties window.

사용자 지정 사용자 인터페이스 프로젝트 또는 어셈블리에는 일반적으로 두 개의 클래스가 포함됩니다. 하나는 IDtsConnectionManagerUI를 구현하는 클래스이고 다른 하나는 이 클래스에서 사용자로부터 정보를 수집하기 위해 표시하는 Windows Form입니다.In a custom user interface project or assembly, you normally have two classes—a class that implements IDtsConnectionManagerUI, and the Windows form that it displays to gather information from the user.

중요

사용자 지정 사용자 인터페이스 서명 및 빌드하고 전역 어셈블리 캐시에서에 설명 된 대로 설치 후 사용자 지정 연결 관리자 코딩에서이 클래스의 정규화 된 이름을 제공 해야는 UITypeName 의 속성은 DtsConnectionAttribute합니다.After signing and building your custom user interface and installing it in the global assembly cache as described in Coding a Custom Connection Manager, remember to provide the fully qualified name of this class in the UITypeName property of the DtsConnectionAttribute.

참고

Integration ServicesIntegration Services에 기본 제공된 대부분의 태스크, 원본 및 대상은 특정 유형의 기본 제공 연결 관리자와만 사용할 수 있습니다.Most of the tasks, sources, and destinations that have been built into Integration ServicesIntegration Services work only with specific types of built-in connection managers. 따라서 이러한 예제를 기본 제공 태스크 및 구성 요소와 함께 테스트할 수 없습니다.Therefore, these samples cannot be tested with the built-in tasks and components.

사용자 인터페이스 클래스 코딩Coding the User Interface Class

IDtsConnectionManagerUI 인터페이스에는 Initialize, New, Edit, Delete 등의 메서드 네 개가 있습니다.The IDtsConnectionManagerUI interface has four methods: Initialize, New, Edit, and Delete. 다음 섹션에서는 이 네 개의 메서드에 대해 설명합니다.The following sections describe these four methods.

참고

사용자가 연결 관리자의 인스턴스를 삭제할 때 정리 작업을 수행할 필요가 없으면 Delete 메서드에 대한 코드를 작성하지 않아도 됩니다.You may not need to write any code for the Delete method if no cleanup is required when the user deletes an instance of the connection manager.

사용자 인터페이스 초기화Initializing the User Interface

Initialize 메서드에서 디자이너는 사용자 인터페이스 클래스에서 연결 관리자의 속성을 수정할 수 있도록 구성할 연결 관리자에 대한 참조를 제공합니다.In the Initialize method, the designer provides a reference to the connection manager that is being configured so that the user interface class can modify the connection manager's properties. 코드를 연결 managerfor에 대 한 참조를 캐시 해야 다음 코드에 나와 있는 것 처럼 나중에 사용 합니다.As shown in the following code, your code needs to cache the reference to the connection managerfor later use.

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;  

}  

사용자 인터페이스의 새 인스턴스 만들기Creating a New Instance of the User Interface

생성자가 아닌 New 메서드는 사용자가 연결 관리자의 새 인스턴스를 만들 때 Initialize 메서드 다음에 호출됩니다.The New method, which is not a constructor, is called after the Initialize method when the user creates a new instance of the connection manager. 사용자가 기존 연결 관리자를 복사하여 붙여 넣지 않은 경우 New 메서드에서는 일반적으로 편집용 폼을 표시할 수 있습니다.In the New method, you usually want to display the form for editing, unless the user has copied and pasted an existing connection manager. 다음 코드에서는 이 메서드의 구현을 보여 줍니다.The following code shows an implementation of this method.

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

연결 관리자 편집Editing the Connection Manager

편집용 폼은 NewEdit 메서드 모두에서 호출되므로 도우미 함수를 사용하여 폼을 표시하는 코드를 캡슐화하는 것이 편리합니다.Because the form for editing is called from both the New and the Edit methods, it is convenient to use a helper function to encapsulate the code that displays the form. 다음 코드에서는 이 도우미 함수의 구현을 보여 줍니다.The following code shows an implementation of this helper function.

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

 }  

Edit 메서드에서는 편집용 폼을 표시하기만 하면 됩니다.In the Edit method, you simply have to display the form for editing. 다음 코드에서는 도우미 함수를 사용하여 폼의 코드를 캡슐화하는 Edit 메서드의 구현을 보여 줍니다.The following code shows an implementation of the Edit method that uses a helper function to encapsulate the code for the 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);  

}  

사용자 인터페이스 폼 코딩Coding the User Interface Form

IDtsConnectionManagerUI 인터페이스의 메서드를 구현하는 사용자 인터페이스 클래스를 만든 후에는 사용자가 연결 관리자의 속성을 구성할 수 있는 Windows Form을 만들어야 합니다.After creating the user interface class that implements the methods of the IDtsConnectionManagerUI interface, you must create a Windows form where the user can configure the properties of your connection manager.

사용자 인터페이스 폼 초기화Initializing the User Interface Form

편집용 사용자 지정 폼을 표시하면 편집할 연결 관리자에 대한 참조를 전달할 수 있습니다.When you display your custom form for editing, you can pass a reference to the connection manager that is being edited. 폼 클래스에 대 한 사용자 지정 생성자를 사용 하 여 하거나 직접 만들어이 참조를 전달할 수 있습니다 초기화 메서드를 다음과 같이 합니다.You can pass this reference either by using a custom constructor for the form class, or by creating your own Initialize method as shown here.

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

 }  

사용자 인터페이스 폼의 속성 설정Setting Properties on the User Interface Form

마지막으로 폼 클래스에는 해당 폼이 처음 로드될 때 폼의 컨트롤을 연결 관리자의 기존 또는 기본 속성 값으로 채우는 도우미 함수가 필요합니다.Finally, your form class needs a helper function that populates the controls on the form when it is first loaded with the existing or the default values of the properties of the connection manager. 또한 폼 클래스에는 사용자가 "확인"을 클릭하고 폼을 닫을 때 속성 값을 사용자가 입력한 값으로 설정하는 유사한 함수가 필요합니다.Your form class also needs a similar function that sets the values of the properties to the values entered by the user when the user clicks OK and closes the 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);  
   }  

 }  

관련 항목:See Also

사용자 지정 연결 관리자 만들기 Creating a Custom Connection Manager
사용자 지정 연결 관리자 코딩Coding a Custom Connection Manager