Implementando metadados externos
Quando um componente é desconectado de sua fonte de dados, você pode validar as colunas nas coleções de colunas de entrada e saída com base nas colunas da fonte de dados externa por meio da interface IDTSExternalMetadataColumnCollection100. Essa interface permite que você mantenha um instantâneo das colunas na fonte de dados externa e as mapeie para as colunas da coleção de colunas de entrada e saída do componente.
A implementação de colunas de metadados externos adiciona uma camada de sobrecarga e complexidade ao desenvolvimento do componente, já que você deve fazer a manutenção e a validação em uma coleção de colunas adicionais. Entretanto, a capacidade de evitar viagens dispendiosas de ida e volta ao servidor para validação pode tornar esse trabalho de desenvolvimento compensador.
Preenchendo colunas de metadados externos
Normalmente, colunas de metadados externas são adicionadas à coleção quando a coluna de entrada ou de saída correspondente é criada. Novas colunas são criadas chamando-se o método New. As propriedades da coluna são definidas para corresponder à fonte de dados externa.
A coluna de metadados externos é mapeada para a coluna de entrada e saída correspondente atribuindo-se a ID da coluna de metadados externos à propriedade ExternalMetadataColumnID da coluna de entrada e saída. Isto permite que você localize com facilidade a coluna de metadados externos para uma coluna de entrada ou saída específica usando o método GetObjectByID da coleção.
O exemplo a seguir mostra como criar uma coluna de metadados externos e mapear a coluna para uma coluna de saída ao definir a propriedade ExternalMetadataColumnID.
public void CreateExternalMetaDataColumn(IDTSOutput100 output, int outputColumnID )
{
IDTSOutputColumn100 oColumn = output.OutputColumnCollection.GetObjectByID(outputColumnID);
IDTSExternalMetadataColumn100 eColumn = output.ExternalMetadataColumnCollection.New();
eColumn.DataType = oColumn.DataType;
eColumn.Precision = oColumn.Precision;
eColumn.Scale = oColumn.Scale;
eColumn.Length = oColumn.Length;
eColumn.CodePage = oColumn.CodePage;
oColumn.ExternalMetadataColumnID = eColumn.ID;
}
Public Sub CreateExternalMetaDataColumn(ByVal output As IDTSOutput100, ByVal outputColumnID As Integer)
Dim oColumn As IDTSOutputColumn100 = output.OutputColumnCollection.GetObjectByID(outputColumnID)
Dim eColumn As IDTSExternalMetadataColumn100 = output.ExternalMetadataColumnCollection.New
eColumn.DataType = oColumn.DataType
eColumn.Precision = oColumn.Precision
eColumn.Scale = oColumn.Scale
eColumn.Length = oColumn.Length
eColumn.CodePage = oColumn.CodePage
oColumn.ExternalMetadataColumnID = eColumn.ID
End Sub
Validando com colunas de metadados externos
A validação requer etapas adicionais para componentes que mantêm uma coleção de colunas de metadados externos, porque você deve validar com base em uma coleção adicional de colunas. A validação pode ser dividida em validação conectada ou desconectada.
Validação conectada
Quando um componente é conectado a uma fonte de dados externa, as colunas nas coleções de entrada ou saída são verificadas diretamente na fonte de dados externa. Adicionalmente, as colunas na coleção de metadados externos devem ser validadas. Isso é necessário porque a coleção de metadados externos pode ser modificada por meio do Editor Avançado no SSDT (SQL Server Data Tools), e as alterações efetuadas na coleção não são detectáveis. Portanto, quando conectados, os componentes devem verificar se as colunas da coleção de colunas de metadados externos continuam refletindo as colunas da fonte de dados externa.
Você pode optar por ocultar a coleção de metadados externos no Editor Avançado definindo a propriedade IsUsed da coleção como false. Entretanto, esse procedimento também oculta a guia Mapeamento de Coluna do editor, que permite que os usuários mapeiem as colunas da coleção de entrada ou saída para as colunas da coleção de colunas de metadados externos. A definição desta propriedade como false não impede que os desenvolvedores modifiquem programaticamente a coleção, mas, efetivamente, fornece um nível de proteção para a coleção de colunas de metadados externos de um componente que é utilizado exclusivamente no SSDT (SQL Server Data Tools).
Validação desconectada
Quando um componente é desconectado de uma fonte de dados externa, a validação é simplificada porque as colunas da coleção de entrada ou saída são verificadas diretamente com base nas colunas da coleção de metadados externos e não com base na fonte externa. Um componente deve executar a validação desconectada quando a conexão com sua fonte de dados externa não tiver sido estabelecida ou quando a propriedade ValidateExternalMetadata for false.
O exemplo de código a seguir demonstra uma implementação de um componente que executa validação com base em sua coleção de colunas de metadados externos.
public override DTSValidationStatus Validate()
{
if( this.isConnected && ComponentMetaData.ValidateExternalMetaData )
{
// TODO: Perform connected validation.
}
else
{
// TODO: Perform disconnected validation.
}
}
Public Overrides Function Validate() As DTSValidationStatus
If Me.isConnected AndAlso ComponentMetaData.ValidateExternalMetaData Then
' TODO: Perform connected validation.
Else
' TODO: Perform disconnected validation.
End If
End Function
|