Share via


Métodos en tiempo de diseño de un componente de flujo de datos

Se dice que la tarea de flujo de datos se encuentra en un estado en tiempo de diseño antes de la ejecución, cuando sufre cambios incrementales. Los cambios pueden incluir la adición o eliminación de los componentes, la adición o eliminación de los objetos de ruta de acceso que conectan los componentes y cambios en los metadatos de los componentes. Cuando se producen cambios en los metadatos, el componente puede supervisar y reaccionar a los cambios. Por ejemplo, un componente puede no permitir ciertos cambios o realizar cambios adicionales en respuesta a un cambio. En tiempo de diseño, el diseñador interactúa con un componente a través de la interfaz IDTSDesigntimeComponent100 en tiempo de diseño.

Implementación en tiempo de diseño

La interfaz IDTSDesigntimeComponent100 describe la interfaz en tiempo de diseño de un componente. Aunque no implemente explícitamente esta interfaz, algunos conocimientos sobre los métodos definidos en esta interfaz le servirán de ayuda para entender qué métodos de la clase base PipelineComponent corresponden a la instancia en tiempo de diseño de un componente.

Cuando se carga un componente en Business Intelligence Development Studio, se crea la instancia en tiempo de diseño del componente y se llama a los métodos de la interfaz IDTSDesigntimeComponent100 cuando se edita el componente. La implementación de la clase base le permite invalidar únicamente los métodos que requieren su componente. En muchos casos, puede invalidar estos métodos para impedir las modificaciones inapropiadas a un componente. Por ejemplo, para evitar que los usuarios agreguen una salida a un componente, invalide el método InsertOutput. De lo contrario, cuando la clase base llama a la implementación de este método, agrega una salida al componente.

Independientemente del propósito o funcionalidad del componente, debería invalidar los métodos ProvideComponentProperties, ReinitializeMetaData y Validate. Para obtener más información acerca de Validate y ReinitializeMetaData, vea Validar un componente de flujo de datos.

Método ProvideComponentProperties

La inicialización de un componente se produce en el método ProvideComponentProperties. El Diseñador SSIS llama a este método cuando se agrega un componente a la tarea de flujo de datos, y es similar a un constructor de clase. Los desarrolladores de componentes deberían crear e inicializar sus entradas, salidas y propiedades personalizadas durante esta llamada al método. El método ProvideComponentProperties se diferencia de un constructor porque no se llama cada vez que se crea la instancia en tiempo de diseño o la instancia en tiempo de ejecución del componente.

La implementación de la clase base del método agrega una entrada y una salida al componente y asigna el identificador de la entrada a la propiedad SynchronousInputID. Sin embargo, en SQL Server, no se asigna ningún nombre a los objetos de entrada y salida que agrega la clase base. Los paquetes que contienen un componente con objetos de entrada o salida cuya propiedad Name no está establecida, no cargarán correctamente. Por lo tanto, al usar la implementación base, debe asignar explícitamente valores a la propiedad Name de la entrada y salida predeterminada.

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

Crear propiedades personalizadas.

La llamada al método ProvideComponentProperties es donde los desarrolladores de componentes deberían agregar al componente las propiedades personalizadas (IDTSCustomProperty100). Las propiedades personalizadas no tienen una propiedad de tipo de datos. El tipo de datos de una propiedad personalizada se establece por el tipo de datos del valor que asigne a su propiedad Value. Sin embargo, después de haber asignado un valor inicial a la propiedad personalizada, no puede asignar un valor con un tipo de datos diferente.

[!NOTA]

La interfaz IDTSCustomProperty100 admite de forma limitada los valores de propiedad de tipo Object. El único objeto que puede almacenar como el valor de una propiedad personalizada es una matriz de tipos simples como cadenas o enteros.

Puede indicar que su propiedad personalizada admite las expresiones de propiedad estableciendo el valor de su propiedad ExpressionType en CPET_NOTIFY de la enumeración DTSCustomPropertyExpressionType, como se muestra en el ejemplo siguiente. No tiene que agregar cualquier código para controlar o validar la expresión de propiedad especificada por el usuario. Puede establecer un valor predeterminado de la propiedad, validar su valor y leer y utilizar su valor normalmente.

  IDTSCustomProperty100 myCustomProperty;
  ...
  myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY;
  Dim myCustomProperty As IDTSCustomProperty100
  ...
  myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY

Puede limitar los usuarios para seleccionar un valor de la propiedad personalizada de una enumeración mediante la propiedad TypeConverter, como se muestra en el ejemplo siguiente, donde se supone que ha definido una enumeración pública con nombre 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

Para obtener más información, vea "Conversión de tipos generalizada" e "Implementar un convertidor de tipos" en MSDN Library.

Puede especificar un cuadro de diálogo del editor personalizado para el valor de su propiedad personalizada mediante la propiedad UITypeEditor, como se muestra en el ejemplo siguiente. Primero, debe crear un editor de tipo personalizado que herede de System.Drawing.Design.UITypeEditor, si no puede buscar ninguna clase de editor de tipo de interfaz de usuario existente que se ajuste a sus necesidades.

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

A continuación, especifique esta clase como el valor de la propiedad UITypeEditor de su propiedad personalizada.

  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

Para obtener más información, vea "Implementar un editor de tipo con interfaz de usuario" en MSDN Library.

Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.