다음을 통해 공유


사용자 지정 태스크의 사용자 인터페이스 개발

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

Integration Services 개체 모델은 사용자 지정 작업 개발자에게 SSDT(SQL Server Data Tools)에 통합 및 표시할 수 있는 작업에 대한 사용자 지정 사용자 인터페이스를 쉽게 만들 수 있는 기능을 제공합니다. 사용자 인터페이스는 SSIS 디자이너에서 사용자에게 유용한 정보를 제공하고 사용자가 사용자 지정 작업의 속성 및 설정을 올바르게 구성하도록 안내할 수 있습니다.

작업에 대한 사용자 지정 사용자 인터페이스를 개발하려면 두 가지 중요한 클래스를 사용해야 합니다. 다음 표에서는 이러한 클래스에 대해 설명합니다.

클래스 설명
DtsTaskAttribute 관리되는 작업을 식별하고 해당 속성을 통해 디자인 타임 정보를 제공하여 SSIS 디자이너가 개체를 표시하고 상호 작용하는 방법을 제어하는 특성입니다.
IDtsTaskUI 태스크에서 해당 태스크를 사용자 지정 사용자 인터페이스와 연결하는 데 사용되는 인터페이스입니다.

이 섹션에서는 사용자 지정 작업에 대한 사용자 인터페이스를 개발할 때 특성 및 IDtsTaskUI 인터페이스의 DtsTaskAttribute 역할에 대해 설명하고 SSIS 디자이너 내에서 작업을 만들고, 통합하고, 배포하고, 디버그하는 방법에 대한 세부 정보를 제공합니다.

SSIS 디자이너는 작업에 대한 사용자 인터페이스에 여러 진입점을 제공합니다. 사용자는 바로 가기 메뉴에서 편집을 선택하거나 작업을 두 번 클릭하거나 속성 시트 아래쪽에 있는 편집기 표시 링크를 클릭할 수 있습니다. 사용자가 이러한 진입점 중 하나에 액세스하면 SSIS 디자이너는 작업에 대한 사용자 인터페이스가 포함된 어셈블리를 찾아 로드합니다. 작업에 대한 사용자 인터페이스는 SSDT(SQL Server Data Tools)에서 사용자에게 표시되는 속성 대화 상자를 만드는 일을 담당합니다.

태스크와 태스크의 해당 사용자 인터페이스는 별개의 엔터티입니다. 지역화, 배포 및 유지 관리 작업을 줄이기 위해 별도의 어셈블리에서 구현해야 합니다. 태스크 DLL은 태스크에 코딩된 특성 값에 포함된 정보를 제외하고 사용자 인터페이스에 DtsTaskAttribute 대한 정보를 로드, 호출 또는 일반적으로 포함하지 않습니다. 작업과 해당 사용자 인터페이스가 연결되는 유일한 방법입니다.

DtsTask 특성

DtsTaskAttribute 이 특성은 태스크 클래스 코드에 포함되어 작업을 사용자 인터페이스와 연결합니다. SSIS 디자이너는 특성의 속성을 사용하여 디자이너에서 작업을 표시하는 방법을 결정합니다. 이러한 속성에는 표시할 이름과 아이콘(있는 경우)이 포함됩니다.

다음 표에서는 특성의 속성에 대해 DtsTaskAttribute 설명합니다.

속성 설명
DisplayName 제어 흐름 도구 상자에 작업 이름을 표시합니다.
Description DtsLocalizableAttribute에서 상속된 태스크 설명입니다. 이 속성은 도구 설명에 표시됩니다.
IconResource SSIS 디자이너에 표시되는 아이콘입니다.
RequiredProductLevel 사용하는 경우 열거형의 값 DTSProductLevel 중 하나로 설정합니다. 예들 들어 RequiredProductLevel = DTSProductLevel.None입니다.
TaskContact 태스크에 기술 지원이 필요한 경우를 위해 연락처 정보를 포함합니다.
TaskType 작업에 형식을 할당합니다.
Attribute.TypeId 파생 클래스에서 구현된 경우 이 특성의 고유 식별자를 가져옵니다. 자세한 내용은 .NET Framework 클래스 라이브러리의 Attribute.TypeID 속성을 참조하세요.
UITypeName SSIS 디자이너에서 어셈블리를 로드하는 데 사용하는 어셈블리의 형식 이름입니다. 이 속성은 작업에 대 한 사용자 인터페이스 어셈블리를 찾는 데 사용 합니다.

다음 코드 예에서는 클래스 정의 위에 코딩된 경우의 DtsTaskAttribute를 보여 줍니다.

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
namespace Microsoft.SSIS.Samples  
{  
  [DtsTask  
  (  
   DisplayName = "MyTask",  
   IconResource = "MyTask.MyTaskIcon.ico",  
   UITypeName = "My Custom Task," +  
   "Version=1.0.0.0," +  
   "Culture = Neutral," +  
   "PublicKeyToken = 12345abc6789de01",  
   TaskType = "PackageMaintenance",  
   TaskContact = "MyTask; company name; any other information",  
   RequiredProductLevel = DTSProductLevel.None  
   )]  
  public class MyTask : Task  
  {  
    // Your code here.  
  }  
}  
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
  
<DtsTask(DisplayName:="MyTask", _  
 IconResource:="MyTask.MyTaskIcon.ico", _  
 UITypeName:="My Custom Task," & _  
 "Version=1.0.0.0,Culture=Neutral," & _  
 "PublicKeyToken=12345abc6789de01", _  
 TaskType:="PackageMaintenance", _  
 TaskContact:="MyTask; company name; any other information", _  
 RequiredProductLevel:=DTSProductLevel.None)> _  
