Métodos de tempo de design de um componente de fluxo de dados
Antes da execução, diz-se que a tarefa de fluxo de dados está em um estado de tempo de design, quando sofre alterações incrementais. As alterações podem incluir a adição ou remoção de componentes, a adição ou remoção dos objetos do caminho que conectam componentes e as alterações nos metadados dos componentes. Quando ocorrem alterações em metadados, o componente pode monitorar e reagir às alterações. Por exemplo, um componente pode desabilitar certas alterações ou fazer alterações adicionais em resposta a uma alteração. Em tempo de design, o designer interage com um componente através da interface IDTSDesigntimeComponent100 em tempo de design.
Implementação de tempo de design
A interface tempo de design de um componente é descrita pela interface IDTSDesigntimeComponent100. Embora você não implemente essa interface explicitamente, uma familiaridade com os métodos definidos nessa interface ajuda você a entender quais métodos da classe base PipelineComponent correspondem à instância de tempo de design de um componente.
Quando um componente é carregado no Business Intelligence Development Studio, a instância de tempo de design do componente é instanciada e os métodos da interface IDTSDesigntimeComponent100 são chamados à medida que o componente é editado. A implementação da classe base o deixa anular somente os métodos que seu componente requer. Em muitos casos, você pode anular esses métodos para impedir edições inadequadas a um componente. Por exemplo, para impedir os usuários de acrescentarem uma saída a um componente, anule o método InsertOutput. Caso contrário, quando a implementação desse método pela classe base for chamada, ela acrescentará uma saída ao componente.
Independentemente do propósito ou funcionalidade de seu componente, você deve anular os métodos ProvideComponentProperties, Validate e ReinitializeMetaData. Para obter mais informações sobre Validate e ReinitializeMetaData, consulte Validando um componente de fluxo de dados.
Método ProvideComponentProperties
A inicialização de um componente ocorre no método ProvideComponentProperties. Esse método é chamado pelo SSIS Designer quando um componente é acrescentado à tarefa de fluxo de dados, e é semelhante a um construtor de classe. Desenvolvedores de componente devem criar e inicializar suas entradas, saídas e propriedades personalizadas durante essa chamada de método. O método ProvideComponentProperties difere de um construtor por que não é chamado toda vez que a instância de tempo de design ou a instância de tempo de execução do componente é instanciada.
A implementação da classe base do método acrescenta uma entrada e uma saída ao componente e atribui a ID da entrada à propriedade SynchronousInputID. Porém, no SQL Server, os objetos de entrada e saída adicionados pela classe base não são nomeados. Os pacotes que contêm um componente com objetos de entrada ou saída, cuja propriedade Name não está definida, não serão carregados com êxito. Portanto, quando você usar a implementação de base, deve atribuir valores explicitamente à propriedade Name da entrada e saída padrão.
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
Criando propriedades personalizadas
A chamada para o método ProvideComponentProperties é onde os desenvolvedores de componente deveriam acrescentar propriedades personalizadas (IDTSCustomProperty100) ao componente. Propriedades personalizadas não têm uma propriedade de tipo de dados. O tipo de dados de uma propriedade personalizada é definido pelo tipo de dados do valor que você atribui a sua propriedade Value. Porém, depois que você atribuir um valor inicial à propriedade personalizada, não poderá atribuir um valor com um tipo de dados diferente.
Observação |
---|
A interface IDTSCustomProperty100 tem suporte limitado para valores de propriedade do tipo Object. O único objeto que você pode armazenar como valor de uma propriedade personalizada é uma matriz de tipos simples, como cadeias de caracteres ou inteiros. |
Você pode indicar se sua propriedade personalizada suporta expressões de propriedade definindo o valor da sua propriedade ExpressionType para CPET_NOTIFY da enumeração DTSCustomPropertyExpressionType, conforme demonstrado no exemplo seguinte. Você não tem que adicionar qualquer código para tratar ou validar a expressão de propriedade inserida pelo usuário. Você pode definir um valor padrão para a propriedade, validar seu valor e ler e usar esse valor normalmente.
IDTSCustomProperty100 myCustomProperty;
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY;
Dim myCustomProperty As IDTSCustomProperty100
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY
É possível limitar a seleção de um valor de propriedade personalizada pelos usuários a partir de uma enumeração usando a propriedade TypeConverter, conforme mostrado no exemplo a seguir, que assume que você definiu uma enumeração pública chamada 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 obter mais informações, consulte “Conversão do tipo generalizada” e “Implementando um conversor de tipo” na MSDN Library.
Você pode especificar uma caixa de diálogo do editor personalizado para o valor da sua propriedade personalizada usando a propriedade UITypeEditor, conforme demonstrado no exemplo a seguir. Em primeiro lugar, é preciso criar um editor do tipo personalizado que herde do System.Drawing.Design.UITypeEditor, caso você não consiga localizar uma classe de editor do tipo de interface do usuário existente adequada às suas necessidades.
public class MyCustomTypeEditor : UITypeEditor
{
...
}
Public Class MyCustomTypeEditor
Inherits UITypeEditor
...
End Class
Em seguida, especifique essa classe como o valor da propriedade UITypeEditor da sua propriedade 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 obter mais informações, consulte “Implementando um editor do tipo de interface do usuário” na MSDN Library.
|