INTEGRACIÓN SILAB – PI ESTRUCTURA DE LA INTEGRACIÓN LA Interface SILAB-PI es una aplicación Visual Basic que se basa en la ejecución de sentencias SQL a la base de datos SILAB. Este Monitor se carga en memoria y se ejecuta cada X minutos, este dato se especifica en el SILAB.INI en el parámetro Intervalo de la sección CONSULTA y puede ser cambiado al momento de ejecución de la interface. La ejecución de las consultas a la base de datos SILAB se basa en algunos datos del archivo SILAB.INI dentro de la sección CONSULTA, una vez obtenidos estos datos realiza ciertas validaciones para determinar si el dato debe o no ser enviado a PI o para determinar cuál es el valor del tag. Se genera en el Archivo Plano cada resultado que debe ser enviado a PI, se copia en la ruta de la Interface PI-BatchFile y se almacenan los datos en PI. DIAGRAMA DE FLUJO El proceso se basa en los siguientes pasos: - LECTURA DEL .INI - CONSULTA SILAB - VALIDACIONES - GENERAR ARCHIVO PLANO - COPIAR ARCHIVO PLANO A BF - GRABAR DATOS EN PI LECTURA DEL .INI La lectura del .INI se realiza para obtener datos importantes para la correcta ejecución de la interface. - Grabar Nulos; determina si al momento de encontrar un valor NULO este debe ser enviado a PI o no. - Filtro; determina si se deben aplicar los filtros de Condition y Status - Condition; condiciones del resultado para los que no se deben enviar los resultados. - Nocondition; definido pero no usado. - Status; estados del resultado para los que no se deben enviar los resultados. - DiasARevisar; cantidad de días atrás que procesará la consulta. - ActualizarPI; definido pero no usado. - Intervalo; no usado. - enable; define si se escribe a archivo plano y se copia a la BatchFile (si) o se escribe directamente a PI (no). CONSULTA SILAB Para generar la consulta se realiza la validación del parámetro Filtro, el cual si es igual a Si arma la siguiente consulta: SELECT DISTINCT S.TIMESTAMP Fecha, R.SAMPLE_ID, E.TAG_PI, R.TEXT_VALUE, R.TIMESTAMP, S.STATUS, S.CONDITION, E.NODATA FROM OPS$PENLIMS.NAI_SAMPLES S, OPS$PENLIMS.NAI_RESULTS R, ECO_LIMS.ECO_PI E WHERE S.SAMPLE_TYPE = E.SAMPLE_TYPE AND R.COMPONENT = E.COMPONENT AND R.UNITS = E.UNITS AND R.CONDITION NOT IN ('APPROVED', 'ONLINE') AND R.STATUS NOT IN ('ACTIVE', 'COMPLETE') AND S.SAMPLE_ID = R.SAMPLE_ID AND S.TIMESTAMP BETWEEN TRUNC(SYSDATE - 1, 'dd') AND TRUNC(SYSDATE + 1, 'dd') ORDER BY 3 DESC, 1 ASC De lo contrario arma la siguiente consulta: SELECT DISTINCT S.TIMESTAMP Fecha, R.SAMPLE_ID, E.TAG_PI, R.TEXT_VALUE, R.TIMESTAMP, S.STATUS, S.CONDITION, E.NODATA FROM OPS$PENLIMS.NAI_SAMPLES S, OPS$PENLIMS.NAI_RESULTS R, ECO_LIMS.ECO_PI E WHERE S.SAMPLE_TYPE = E.SAMPLE_TYPE AND R.COMPONENT = E.COMPONENT AND R.UNITS = E.UNITS AND S.SAMPLE_ID = R.SAMPLE_ID AND S.TIMESTAMP BETWEEN TRUNC(SYSDATE - 1, 'dd') AND TRUNC(SYSDATE + 1, 'dd') ORDER BY 3 DESC, 1 ASC En esta consulta también se usa el parámetro DiasARevisar, el cual se resta en la expresión de validación del timestamp de la muestra. En el ejemplo siguiente es el 1. AND S.TIMESTAMP BETWEEN TRUNC(SYSDATE - 1, 'dd') VALIDACIONES Si el campo NODATA de la tabla ECO_PI es 2 consulta si existen resultados para el componente los cuales deben tener INSPEC = 'OUT' AND CONDITION != 'MODIFIED‘ SELECT FROM WHERE AND COUNT(Sample_Id) Contador ops$penlims.nai_results Sample_Id = 203034731 INSPEC = 'OUT' AND CONDITION != 'MODIFIED' Si existen recursos se graba el valor 0 de lo contrario se graba 1 Si el valor no es nulo verifica el valor del campo NODATA de la tabla ECO_PI Si NODATA=3 toma como valor el timestamp del resultado de la tabla NAI_RESULTS Si NODATA!=3 toma como valor el campo TEXT_VALUE de la tabla NAI_RESULTS Si el valor es nulo valida si se debe grabar nulos. Si se deben grabar nulos valida el valor de NODATA de la tabla ECO_PI Si NODATA=1 y estado=LOGGED y Condición=ONLINE y la fecha es anterior a 1 día graba EMPTY Si NODATA=1 y no (estado=LOGGED y Condición=ONLINE) graba EMPTY GENERAR ARCHIVO PLANO La generación del archivo plano es una utilidad que se ejecuta cuando el valor del parámetro enable de la sección [BATCHFL] sea si - Formatea la fecha - SI graba BATCHFILE = "SI“ If IsEmpty(vrnValor) Then vrnValor = "No Data“ escribirPlano - Si NO Graba directamente a PI COPIAR ARCHIVO PLANO A BATCHFILE Una vez terminada el procesamiento de toda la información retornada por el record set, se dispara la conexión ftp, sftp, o conexión directa a directorio compartido para la copia del archivo plano. GRABAR DATOS EN PI Este proceso es generado por la interface PI-BatchFile, la cual está monitoreando un directorio por la generación de archivos planos, una vez detecta un archivo plano que cumpla con la estructura requerida lo procesa.