Public Class MyTask  
  Inherits Task  
  
  ' Your code here.  
  
End Class 'MyTask  

SSIS 디자이너는 어셈블리 이름, 형식 이름, 버전, 문화권 및 공개 키 토큰을 포함하는 특성의 속성을 사용하여 UITypeName GAC(전역 어셈블리 캐시)에서 어셈블리를 찾아 디자이너에서 사용할 수 있도록 로드합니다.

어셈블리를 찾은 후 SSIS 디자이너는 특성의 다른 속성을 사용하여 SSIS 디자이너의 작업에 대한 추가 정보(예: 작업의 이름, 아이콘 및 설명)를 표시합니다.

, DescriptionIconResource 속성은 DisplayName작업이 사용자에게 표시되는 방식을 지정합니다. 속성에는 IconResource 사용자 인터페이스 어셈블리에 포함된 아이콘의 리소스 ID가 포함됩니다. 디자이너는 어셈블리에서 ID로 아이콘 리소스를 로드하고, 태스크가 패키지에 추가되면 도구 상자의 작업 이름 옆에 표시하고 디자이너 화면에 표시합니다. 작업에서 아이콘 리소스를 제공하지 않는 경우 디자이너는 작업에 대한 기본 아이콘을 사용합니다.

IDTSTaskUI 인터페이스

인터페이스는 IDtsTaskUI 작업과 연결된 사용자 인터페이스를 초기화하고 표시하기 위해 SSIS 디자이너에서 호출하는 메서드 및 속성의 컬렉션을 정의합니다. 태스크의 사용자 인터페이스가 호출되면 디자이너에서는 태스크 사용자 인터페이스를 작성할 때 해당 사용자 인터페이스에 의해 구현된 Initialize 메서드를 호출한 다음 태스크와 패키지의 TaskHostConnections 컬렉션을 각각 매개 변수로 제공합니다. 이러한 컬렉션은 로컬로 저장되고 이후에 메서드에서 GetView 사용됩니다.

디자이너는 메서드를 GetView 호출하여 SSIS 디자이너에 표시되는 창을 요청합니다. 태스크는 작업에 대한 사용자 인터페이스를 포함하는 창의 인스턴스를 만들고 표시를 위해 디자이너에 사용자 인터페이스를 반환합니다. 일반적으로 TaskHost 오버로드된 생성자를 통해 창에 개체와 Connections 개체가 제공되므로 작업을 구성하는 데 사용할 수 있습니다.

SSIS 디자이너는 작업 UI의 메서드를 호출 GetView 하여 작업에 대한 사용자 인터페이스를 표시합니다. 작업 사용자 인터페이스는 이 메서드에서 Windows 양식을 반환하고 SSIS 디자이너는 이 폼을 모달 대화 상자로 표시합니다. 양식을 닫으면 SSIS 디자이너는 폼의 DialogResult 속성 값을 검사하여 작업이 수정되었는지 여부와 이러한 수정 내용을 저장해야 하는지 여부를 확인합니다. DialogResult 속성 값이 정상이면 SSIS 디자이너는 작업의 지속성 메서드를 호출하여 변경 내용을 저장합니다. 그렇지 않으면 변경 내용이 삭제됩니다.

다음 코드 샘플에서는 인터페이스를 IDtsTaskUI 구현하고 SampleTaskForm이라는 Windows 양식 클래스가 있다고 가정합니다.

using System;  
using System.Windows.Forms;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Runtime.Design;  
  
namespace Sample  
{  
   public class HelloWorldTaskUI : IDtsTaskUI  
   {  
      TaskHost   taskHost;  
      Connections connections;  
      public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)  
      {  
         this.taskHost = taskHost;  
         IDtsConnectionService cs = serviceProvider.GetService  
         ( typeof( IDtsConnectionService ) ) as   IDtsConnectionService;   
         this.connections = cs.GetConnections();  
      }  
      public ContainerControl GetView()  
      {  
        return new HelloWorldTaskForm(this.taskHost, this.connections);  
      }  
     public void Delete(IWin32Window parentWindow)  
     {  
     }  
     public void New(IWin32Window parentWindow)  
     {  
     }  
   }  
}  
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
Imports Microsoft.SqlServer.Dts.Runtime.Design  
Imports System.Windows.Forms  
  
Public Class HelloWorldTaskUI  
  Implements IDtsTaskUI  
  
  Dim taskHost As TaskHost  
  Dim connections As Connections  
  
  Public Sub Initialize(ByVal taskHost As TaskHost, ByVal serviceProvider As IServiceProvider) _  
    Implements IDtsTaskUI.Initialize  
  
    Dim cs As IDtsConnectionService  
  
    Me.taskHost = taskHost  
    cs = DirectCast(serviceProvider.GetService(GetType(IDtsConnectionService)), IDtsConnectionService)  
    Me.connections = cs.GetConnections()  
  
  End Sub  
  
  Public Function GetView() As ContainerControl _  
    Implements IDtsTaskUI.GetView  
  
    Return New HelloWorldTaskForm(Me.taskHost, Me.connections)  
  
  End Function  
  
  Public Sub Delete(ByVal parentWindow As IWin32Window) _  
    Implements IDtsTaskUI.Delete  
  
  End Sub  
  
  Public Sub [New](ByVal parentWindow As IWin32Window) _  
    Implements IDtsTaskUI.[New]  
  
  End Sub  
  
End Class  

참고 항목

사용자 지정 작업 만들기
사용자 지정 작업 코딩
사용자 지정 태스크의 사용자 인터페이스 개발