Manejo de errores en QlikView

Recientemente uno de nuestros clientes se acercó con este requisito: Crear un QVD con una carga incremental. Pero, a continuación surgió un problema: "¿Cómo voy a hacer una carga incremental en un QVD, cuando este no existe en primer lugar?". Esto puede ser un poco confuso si usted no sabe acerca de lo que es una carga incremental, si fuera este su caso le recomiendo primero leer esta nota: http://www.aegis.pe/2015/05/carga-incremental-en-qlikview-parte-1.html. Luego pensé, si yo pudiera atrapar todos los errores que genera y los utilizo para mi conveniencia sería de mucha ayuda... allí empezó mi búsqueda de la gestión de errores en QlikView.

Para mi suerte, QlikView hace mención a estos en su manual, aunque no es información muy detallada. Así que consideré que podría ser de mucha ayuda si intentaba hacer mi propio manejador de errores en QlikView.

Mi programa es simple, tengo que hacer una carga incremental en un QVD (llamémoslo Etapa2), que almacena un conjunto de datos existentes (Etapa1 QVD). Por lo tanto, no necesito utilizar identificadores únicos para este tipo de carga incremental, simplemente concatenar los datos nuevos a los antiguos y almacenar todo.

Así que primero voy a comprobar si existe el QVD Etapa2, si no es así, tendría que crearlo con el primer conjunto de datos (carga inicial), y si ya existe tomar los datos de este QVD y añadirle un nuevo conjunto de datos que vienen del QVD Etapa1.

La gran pregunta es: ¿Cómo voy a manejar ese error, si es que el QVD Etapa2 no existe? QlikView tiene cubierto este punto por nosotros. Primero hay que establecer ErrorMode a 0 en el script:
//Sobreescribimos esta variable para indicar que llevaremos un Manejo de errores manual
Set ErrorMode = 0;

Hay que tener un poco de cuidado al hacer esto ya que a partir de este momento usted no será capaz de ver los errores en su aplicación. Lo siguiente, como ahora nuestra obligación es detectar si existe o no el QVD Etapa2, para ellos vamos a escribir una sencilla instrucción If/Else.

Sería de esta forma:
If ScriptError = 8 or ScriptError = 10

En el código anterior ScriptError = 8 significa "Archivo no encontrado" y ScriptError = 10 es "Tabla no encontrada", así que si ha ocurrido cualquiera de estos errores indicaría que el QVD Etapa2 no existe y tendremos que crearlo.
ElseIf ScriptError = 0 Then

He utilizado 0, lo cual indica que el script se ha ejecutado sin problema y no ha encontrado ningún error. Sólo se convertirá en 1 después de terminar la primera ejecución de la sentencia o cuando termine el script, esto significa que si existe el QVD debo tomar los datos del QVD Etapa2 y añadir a este los nuevos datos que están en el QVD Etapa1 y luego almacenar todo en el mismo QVD Etapa2, lo cual reemplazaría al QVD existente.

Si se produce cualquier otro error diferente a los mencionados anteriormente durante la ejecución del script, este simplemente abortará la carga.

Consulte el manual de referencia QlikView 11 para obtener información más detallada de estos, podemos encontrar las variables de error en el final de la página 278 hasta la página 280. La información en mención es la que citaré a continuación.

ErrorMode


Esta variable determina qué acción debe ser tomada por QlikView cuando se encuentra un error durante la ejecución del script. Por defecto (ErrorMode = 1) la ejecución del script se detendrá y el usuario será incitado a la acción (modo no-batch). Al establecer ErrorMode = 0, QlikView simplemente ignorará los errores y continuará la ejecución del script con la siguiente sentencia. Al establecer ErrorMode = 2, QlikView disparará una mensaje de error "Ejecución de script fallida", sin preguntar al usuario por la acción de antemano.

Ejemplo:
Set ErrorMode = 0;

ScriptError

Devuelve el código de error de la última sentencia ejecutada en el script. Esta variable se restablecerá a 0 después de cada sentencia de script ejecutada con éxito. Si se produce un error, se establecerá en esta variable un código interno de QlikView. Los códigos de error son valores duales con un componente numérico y otro de texto. Existen los siguientes códigos de error:

0 - No error
1 - General error
2 - Syntax error
3 - General ODBC error
4 - General OLE DB error
5 - General custom database error
6 - General XML error
7 - General HTML error
8 - File not found
9 - Database not found
10 - Table not found
11 - Field not found
12 - File has wrong format
13 - BIFF error
14 - BIFF error encrypted
15 - BIFF error unsupported version
16 - Semantic error

Ejemplo:
Set ErrorMode = 0;
Load * From abc.qvw;
If ScriptError = 8 Then
    exit script;
    //no file
End If;

ScriptErrorDetails

Devuelve una descripción más detallada del error para algunos de los códigos de errores de la lista anterior. Lo más importante que esta variable contendrá son los mensajes de error devueltos por los controladores ODBC y OLE DB para los códigos de error 3 y 4.

ScriptErrorCount

Devuelve el número total de sentencias que han causado el error durante la ejecución del script actual. Esta variable siempre se restablece a 0 al comienzo de la ejecución del script.

ScriptErrorList

Esta variable contendrá una lista concatenada de todo los errores que se han producido durante la última ejecución del script. Cada error es separado por un salto de línea.

Comentarios