Metodi della fase di progettazione di un componente del flusso di datiDesign-time Methods of a Data Flow Component

Prima dell'esecuzione, l'attività Flusso di dati si trova nel cosiddetto stato della fase di progettazione, quando viene sottoposta a modifiche incrementali.Before execution, the data flow task is said to be in a design-time state, as it undergoes incremental changes. 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.Changes may include the addition or removal of components, the addition or removal of the path objects that connect components, and changes to the metadata of the components. Quando si verificano modifiche ai metadati, il componente può monitorarle e rispondere.When metadata changes occur, the component can monitor and react to the changes. Ad esempio, un componente può impedire determinate modifiche o aggiungerne altre in risposta a una modifica.For example, a component can disallow certain changes or make additional changes in response to a change. In fase di progettazione la finestra di progettazione interagisce con un componente tramite l'interfaccia IDTSDesigntimeComponent100 della fase di progettazione.At design time, the designer interacts with a component through the design-time IDTSDesigntimeComponent100 interface.

Implementazione della fase di progettazioneDesign-Time Implementation

L'interfaccia della fase di progettazione di un componente viene descritta dall'interfaccia IDTSDesigntimeComponent100.The design-time interface of a component is described by the IDTSDesigntimeComponent100 interface. 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.Although you do not explicitly implement this interface, a familiarity with the methods defined in this interface will help you understand which methods of the PipelineComponent base class correspond to the design-time instance of a component.

Quando un componente viene caricato in SQL Server Data Tools (SSDT)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.When a component is loaded in the SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT), the design-time instance of the component is instantiated and the methods of the IDTSDesigntimeComponent100 interface are called as the component is edited. L'implementazione della classe di base consente di eseguire l'override solo dei metodi richiesti dal componente.The implementation of the base class lets you override only those methods that your component requires. In molti casi, è possibile eseguire l'override di tali metodi per evitare modifiche non corrette a un componente.In many cases, you may override these methods to prevent inappropriate edits to a component. Ad esempio, per impedire agli utenti di aggiungere un output a un componente, eseguire l'override del metodo InsertOutput.For example, to prevent users from adding an output to a component, override the InsertOutput method. In caso contrario, quando la classe di base chiama l'implementazione di questo metodo, viene aggiunto un output al componente.Otherwise, when the implementation of this method by the base class is called, it adds an output to the component.

Indipendentemente dallo scopo o dalla funzionalità del componente, è necessario eseguire l'override dei metodi ProvideComponentProperties, Validate e ReinitializeMetaData.Regardless of the purpose or functionality of your component, you should override the ProvideComponentProperties, Validate, and ReinitializeMetaData methods. Per ulteriori informazioni su Validate e ReinitializeMetaData, vedere la convalida di un componente del flusso di dati.For more information about Validate and ReinitializeMetaData, see Validating a Data Flow Component.

Metodo ProvideComponentPropertiesProvideComponentProperties Method

L'inizializzazione di un componente si verifica nel metodo ProvideComponentProperties.The initialization of a component occurs in the ProvideComponentProperties method. Questo metodo viene chiamato da Progettazione SSISSSIS quando un componente viene aggiunto all'attività Flusso di dati ed è simile a un costruttore della classe.This method is called by SSISSSIS Designer when a component is added to the data flow task, and is similar to a class constructor. Gli sviluppatori di componenti devono creare e inizializzare gli input, gli output e le proprietà personalizzate durante la chiamata a questo metodo.Component developers should create and initialize their inputs, outputs, and custom properties during this method call. 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.The ProvideComponentProperties method differs from a constructor because it is not called every time that the design-time instance or run-time instance of the component is instantiated.

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.The base class implementation of the method adds an input and an output to the component and assigns the ID of the input to the SynchronousInputID property. Tuttavia, in SQL ServerSQL Server, gli oggetti input e output aggiunti dalla classe di base non sono denominati.However, in SQL ServerSQL Server, the input and output objects added by the base class are not named. Oggetti di output il cui nome non è impostata o pacchetti che contengono un componente con un input non vengono caricati correttamente.Packages that contain a component with input or output objects whose Name property is not set will not successfully load. Pertanto, quando si utilizza l'implementazione di base, è necessario assegnare valori in modo esplicito per la proprietà Name dell'input e output predefiniti.Therefore, when you use the base implementation, you must assign values explicitly to the Name property of the default input and output.

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.Creating Custom Properties

