문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

사용자 지정 태스크에서 이벤트 발생 및 정의

Integration Services 런타임 엔진에서는 태스크의 유효성 검사 및 실행 시 태스크의 진행 상태에 대한 정보를 제공하는 이벤트의 컬렉션을 제공합니다. IDTSComponentEvents 인터페이스는 이러한 이벤트를 정의하며 ValidateExecute 메서드에 대한 매개 변수로 태스크에 제공됩니다.

IDTSEvents 인터페이스에 정의되며 태스크 대신 TaskHost에서 발생시키는 다른 이벤트 집합도 있습니다. TaskHost 에서는 유효성 검사 및 실행 전후에 이벤트를 발생시키는 반면 태스크에서는 실행 및 유효성 검사 도중에 이벤트를 발생시킵니다.

사용자 지정 태스크 개발자는 InitializeTask 메서드의 재정의된 구현에서 새 EventInfo를 만들어 새 사용자 지정 이벤트를 정의할 수 있습니다. 만들어진 EventInfoAdd 메서드를 사용하여 EventInfos 컬렉션에 추가합니다. Add 메서드의 서명은 다음과 같습니다.

public void Add(string eventName, string description, bool allowEventHandlers, string[] parameterNames, TypeCode[] parameterTypes, string[] parameterDescriptions);

다음 코드 예제에서는 두 개의 사용자 지정 이벤트를 만들고 해당 속성을 설정하는 사용자 지정 태스크의 InitializeTask 메서드를 보여 줍니다. 그런 다음 새 이벤트를 EventInfos 컬렉션에 추가합니다.

첫 번째 사용자 지정 이벤트에는 "OnBeforeIncrement"라는 eventName과 "Fires after the initial value is updated"라는 description이 있습니다. 다음 매개 변수인 true 값은 이 이벤트에서 이벤트를 처리하기 위한 이벤트 처리기 컨테이너가 만들어지는 것을 허용해야 함을 나타냅니다. 이벤트 처리기는 패키지, 시퀀스, ForLoop, ForEachLoop 등의 다른 컨테이너와 같이 태스크에 패키지의 구조와 서비스를 제공하는 컨테이너입니다. allowEventHandlers 매개 변수가 true인 경우 이벤트에 대한 DtsEventHandler 개체가 만들어집니다. 그러면 해당 이벤트에 대해 정의된 모든 매개 변수를 DtsEventHandler의 변수 컬렉션에 있는 DtsEventHandler에서 사용할 수 있습니다.

public override void InitializeTask(Connections connections,
   VariableDispenser variables, IDTSInfoEvents events,
   IDTSLogging log, EventInfos eventInfos,
   LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)
{
    this.eventInfos = eventInfos;
    string[] paramNames = new string[1];
    TypeCode[] paramTypes = new TypeCode[1]{TypeCode.Int32};
    string[] paramDescriptions = new string[1];

    paramNames[0] = "InitialValue";
    paramDescriptions[0] = "The value before it is incremented.";

    this.eventInfos.Add("OnBeforeIncrement", 
      "Fires before the task increments the value.",
      true,paramNames,paramTypes,paramDescriptions);
    this.onBeforeIncrement = this.eventInfos["OnBeforeIncrement"];

    paramDescriptions[0] = "The value after it has been incremented.";
    this.eventInfos.Add("OnAfterIncrement",
      "Fires after the initial value is updated.",
      true,paramNames, paramTypes,paramDescriptions);
    this.onAfterIncrement = this.eventInfos["OnAfterIncrement"];
}

사용자 지정 이벤트는 FireCustomEvent 메서드를 호출하면 발생합니다. 다음 코드 줄은 사용자 지정 이벤트를 발생시킵니다.

componentEvents.FireCustomEvent(this.onBeforeIncrement.Name,
   this.onBeforeIncrement.Description, ref arguments,
   null, ref bFireOnBeforeIncrement);

다음 예에서는 InitializeTask 메서드에서 사용자 지정 이벤트를 정의하고 이 사용자 지정 이벤트를 EventInfos 컬렉션에 추가한 다음 FireCustomEvent 메서드를 호출하여 Execute 메서드 실행 중 사용자 지정 이벤트를 발생시키는 태스크를 보여 줍니다.

[DtsTask(DisplayName = "CustomEventTask")]
    public class CustomEventTask : Task
    {
        public override DTSExecResult Execute(Connections connections, 
          VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,
           IDTSLogging log, object transaction)
        {
            bool fireAgain;
            object[] args = new object[1] { "The value of the parameter." };
            componentEvents.FireCustomEvent( "MyCustomEvent", 
              "Firing the custom event.", ref args,
              "CustomEventTask" , ref fireAgain );
            return DTSExecResult.Success;
        }

        public override void InitializeTask(Connections connections,
          VariableDispenser variableDispenser, IDTSInfoEvents events,
          IDTSLogging log, EventInfos eventInfos,
          LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)
        {
            string[] names = new string[1] {"Parameter1"};
            TypeCode[] types = new TypeCode[1] {TypeCode.String};
            string[] descriptions = new string[1] {"Parameter description." };

            eventInfos.Add("MyCustomEvent",
             "Fires when my interesting event happens.",
             true, names, types, descriptions);

        }
   }
Integration Services 아이콘(작은 아이콘) Integration Services 관련 최신 정보 얻기

Microsoft의 최신 다운로드, 아티클, 예제 및 비디오와 커뮤니티의 정선된 솔루션을 보려면 MSDN의 Integration Services 페이지를 방문하십시오.


이러한 업데이트에 대한 자동 알림을 받으려면 해당 페이지에서 제공하는 RSS 피드를 구독하십시오.

커뮤니티 추가 항목

추가
표시: