Aggiornamento della versione di un componente del flusso di datiUpgrading the Version of a Data Flow Component

I pacchetti creati con una versione precedente del componente possono contenere metadati non più validi, ad esempio proprietà personalizzate il cui utilizzo è stato modificato nelle versioni più recenti del componente.Packages that were created with an older version of your component may contain metadata that is no longer valid, such as custom properties whose usage has been modified in newer versions of the component. È possibile eseguire l'override del metodo PerformUpgrade della classe di base PipelineComponent per aggiornare i metadati salvati in precedenza in pacchetti meno recenti in base alle proprietà correnti del componente.You can override the PerformUpgrade method of the PipelineComponent base class to update the metadata previously saved in older packages to reflect the current properties of your component.

Nota

Quando si ricompila un componente personalizzato per una nuova versione di Integration ServicesIntegration Services, non è necessario modificare il valore della proprietà CurrentVersion se le proprietà del componente non sono state modificate.When you recompile a custom component for a new version of Integration ServicesIntegration Services, you do not have to change the value of the CurrentVersion property if the component's properties have not changed.

EsempioExample

L'esempio seguente contiene codice della versione 2.0 di un componente del flusso di dati fittizio.The following sample contains code from version 2.0 of a fictitious data flow component. Il nuovo numero di versione è definito nella proprietà CurrentVersion di DtsPipelineComponentAttribute.The new version number is defined in the CurrentVersion property of the DtsPipelineComponentAttribute. Il componente include una proprietà che definisce la modalità di gestione dei valori numerici che superano una determinata soglia.The component has a property that defines how numeric values that exceed a threshold are to be handled. Nella versione 1.0 del componente fittizio questa proprietà è denominata RaiseErrorOnInvalidValue e accetta il valore booleano true o false.In version 1.0 of the fictitious component, this property was named RaiseErrorOnInvalidValue and accepted a Boolean value of true or false. Nella versione 2.0 del componente fittizio la proprietà è stata rinominata in InvalidValueHandling e accetta uno dei quattro valori possibili di un enumeratore personalizzato.In version 2.0 of the fictitious component, the property has been renamed to InvalidValueHandling and accepts one of four possible values from a custom enumeration.

Il metodo PerformUpgrade sottoposto a override nell'esempio effettua le azioni seguenti:The overridden PerformUpgrade method in the following sample performs the following actions:

  • Ottiene la versione corrente del componente.Gets the current version of the component.

  • Ottiene il valore della proprietà personalizzata precedente.Gets the value of the old custom property.

  • Rimuove la proprietà precedente dalla raccolta di proprietà personalizzate.Removes the old property from the custom property collection.

  • Imposta il valore della nuova proprietà personalizzata in base al valore di quella precedente, se possibile.Sets the value of the new custom property based on the value of the old property, if possible.

  • Imposta i metadati della versione sulla versione corrente del componente.Sets the version metadata to the current version of the component.

Nota

Il motore del flusso di dati passa il proprio numero di versione di PerformUpgrade metodo il pipelineVersion parametro.The data flow engine passes its own version number into the PerformUpgrade method in the pipelineVersion parameter. Questo parametro non è utile nella versione 1.0 di Integration ServicesIntegration Services, ma può diventarlo nelle versioni successive.This parameter is not useful in version 1.0 of Integration ServicesIntegration Services, but may become useful in subsequent versions.

Nel codice di esempio vengono utilizzati solo i due valori di enumerazione che possono essere mappati direttamente ai valori booleani precedenti per la proprietà personalizzata.The sample code uses only the two enumeration values that map directly to the prior Boolean values for the custom property. Gli utenti possono selezionare gli altri valori di enumerazione disponibili tramite l'interfaccia utente personalizzata del componente, nell'editor avanzato o a livello di codice.Users can select the other available enumeration values through the component's custom user interface, in the Advanced Editor, or programmatically. Per informazioni sulla visualizzazione dei valori di enumerazione per una proprietà personalizzata nell'Editor avanzato, vedere "Creazione di proprietà personalizzate" in metodi della fase di progettazione di un componente flusso di dati.For information on displaying enumeration values for a custom property in the Advanced Editor, see "Creating Custom Properties" in Design-time Methods of a Data Flow Component.

Imports Microsoft.SqlServer.Dts.Pipeline  
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper  

<DtsPipelineComponent(ComponentType:=ComponentType.Transform, CurrentVersion:=2)> _  
Public Class PerformUpgrade  
  Inherits PipelineComponent  

  ' Define the set of possible values for the new custom property.  
  Private Enum InvalidValueHandling  
    Ignore  
    FireInformation  
    FireWarning  
    FireError  
  End Enum  

  Public Overloads Overrides Sub PerformUpgrade(ByVal pipelineVersion As Integer)  

    ' Obtain the current component version from the attribute.  
    Dim componentAttribute As DtsPipelineComponentAttribute = _  
      CType(Attribute.GetCustomAttribute(Me.GetType, _  
      GetType(DtsPipelineComponentAttribute), False), _  
      DtsPipelineComponentAttribute)  
    Dim currentVersion As Integer = componentAttribute.CurrentVersion  

    ' If the component version saved in the package is less than  
    '  the current version, Version 2, perform the upgrade.  
    If ComponentMetaData.Version < currentVersion Then  

      ' Get the current value of the old custom property, RaiseErrorOnInvalidValue,   
      ' and then remove the property from the custom property collection.  
      Dim oldValue As Boolean = False  
      Try  
        Dim oldProperty As IDTSCustomProperty100 = _  
          ComponentMetaData.CustomPropertyCollection("RaiseErrorOnInvalidValue")  
        oldValue = CType(oldProperty.Value, Boolean)  
        ComponentMetaData.CustomPropertyCollection.RemoveObjectByIndex("RaiseErrorOnInvalidValue")  
      Catch ex As Exception  
        ' If the old custom property is not available, ignore the error.  
      End Try  

      ' Set the value of the new custom property, InvalidValueHandling,  
      '  by using the appropriate enumeration value.  
      Dim newProperty As IDTSCustomProperty100 = _  
        ComponentMetaData.CustomPropertyCollection("InvalidValueHandling")  
      If oldValue = True Then  
        newProperty.Value = InvalidValueHandling.FireError  
      Else  
        newProperty.Value = InvalidValueHandling.Ignore  
      End If  

    End If  

    ' Update the saved component version metadata to the current version.  
    ComponentMetaData.Version = currentVersion  

  End Sub  

End Class  
using System;  
using Microsoft.SqlServer.Dts.Pipeline;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  

[DtsPipelineComponent(ComponentType = ComponentType.Transform, CurrentVersion = 2)]  
public class PerformUpgradeCS :  
  PipelineComponent  

  // Define the set of possible values for the new custom property.  
{  
  private enum InvalidValueHandling  
  {  
    Ignore,  
    FireInformation,  
    FireWarning,  
    FireError  
  };  

  public override void PerformUpgrade(int pipelineVersion)  
  {  

    // Obtain the current component version from the attribute.  
    DtsPipelineComponentAttribute componentAttribute =   
      (DtsPipelineComponentAttribute)Attribute.GetCustomAttribute(this.GetType(), typeof(DtsPipelineComponentAttribute), false);  
    int currentVersion = componentAttribute.CurrentVersion;  

    // If the component version saved in the package is less than  
    //  the current version, Version 2, perform the upgrade.  
    if (ComponentMetaData.Version < currentVersion)  

    // Get the current value of the old custom property, RaiseErrorOnInvalidValue,   
    // and then remove the property from the custom property collection.  
    {  
      bool oldValue = false;  
      try  
      {  
        IDTSCustomProperty100 oldProperty =   
          ComponentMetaData.CustomPropertyCollection["RaiseErrorOnInvalidValue"];  
        oldValue = (bool)oldProperty.Value;  
        ComponentMetaData.CustomPropertyCollection.RemoveObjectByIndex("RaiseErrorOnInvalidValue");  
      }  
      catch (Exception ex)  
      {  
        // If the old custom property is not available, ignore the error.  
      }  

      // Set the value of the new custom property, InvalidValueHandling,  
      //  by using the appropriate enumeration value.  
      IDTSCustomProperty100 newProperty =   
         ComponentMetaData.CustomPropertyCollection["InvalidValueHandling"];  
      if (oldValue == true)  
      {  
        newProperty.Value = InvalidValueHandling.FireError;  
      }  
      else  
      {  
        newProperty.Value = InvalidValueHandling.Ignore;  
      }  

    }  

    // Update the saved component version metadata to the current version.  
    ComponentMetaData.Version = currentVersion;  

  }  

}