La chiamata al metodo ProvideComponentProperties è il punto in cui gli sviluppatori di componenti devono aggiungere proprietà personalizzate (IDTSCustomProperty100) al componente.The call to the ProvideComponentProperties method is where component developers should add custom properties (IDTSCustomProperty100) to the component. Le proprietà personalizzate non includono una proprietà del tipo di dati.Custom properties do not have a data type property. Il tipo di dati di una proprietà personalizzata viene impostato dal tipo di dati del valore assegnato alla relativa proprietà Value.The data type of a custom property is set by the data type of the value that you assign to its Value property. Tuttavia, dopo aver assegnato un valore iniziale alla proprietà personalizzata, non è possibile assegnare un valore con un tipo di dati diverso.However, after you have assigned an initial value to the custom property, you cannot assign a value with a different data type.

Nota

Il IDTSCustomProperty100 interfaccia dispone di un supporto limitato per i valori delle proprietà di tipo oggetto.The IDTSCustomProperty100 interface has limited support for property values of type Object. L'unico oggetto che è possibile archiviare come valore di una proprietà personalizzata è una matrice di tipi semplici come stringhe o numeri interi.The only object that you can store as the value of a custom property is an array of simple types such as strings or integers.

È possibile indicare che la proprietà personalizzata supporta espressioni di proprietà impostando il valore della relativa ExpressionType proprietà CPET_NOTIFY dal DTSCustomPropertyExpressionType enumerazione, come illustrato nell'esempio seguente.You can indicate that your custom property supports property expressions by setting the value of its ExpressionType property to CPET_NOTIFY from the DTSCustomPropertyExpressionType enumeration, as shown in the following example. Non è necessario aggiungere codice per gestire o convalidare l'espressione di proprietà immessa dall'utente.You do not have to add any code to handle or to validate the property expression entered by the user. È possibile impostare un valore predefinito per la proprietà, convalidarlo, quindi leggerlo e utilizzarlo normalmente.You can set a default value for the property, validate its value, and read and use its value normally.

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 tramite il TypeConverter proprietà, come illustrato nell'esempio seguente, in cui si presuppone che sia stata definita un'enumerazione pubblica denominata MyValidValues.You can limit users to selecting a custom property value from an enumeration by using the TypeConverter property, as shown in the following example, which assumes that you have defined a public enumeration named 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 ulteriori informazioni, vedere "Conversione di tipi generalizzata" e "Implementazione di un convertitore di tipi" nel MSDN Library.For more information, see "Generalized Type Conversion" and "Implementing a Type Converter" in the 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.You can specify a custom editor dialog box for the value of your custom property by using the UITypeEditor property, as shown in the following example. In primo luogo, è necessario creare un tipo personalizzato editor che eredita da UITypeEditor, se non è possibile individuare una classe di tipo editor di tipo dell'interfaccia utente esistente adatta alle proprie esigenze.First, you must create a custom type editor that inherits from System.Drawing.Design.UITypeEditor, if you cannot locate an existing UI type editor class that fits your needs.

public class MyCustomTypeEditor : UITypeEditor  
{  
...  
}  
Public Class MyCustomTypeEditor  
  Inherits UITypeEditor   
  ...  
End Class  

Specificare questa classe come valore della proprietà UITypeEditor della proprietà personalizzata.Next, specify this class as the value of the UITypeEditor property of your custom property.

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 ulteriori informazioni, vedere "Implementazione di un Editor di tipo dell'interfaccia utente" nel MSDN Library.For more information, see "Implementing a UI Type Editor" in the MSDN Library.

Vedere ancheSee Also

Metodi di runtime di un componente flusso di datiRun-time Methods of a Data Flow Component