Simular una salida de error para el componente de script
Aunque no puede configurar directamente una salida como una salida de error en el componente de script para el control automático de filas del error, puede reproducir la funcionalidad de una salida de error integrada mediante la creación de una salida adicional y la utilización de una lógica condicional en su script para dirigir las filas a esta salida cuando corresponda. Puede que desee imitar el comportamiento de una salida de error integrada agregando dos columnas de salida adicionales para recibir el número de error y el identificador de la columna en la que se produjo un error.
Si desea agregar la descripción del error que corresponde a un determinado código de error de Integration Services predefinido, puede usar el método GetErrorDescription de la interfaz IDTSComponentMetaData100, disponible a través de la propiedad ComponentMetaData del componente de script.
Ejemplo
En el ejemplo se utiliza un componente de script configurado como una transformación con dos salidas sincrónicas. El propósito del componente de script es filtrar las filas que generan un error de los datos de dirección en la base de datos de ejemplo AdventureWorks. En este ejemplo ficticio se supone que se está preparando una promoción para clientes norteamericanos y es necesario filtrar las direcciones que no se encuentran en Norteamérica.
Para configurar el ejemplo
Antes de crear el nuevo componente de script, cree un administrador de conexiones y configure un origen de flujo de datos que seleccione datos de la dirección de la base de datos de ejemplo AdventureWorks. En este ejemplo, donde solo se examina la columna CountryRegionName, simplemente puede usar la vista Person.vStateCountryProvinceRegion o puede seleccionar los datos combinando las tablas Person.Address, Person.StateProvincey Person.CountryRegion.
Agregue un nuevo componente de script a la superficie del diseñador de flujo de datos y configúrelo como una transformación. Abra el Editor de transformación Script.
En la página Script, establezca la propiedad ScriptLanguage en el lenguaje de script que desea usar para codificar el script.
Haga clic en Editar script para abrir MicrosoftVisual Studio Tools para aplicaciones (VSTA).
En el método Input0_ProcessInputRow, escriba o pegue el código de ejemplo que se muestra a continuación.
Cierre VSTA.
En la página Columnas de entrada, seleccione las columnas que desea procesar en la transformación Script. En este ejemplo se utiliza únicamente la columna CountryRegionName. Las columnas de entrada disponibles que no se seleccionen, pasarán simplemente al flujo de datos sin cambios.
En la página Entradas y salidas, agregue una nueva, segunda salida, y establezca su valor SynchronousInputID al identificador de la entrada, que también es el valor de la propiedad SynchronousInputID de la salida predeterminada. Establezca la propiedad ExclusionGroup de ambas salidas en el mismo valor distinto de cero (por ejemplo, 1) para indicar que cada fila se dirigirá únicamente a una de las dos salidas. Asigne un nombre distintivo a la nueva salida de error, como "MyErrorOutput".
Agregue las columnas de salida adicionales a la nueva salida de error para capturar la información de error deseada que puede incluir el código de error, el identificador de la columna en la que se produjo el error y, posiblemente, la descripción del error. En este ejemplo se crean las nuevas columnas, ErrorColumn y ErrorMessage. Si está detectando los errores de Integration Services predefinidos en su propia implementación, asegúrese de agregar una columna ErrorCode para el número de error.
Observe el valor del identificador de la columna o columnas de entrada que el componente de script comprobará para las condiciones de error. En este ejemplo se usa este identificador de columna para rellenar el valor ErrorColumn.
Cierre el Editor de transformación Script.
Asocie las salidas del componente de script a destinos convenientes. Para pruebas ad hoc, la manera más fácil de configurar es mediante destinos de archivo plano.
Ejecute el paquete.
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();
}
}
|