DEV AUXILIARES/CONSTRAINT

De Pragma Wiki
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Descripción

Los auxiliares de tipo CONSTRAINT permiten definir constricciones (o limitaciones) a los valores posibles de un campo, con esto tenemos una capa más de validación en el ingreso de datos del sistema.

Las constricciones pueden ser de 3 tipos:

  • ENUMERACION define una lista de valores posibles.
  • FILTRO define un filtro que se aplica sobre alguna tabla.
  • LIMITE define límites con un mínimo y un máximo.

Este tipo de auxiliar aplica a:

Modo de operación

Estos auxiliares son manejados directamente por la aplicación.

Etiquetas

Las etiquetas en uso son:

<COMANDO>

Define el comando a ejecutar, cierra con </COMANDO>. No hay limitaciones en su complejidad o longitud.

<MENSAJE>

Define un mensaje a mostrar al usuario si el valor ingresado no es válido, cierra con </MENSAJE>.

<TAG SQL>

Indica que la constricción se resuelve ejecutando el SQL incluido dentro de <COMANDO> y </COMANDO>.

<TAG TIPO>

Indica el tipo de constricción:

  • ENUMERACION define una lista de valores posibles.
  • FILTRO define un filtro que se aplica sobre alguna tabla.
  • LIMITE define límites con un mínimo y un máximo.

Ejemplos

Ejemplo de una constricción por ENUMERACION

Esta constricción aplica sobre la clase REMITOS MATERIA PRIMA/DETALLE, campo Articulo y solo permite registrar los artículos que estén definidos en la tabla REMITOS MATERIA PRIMA/VALUACION.

<TAG TIPO>ENUMERACION
<TAG SQL>
<MENSAJE>

</MENSAJE>
<COMANDO>
SELECT DISTINCT
RPDTL_VALUACION.Articulo
, Descripcion = ART.FDESCRIPCION

FROM
RPDTL_VALUACION
, ART

WHERE
ART.FCODIGO = RPDTL_VALUACION.Articulo

ORDER BY
RPDTL_VALUACION.Articulo
</COMANDO>
  • La etiqueta <TAG TIPO>ENUMERACION indica que la constricción es de tipo enumeración por lo que debería retornar una lista de valores posibles.
  • La etiqueta <TAG SQL> indica que debe ejecutarse el comando para obtener la lista de valores posibles.
  • La etiqueta <MENSAJE></MENSAJE> se encuentra vacía y podría no existir. El motivo es que en las enumeraciones el ingreso del dato se hace seleccionando de una lista por lo que no hay ocasión de ingresar un dato inválido lo que hace que el mensaje de error sea innecesario.
  • Los comandos entre las etiquetas <COMANDO> y /<COMANDO> retornan los artículos que existen en REMITOS MATERIA PRIMA/VALUACION.

Debe notarse que:

  • Cuando un campo tiene asociado un auxiliar de tipo constraint y enumeración, el control de edición cambia a una combobox.

Advertencia:

 - Cuando un campo tiene asociado un CONSTRAINT de tipo ENUMERACION, el control de edición cambia a un combobox automáticamente en la aplicación.

Ejemplo de una constricción por FILTRO

Esta constricción aplica sobre la clase ORDENES PAGO, campo FTARJETA_CARTERA y solo permite registrar TESORERIA/CARTERAS que estén habilitadas para el circuito de caja ingresado.

En estos casos el control de edición sigue siendo una caja de edición con la posibilidad de presionar F5 para elegir un valor posible, pero ese valor estará filtrado por el comando del auxiliar.

<TAG TIPO>FILTRO
<TAG SQL>
<MENSAJE>
La cartera ingresada no está habilitada para este circuito de caja.
</MENSAJE>
<COMANDO>
FCODIGO IN
(
SELECT DISTINCT
CAV_CIRCUITOD.FCARTERA
FROM
CAV_CIRCUITOD
WHERE
CAV_CIRCUITOD.FCIRCUITO = FBN(FCIRCUITOCAJA)
AND CAV_CIRCUITOD.FOPERACION = 'EMISION'
)
</COMANDO>
  • La etiqueta <TAG TIPO>FILTRO indica que se trata de una constricción de tipo filtro.
  • La etiqueta <TAG SQL> indica que debe ejecutarse el comando para obtener la lista de valores posibles.
  • La etiqueta <MENSAJE></MENSAJE> define el mensaje de advertencia que verá el usuario si elige una cartera que no está incluida en el filtro.
  • Los comandos entre las etiquetas <COMANDO> y /<COMANDO> indican que el campo FCODIGO de la cartera debe estar dentro de aquellos definidos EN TESORERIA/CIRCUITOS DE CAJA DETALLE.

Ejemplo de una constricción por LIMITE

Esta constricción aplica sobre la clase ANTICIPOS PAGO, campo FFECHAPAGO y se asegura que la fecha de pago definida no sea menor que la de emisión del comprobante.

Las constricciones por límite deben retornar dos registros:

  • Uno de ellos debe tener el texto min en el primer campo, y en el segundo campo el valor asociado al valor mínimo posible.
  • Y el otro registro debe tener el texto max en el primer campo y en el segundo campo el valor asociado al valor máximo posible.

El control de edición sigue siendo una caja de edición, y el resultado estará limitado por el mínimo y el máximo.

<TAG TIPO>LIMITE
<TAG SQL>
<MENSAJE>
La fecha de pago no puede ser menor a la fecha de emisión del anticipo
</MENSAJE>
<COMANDO>
SELECT
'min',
valor = FBN(FCMPFECHA)

UNION SELECT
'max',
valor = dateadd(day, 365, FBN(FCMPFECHA))
</COMANDO>
  • La etiqueta <TAG TIPO>LIMITE indica que se trata de una constricción de tipo límite.
  • La etiqueta <TAG SQL> indica que debe ejecutarse el comando para obtener la lista de valores posibles.
  • La etiqueta <MENSAJE></MENSAJE> define el mensaje de advertencia que verá el usuario si elige una fecha fuera de los límites.
  • Los comandos entre las etiquetas <COMANDO> y /<COMANDO> retornan dos registros, uno para el min y otro para el max.