다음을 통해 공유


데이터 흐름 구성 요소에서 이벤트 발생 및 정의

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

구성 요소 개발자는 속성에 노출된 메서드를 호출하여 인터페이스에 정의된 IDTSComponentEvents 이벤트의 하위 집합을 ComponentMetaData 발생할 수 있습니다. 컬렉션을 사용하여 사용자 지정 이벤트를 정의하고, 메서드를 EventInfos 사용하여 실행하는 동안 이벤트를 발생시켜 FireCustomEvent 도 됩니다. 이 섹션에서는 이벤트를 만들고 발생시키고 디자인 타임에 이벤트를 발생시켜야 하는 시기에 대한 지침을 제공합니다.

이벤트 발생

구성 요소에서는 IDTSComponentMetaData100 인터페이스의 Fire<X> 메서드를 사용하여 이벤트를 발생시킵니다. 구성 요소 디자인 및 실행 중에 이벤트를 발생할 수 있습니다. 일반적으로 구성 요소 디자인 FireError 중에 유효성 검사 중에 메서드와 FireWarning 메서드가 호출됩니다. 이러한 이벤트는 구성 요소가 잘못 구성되어 있는 경우 SSDT(SQL Server Data Tools)의 오류 목록 창에 메시지를 표시하고 구성 요소 사용자에게 피드백을 제공합니다.

또한 구성 요소에서는 실행 중 어느 시점에서나 이벤트를 발생시킬 수 있습니다. 이벤트를 통해 구성 요소 개발자는 구성 요소가 실행되는 동안 사용자에게 피드백을 제공할 수 있습니다. 실행 중에 메서드를 FireError 호출하면 패키지가 실패할 수 있습니다.

사용자 지정 이벤트 정의 및 발생

사용자 지정 이벤트 정의

사용자 지정 이벤트는 Add 컬렉션의 EventInfos 메서드를 호출하여 만듭니다. 이 컬렉션은 데이터 흐름 태스크에 의해 설정되며 기본 클래스를 통해 PipelineComponent 구성 요소 개발자에게 속성으로 제공됩니다. 이 클래스에는 데이터 흐름 태스크에서 정의한 사용자 지정 이벤트와 메서드 중에 RegisterEvents 구성 요소에서 정의한 사용자 지정 이벤트가 포함됩니다.

구성 요소의 사용자 지정 이벤트는 패키지 XML에 유지되지 않습니다. 따라서 RegisterEvents 구성 요소가 발생하는 이벤트를 정의할 수 있도록 디자인 및 실행 중에 메서드가 호출됩니다.

메서드의 Add allowEventHandlers 매개 변수는 구성 요소에서 이벤트에 대한 개체를 만들 수 있는지 DtsEventHandler 여부를 지정합니다. DtsEventHandlers 동기적입니다. 따라서 구성 요소는 사용자 지정 이벤트에 연결된 실행이 완료될 때까지 DtsEventHandler 실행을 다시 시작하지 않습니다. allowEventHandlers 매개 변수가 true인 경우 SQL Server Integration Services 런타임에서 자동으로 만들어지고 채워진 변수를 통해 모든 DtsEventHandler 개체가 자동으로 해당 이벤트의 각 매개 변수를 사용할 수 있게 됩니다.

사용자 지정 이벤트 발생

구성 요소는 메서드를 FireCustomEvent 호출하고 이벤트의 이름, 텍스트 및 매개 변수를 제공하여 사용자 지정 이벤트를 발생합니다. allowEventHandlers 매개 변수가 true인 경우 해당 사용자 지정 이벤트에 대해 만들어진 모든 DtsEventHandlers가 SSIS 런타임 엔진에 의해 실행됩니다.

사용자 지정 이벤트 예제

다음 코드 예제에서는 메서드 중에 RegisterEvents 사용자 지정 이벤트를 정의한 다음, 메서드를 호출 FireCustomEvent 하여 런타임에 이벤트를 발생시키는 구성 요소를 보여 줍니다.

public override void RegisterEvents()  
{  
    string [] parameterNames = new string[2]{"RowCount", "StartTime"};  
    ushort [] parameterTypes = new ushort[2]{ DtsConvert.VarTypeFromTypeCode(TypeCode.Int32), DtsConvert.VarTypeFromTypeCode(TypeCode.DateTime)};  
    string [] parameterDescriptions = new string[2]{"The number of rows to sort.", "The start time of the Sort operation."};  
    EventInfos.Add("StartingSort","Fires when the component begins sorting the rows.",false,ref parameterNames, ref parameterTypes, ref parameterDescriptions);  
}  
public override void ProcessInput(int inputID, PipelineBuffer buffer)  
{  
    while (buffer.NextRow())  
    {  
       // Process buffer rows.  
    }  
  
    IDTSEventInfo100 eventInfo = EventInfos["StartingSort"];  
    object []arguments = new object[2]{buffer.RowCount, DateTime.Now };  
    ComponentMetaData.FireCustomEvent("StartingSort", "Beginning sort operation.", ref arguments, ComponentMetaData.Name, ref FireSortEventAgain);  
}  
Public  Overrides Sub RegisterEvents()   
  Dim parameterNames As String() = New String(2) {"RowCount", "StartTime"}   
  Dim parameterTypes As System.UInt16() = New System.UInt16(2) {DtsConvert.VarTypeFromTypeCode(TypeCode.Int32), DtsConvert.VarTypeFromTypeCode(TypeCode.DateTime)}   
  Dim parameterDescriptions As String() = New String(2) {"The number of rows to sort.", "The start time of the Sort operation."}   
  EventInfos.Add("StartingSort", "Fires when the component begins sorting the rows.", False, parameterNames, parameterTypes, parameterDescriptions)   
End Sub   
  
Public  Overrides Sub ProcessInput(ByVal inputID As Integer, ByVal buffer As PipelineBuffer)   
  While buffer.NextRow   
  End While   
  Dim eventInfo As IDTSEventInfo100 = EventInfos("StartingSort")   
  Dim arguments As Object() = New Object(2) {buffer.RowCount, DateTime.Now}   
  ComponentMetaData.FireCustomEvent("StartingSort", _  
    "Beginning sort operation.", arguments, _  
    ComponentMetaData.Name, FireSortEventAgain)   
End Sub  

참고 항목

Integration Services(SSIS) 이벤트 처리기
패키지에 이벤트 처리기 추가