Metodi della fase di progettazione di un componente del flusso di dati
Si applica a: SQL Server SSIS Integration Runtime in Azure Data Factory
Prima dell'esecuzione, l'attività Flusso di dati si trova nel cosiddetto stato della fase di progettazione, quando viene sottoposta a modifiche incrementali. Tali modifiche possono includere l'aggiunta o la rimozione di componenti, l'aggiunta o la rimozione degli oggetti percorso che connettono i componenti e modifiche ai metadati dei componenti. Quando si verificano modifiche ai metadati, il componente può monitorarle e rispondere. Ad esempio, un componente può impedire determinate modifiche o aggiungerne altre in risposta a una modifica. In fase di progettazione la finestra di progettazione interagisce con un componente tramite l'interfaccia IDTSDesigntimeComponent100 della fase di progettazione.
Implementazione della fase di progettazione
L'interfaccia della fase di progettazione di un componente viene descritta dall'interfaccia IDTSDesigntimeComponent100. Anche se questa interfaccia non viene implementata in modo esplicito, una maggiore familiarità con i metodi definiti al suo interno consente di identificare i metodi della classe di base PipelineComponent che corrispondono all'istanza della fase di progettazione di un componente.
Quando un componente viene caricato in SQL Server Data Tools (SSDT), viene creata un'istanza dell'istanza della fase di progettazione del componente e vengono chiamati i metodi dell'interfaccia IDTSDesigntimeComponent100 quando il componente viene modificato. L'implementazione della classe di base consente di eseguire l'override solo dei metodi richiesti dal componente. In molti casi, è possibile eseguire l'override di tali metodi per evitare modifiche non corrette a un componente. Ad esempio, per impedire agli utenti di aggiungere un output a un componente, eseguire l'override del metodo InsertOutput. In caso contrario, quando la classe di base chiama l'implementazione di questo metodo, viene aggiunto un output al componente.
Indipendentemente dallo scopo o dalla funzionalità del componente, è necessario eseguire l'override dei metodi ProvideComponentProperties, Validate e ReinitializeMetaData. Per altre informazioni su Validate e ReinitializeMetaData, vedere Convalida di un componente del flusso di dati.
Metodo ProvideComponentProperties
L'inizializzazione di un componente si verifica nel metodo ProvideComponentProperties. Questo metodo viene chiamato da Progettazione SSIS quando un componente viene aggiunto all'attività Flusso di dati ed è simile a un costruttore della classe. Gli sviluppatori di componenti devono creare e inizializzare gli input, gli output e le proprietà personalizzate durante la chiamata a questo metodo. Il metodo ProvideComponentProperties è diverso da un costruttore perché non viene chiamato ogni volta che viene creata un'istanza dell'istanza della fase di progettazione o dell'istanza di runtime del componente.
L'implementazione della classe di base del metodo aggiunge un input e un output al componente e assegna l'ID dell'input alla proprietà SynchronousInputID. Tuttavia, in SQL Server, gli oggetti input e output aggiunti dalla classe di base non sono denominati. I pacchetti che contengono un componente con oggetti input o output la cui proprietà Name non è impostata non vengono caricati correttamente. Pertanto, quando si usa l'implementazione di base, è necessario assegnare in modo esplicito i valori alla proprietà Name dell'input e dell'output predefiniti.
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
Creazione di proprietà personalizzate.
La chiamata al metodo ProvideComponentProperties è il punto in cui gli sviluppatori di componenti devono aggiungere proprietà personalizzate (IDTSCustomProperty100) al componente. Le proprietà personalizzate non includono una proprietà del tipo di dati. Il tipo di dati di una proprietà personalizzata viene impostato dal tipo di dati del valore assegnato alla relativa proprietà Value. Tuttavia, dopo aver assegnato un valore iniziale alla proprietà personalizzata, non è possibile assegnare un valore con un tipo di dati diverso.
Nota
L'interfaccia IDTSCustomProperty100 offre un supporto limitato per i valori delle proprietà di tipo Object. L'unico oggetto che è possibile archiviare come valore di una proprietà personalizzata è una matrice di tipi semplici come stringhe o numeri interi.
È possibile indicare che la proprietà personalizzata supporta espressioni di proprietà impostando il valore della proprietà ExpressionType su CPET_NOTIFY dall'enumerazione DTSCustomPropertyExpressionType, come illustrato nell'esempio seguente. Non è necessario aggiungere codice per gestire o convalidare l'espressione di proprietà immessa dall'utente. È possibile impostare un valore predefinito per la proprietà, convalidarlo, quindi leggerlo e utilizzarlo normalmente.
IDTSCustomProperty100 myCustomProperty;
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY;
Dim myCustomProperty As IDTSCustomProperty100
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY
È possibile limitare gli utenti alla selezione di un valore della proprietà personalizzata da un'enumerazione usando la proprietà TypeConverter, come illustrato nell'esempio seguente, in cui si presuppone che sia stata definita un'enumerazione pubblica denominata 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
Per altre informazioni, vedere gli argomenti relativi alla conversione di tipi generalizzata e all'implementazione del convertitore di tipi in MSDN Library.
È possibile specificare una finestra di dialogo dell'editor personalizzata per il valore della proprietà personalizzata tramite la proprietà UITypeEditor, come illustrato nell'esempio seguente. Creare prima di tutto un editor di tipo personalizzato che eredita da System.Drawing.Design.UITypeEditor, se non è possibile individuare una classe di editor di tipo dell'interfaccia utente che soddisfa le esigenze specifiche.
public class MyCustomTypeEditor : UITypeEditor
{
...
}
Public Class MyCustomTypeEditor
Inherits UITypeEditor
...
End Class
Specificare questa classe come valore della proprietà UITypeEditor della proprietà personalizzata.
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
Per altre informazioni, vedere "implementazione di un editor di tipi con interfaccia utente" in MSDN Library.