Déclenchement et définition d'événements dans un composant de flux de données
Les développeurs de composants peuvent déclencher un sous-ensemble des événements définis dans l'interface IDTSComponentEvents en appelant les méthodes exposées sur la propriété ComponentMetaData. Vous pouvez également définir des événements personnalisés à l'aide de la collection EventInfos, puis les déclencher pendant l'exécution en utilisant la méthode FireCustomEvent. Cette section décrit comment créer et déclencher un événement. Elle fournit également des conseils sur l'opportunité de déclencher des événements au moment de la conception.
Déclenchement d'événements
Les composants déclenchent des événements à l'aide des méthodes Fire<X> de l'interface IDTSComponentMetaData100. Vous pouvez déclencher des événements pendant la conception et l'exécution de composants. En général, les méthodes FireError et FireWarning sont appelées pendant la validation, lors de la conception de composants. Ces événements affichent des messages dans le volet Liste d'erreurs de Business Intelligence Development Studio et fournissent des commentaires aux utilisateurs du composant lorsque ce dernier n'est pas correctement configuré.
Les composants peuvent également déclencher des événements à tout moment pendant l'exécution. Les événements permettent aux développeurs de composants de fournir des commentaires aux utilisateurs du composant pendant son exécution. L'appel de la méthode FireError pendant l'exécution risque de provoquer l'échec du package.
Définition et déclenchement d'événements personnalisés
Définition d'un événement personnalisé
L'appel de la méthode Add de la collection EventInfos permet de créer des événements personnalisés. Cette collection est définie par la tâche de flux de données et fournie en tant que propriété au développeur de composants par le biais de la classe de base PipelineComponent. Cette classe contient des événements personnalisés définis par la tâche de flux de données et des événements personnalisés définis par le composant pendant l'exécution de la méthode RegisterEvents.
Les événements personnalisés d'un composant ne sont pas conservés dans le package XML. Par conséquent, la méthode RegisterEvents est appelée pendant la conception et l'exécution pour permettre au composant de définir les événements qu'il déclenche.
Le paramètre allowEventHandlers de la méthode Add spécifie si le composant autorise la création d'objets DtsEventHandler pour l'événement. Notez que les DtsEventHandlers sont synchrones. Par conséquent, le composant ne recommence à s'exécuter qu'après la fin de l'exécution d'un DtsEventHandler attaché à l'événement personnalisé. Si le paramètre allowEventHandlers a la valeur true, chaque paramètre de l'événement est mis automatiquement à la disposition des objets DtsEventHandler par le biais de variables créées et remplies automatiquement par le Runtime SQL ServerIntegration Services.
Déclenchement d'un événement personnalisé
Les composants déclenchent des événements personnalisés en appelant la méthode FireCustomEvent et en fournissant le nom, le texte et les paramètres de l'événement. Si le paramètre allowEventHandlers a la valeur true, tous les DtsEventHandlers créés pour l'événement personnalisé sont exécutés par le moteur d'exécution SSIS.
Exemple d'événement personnalisé
L'exemple de code suivant présente un composant qui définit un événement personnalisé pendant l'exécution de la méthode RegisterEvents, puis qui déclenche l'événement au moment de l'exécution en appelant la méthode 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 paramterTypes, 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, paramterTypes, 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
|
Voir aussi