Méthodes de conception d'un composant de flux de données
Avant l'exécution, la tâche de flux de données est dite au moment de la conception, puisqu'elle subit des modifications incrémentielles. Les modifications peuvent inclure l'ajout ou la suppression de composants, l'ajout ou la suppression d'objets de chemin d'accès qui connectent des composants, ainsi que des modifications apportées aux métadonnées des composants. Lorsque des modifications de métadonnées se produisent, le composant peut les surveiller et y réagir. Par exemple, un composant peut rejeter certaines modifications ou apporter des modifications supplémentaires en réponse à une modification. Au moment de la conception, le concepteur interagit avec un composant via l'interface IDTSDesigntimeComponent100 du moment de la conception.
Implémentation au moment de la conception
L'interface de conception d'un composant est décrite par l'interface IDTSDesigntimeComponent100. Bien que vous n'implémentiez pas cette interface explicitement, la connaissance des méthodes définies dans cette interface vous aidera à comprendre quelles méthodes de la classe de base PipelineComponent correspondent à l'instance de conception d'un composant.
Lorsqu'un composant est chargé dans Outils de données SQL Server (SSDT), l'instance de conception du composant est instanciée et les méthodes de l'interface IDTSDesigntimeComponent100 sont appelées alors que le composant est modifié. L'implémentation de la classe de base vous permet de remplacer uniquement les méthodes que votre composant requiert. Dans de nombreux cas, vous pouvez remplacer ces méthodes pour empêcher des modifications inappropriées d'un composant. Par exemple, pour empêcher des utilisateurs d'ajouter une sortie à un composant, remplacez la méthode InsertOutput. Sinon, lorsque l'implémentation de cette méthode par la classe de base est appelée, elle ajoute une sortie au composant.
Indépendamment de l'objectif ou des fonctionnalités de votre composant, vous devez remplacer les méthodes ProvideComponentProperties, Validate et ReinitializeMetaData. Pour plus d'informations sur les méthodes Validate et ReinitializeMetaData, consultez Validation d'un composant de flux de données.
Méthode ProvideComponentProperties
L'initialisation d'un composant se produit dans la méthode ProvideComponentProperties. Cette méthode est appelée par le Concepteur SSIS lorsqu'un composant est ajouté à la tâche de flux de données et qu'il est similaire à un constructeur de classe. Les développeurs de composants doivent créer et initialiser leurs entrées, sorties et propriétés personnalisées pendant cet appel de méthode. La méthode ProvideComponentProperties diffère d'un constructeur parce qu'elle n'est pas appelée chaque fois que l'instance de conception ou l'instance d'exécution du composant est instanciée.
L'implémentation de la classe de base de la méthode ajoute une entrée et une sortie au composant et attribue l'ID de l'entrée à la propriété SynchronousInputID. Toutefois, les objets d'entrée et de sortie ajoutés par la classe de base ne sont pas nommés dans SQL Server. Les packages qui contiennent un composant avec des objets d'entrée ou de sortie dont la propriété Name n'est pas définie ne se chargeront pas correctement. Par conséquent, lorsque vous utilisez l'implémentation de base, vous devez attribuer explicitement des valeurs à la propriété Name de l'entrée ou la sortie par défaut.
public override void ProvideComponentProperties()
{
/// TODO: Reset the component.
/// TODO: Add custom properties.
/// TODO: Add input objects.
/// TODO: Add output objects.
}
Public Overrides Sub ProvideComponentProperties()
' TODO: Reset the component.
' TODO: Add custom properties.
' TODO: Add input objects.
' TODO: Add output objects.
End Sub
Création de propriétés personnalisées
L'appel de la méthode ProvideComponentProperties est l'emplacement auquel les développeurs de composants doivent ajouter des propriétés personnalisées (IDTSCustomProperty100) au composant. Les propriétés personnalisées n'ont pas de propriété de type de données. Le type de données d'une propriété personnalisée est défini par le type de données de la valeur que vous attribuez à sa propriété Value. Toutefois, après avoir attribué une valeur initiale à la propriété personnalisée, vous ne pouvez pas attribuer une valeur dont le type de données est différent.
[!REMARQUE]
L'interface IDTSCustomProperty100 offre une prise en charge limitée des valeurs de propriétés de type Object. Le seul objet que vous pouvez stocker en tant que valeur d'une propriété personnalisée est un tableau de types simples tels que des chaînes ou des entiers.
Vous pouvez indiquer que votre propriété personnalisée prend en charge des expressions de propriété en définissant la valeur de sa propriété ExpressionType sur CPET_NOTIFY à partir de l'énumération DTSCustomPropertyExpressionType, comme indiqué dans l'exemple suivant. Vous ne devez pas ajouter de code pour gérer ou valider l'expression de propriété entrée par l'utilisateur. Vous pouvez définir une valeur par défaut pour la propriété, validez sa valeur, ainsi que lire et utiliser normalement sa valeur.
IDTSCustomProperty100 myCustomProperty;
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY;
Dim myCustomProperty As IDTSCustomProperty100
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY
Vous pouvez cantonner les utilisateurs à la sélection d'une valeur de propriété personnalisée à partir d'une énumération en utilisant la propriété TypeConverter, comme indiqué dans l'exemple suivant, qui suppose que vous avez défini une énumération publique nommée MyValidValues.
IDTSCustomProperty100 customProperty = outputColumn.CustomPropertyCollection.New();
customProperty.Name = "My Custom Property";
// This line associates the type with the custom property.
customProperty.TypeConverter = typeof(MyValidValues).AssemblyQualifiedName;
// Now you can use the enumeration values directly.
customProperty.Value = MyValidValues.ValueOne;
Dim customProperty As IDTSCustomProperty100 = outputColumn.CustomPropertyCollection.New
customProperty.Name = "My Custom Property"
' This line associates the type with the custom property.
customProperty.TypeConverter = GetType(MyValidValues).AssemblyQualifiedName
' Now you can use the enumeration values directly.
customProperty.Value = MyValidValues.ValueOne
Pour plus d'informations, consultez « Conversion de type généralisée » et « Implémentation d'un convertisseur de type » dans MSDN Library.
Vous pouvez spécifier une boîte de dialogue d'éditeur personnalisée pour la valeur de votre propriété personnalisée en utilisant la propriété UITypeEditor, comme indiqué dans l'exemple suivant. Tout d'abord, vous devez créer un éditeur de type personnalisé qui hérite de System.Drawing.Design.UITypeEditor, si vous ne pouvez pas localiser une classe existante d'éditeur de types muni d'une interface utilisateur qui répond à vos besoins.
public class MyCustomTypeEditor : UITypeEditor
{
...
}
Public Class MyCustomTypeEditor
Inherits UITypeEditor
...
End Class
Ensuite, spécifiez cette classe en tant que valeur de la propriété UITypeEditor de votre propriété personnalisée.
IDTSCustomProperty100 customProperty = outputColumn.CustomPropertyCollection.New();
customProperty.Name = "My Custom Property";
// This line associates the editor with the custom property.
customProperty.UITypeEditor = typeof(MyCustomTypeEditor).AssemblyQualifiedName;
Dim customProperty As IDTSCustomProperty100 = outputColumn.CustomPropertyCollection.New
customProperty.Name = "My Custom Property"
' This line associates the editor with the custom property.
customProperty.UITypeEditor = GetType(MyCustomTypeEditor).AssemblyQualifiedName
Pour plus d'informations, consultez « Implémentation d'un éditeur de types muni d'une interface utilisateur » dans MSDN Library.
|