Simulando uma saída de erro para o componente Script
Embora não seja possível configurar uma saída como uma saída de erro no componente Script para manipular automaticamente as linhas de erro, você pode reproduzir a funcionalidade de uma saída de erro interna criando uma saída adicional e usando lógica condicional em seu script para direcionar linhas a essa saída quando apropriado. Talvez você queira imitar o comportamento de uma saída de erro interna adicionando duas colunas de saída para receber o número de erro e a ID da coluna em que um erro ocorreu.
Se você quiser adicionar a descrição de erro que corresponde a um código de erro específico e predefinido do Integration Services, você pode usar o método GetErrorDescription da interface IDTSComponentMetaData100, disponível na propriedade ComponentMetaData do componente Script.
Exemplo
O exemplo mostrado aqui usa um componente Script configurado como uma transformação que tem duas saídas síncronas. O propósito do componente Script é filtrar linhas de erro de dados de endereço no banco de dados de exemplo AdventureWorks. Esse exemplo fictício presume que nós estamos preparando uma promoção para clientes norte-americanos e precisamos filtrar endereços que não estão localizados na América do Norte.
Para configurar o exemplo
Antes de criar o novo componente Script, crie um gerenciador de conexões e configure uma origem de fluxo de dados que selecione dados de endereço do banco de dados de exemplo AdventureWorks. Para este exemplo que olha para a coluna CountryRegionName, você pode usar a exibição simplesmente Person.vStateCountryProvinceRegion ou você pode selecionar dados unindo as tabelas Person.Address, Person.StateProvince e Person.CountryRegion.
Adicione um novo componente Script à superfície de designer Fluxo de Dados e configure-o como uma transformação. Abra o Editor de Transformação Scripts.
Na página Script, defina a propriedade ScriptLanguage como a linguagem de script que você quer usar para codificar o script.
Clique em Editar Script para abrir o Microsoft Visual Studio Tools for Applications (VSTA).
No método Input0_ProcessInputRow, digite ou cole o código de exemplo mostrado abaixo.
Feche o VSTA.
Na página Colunas de Entrada, selecione as colunas que você quer processar na transformação Scripts. Esse exemplo usa apenas a coluna CountryRegionName. As colunas de entrada disponíveis que você não selecionar, simplesmente permanecerão inalteradas no fluxo de dados.
Na página Entradas e Saídas, adicione uma saída nova e secundária e defina seu valor SynchronousInputID para a ID da entrada, que também é o valor da propriedade SynchronousInputID da saída padrão. Defina a propriedade ExclusionGroup das duas saídas com o mesmo valor diferente de zero (por exemplo, 1) para indicar que cada linha será direcionada a somente uma das duas saídas. Dê à nova saída de erro um nome diferente, como "MyErrorOutput".
Adicione colunas de saída à nova saída de erro para capturar as informações de erro desejadas, que podem incluir o código de erro, a ID da coluna em que o erro ocorreu e, possivelmente, a descrição do erro. Esse exemplo cria as colunas novas, ErrorColumn e ErrorMessage. Se você estiver capturando erros predefinidos do Integration Services em sua própria implementação, adicione uma coluna ErrorCode para registrar o número do erro.
Anote o valor de ID da(s) coluna(s) de entrada em que o componente Script verificará se há condições de erro. Esse exemplo usa esse identificador de coluna para preencher o valor da ErrorColumn.
Feche o Editor de Transformação Scripts.
Anexe as saídas do componente Script a um destino satisfatório. Destinos de arquivo simples são os mais fáceis de configurar para testar ad hoc.
Execute o pacote.
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Row.CountryRegionName <> "Canada" _
And Row.CountryRegionName <> "United States" Then
Row.ErrorColumn = 68 ' ID of CountryRegionName column
Row.ErrorMessage = "Address is not in North America."
Row.DirectRowToMyErrorOutput()
Else
Row.DirectRowToOutput0()
End If
End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.CountryRegionName!="Canada"&&Row.CountryRegionName!="United States")
{
Row.ErrorColumn = 68; // ID of CountryRegionName column
Row.ErrorMessage = "Address is not in North America.";
Row.DirectRowToMyErrorOutput();
}
else
{
Row.DirectRowToOutput0();
}
}
|