다음을 통해 공유


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

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

이벤트 발생

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

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

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

사용자 지정 이벤트 정의

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

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

메서드의 allowEventHandlersAdd구성 요소에서 이벤트에 대한 개체를 만들 수 있는지 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 아이콘(작음) Integration Services를 사용하여 최신 상태 유지
Microsoft의 최신 다운로드, 문서, 샘플 및 비디오와 커뮤니티에서 선택한 솔루션은 MSDN의 Integration Services 페이지를 방문하세요.

MSDN의 Integration Services 페이지 방문

이러한 업데이트에 대한 자동 알림을 보려면 페이지에서 사용할 수 있는 RSS 피드를 구독합니다.

참고 항목

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