Monitor-Siolab

Anuncio
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.
Descargar