Diferencia entre revisiones de «DEV AUXILIARES/EVENTO CAMPO»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Línea 79: Línea 79:
*La etiqueta '''<MENSAJE>''' define el mensaje a mostrar al usuario, en este caso es un mensaje normal que no requiere tratamiento con SQL. Cierra con '''</MENSAJE>'''.
*La etiqueta '''<MENSAJE>''' define el mensaje a mostrar al usuario, en este caso es un mensaje normal que no requiere tratamiento con SQL. Cierra con '''</MENSAJE>'''.
*La etiqueta '''<COMANDO>''' contiene el SQL. En este caso si el proveedor existe en la tabla PROEMBARGO entonces retorna 0 indicando que la verificación falló y eso har{a que se muestre el mensaje. Cierra con '''</COMANDO>'''.
*La etiqueta '''<COMANDO>''' contiene el SQL. En este caso si el proveedor existe en la tabla PROEMBARGO entonces retorna 0 indicando que la verificación falló y eso har{a que se muestre el mensaje. Cierra con '''</COMANDO>'''.
===Ejemplo usando <MENSAJEQ>===
<pre>
DECLARE @FOBJETO VARCHAR(64) = 'PRXCAMPOS'
DECLARE @FCLASE VARCHAR(64) = 'PRO_CUSTOM'
DECLARE @FCAMPO VARCHAR(64) = 'FNUMEROINSCRIPCION'
DECLARE @FTIPO VARCHAR(24) = 'EVENTO_CAMPO'
DECLARE @FCODIGO VARCHAR(64) = 'VERIFICA CUIT DUPLICADO'
SELECT
pAUXD.FLINEA
, pAUXD.FCOMANDO
FROM pAUXD WHERE
pAUXD.FOBJETO = @FOBJETO
AND pAUXD.FCLASE = @FCLASE
AND pAUXD.FCAMPO = @FCAMPO
AND pAUXD.FTIPO = @FTIPO
AND pAUXD.FCODIGO = @FCODIGO
ORDER BY
pAUXD.FLINEA
</pre>

Revisión del 22:04 3 abr 2025

Descripción

Los auxiliares de tipo EVENTO_CAMPOS permiten definir eventos al entrar o salir del control de edición de un campo, para agregar validaciones o dar mensajes de advertencia. Existe una posibilidad adicional que es la de asignar valores a campos, pero no se usa y se eliminará del auxiliar ya que las asignaciones tienen su propio auxiliar en DEV AUXILIARES/ASIGNACION.

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.

Si la sentencia retorna 0 (falso) entonces la verificación falla y se muestra el posible mensaje de advertencia. Si retorna 1 (verdadero) la verificación tuvo éxito y la aplicación sigue normalmente.

<EXECUTE>

Permite definir un SQL para insertar un registro en alguna tabla, por ejemplo, para llevar registro de lo ocurrido con este auxiliar.

Cierra con </EXECUTE>.

<MENSAJE>

Permite definir un mensaje que verá el usuario si corresponde, cierra con </MENSAJE>.

<MENSAJEQ>

Permite definir un mensaje que debe ser procesado por SQL antes de mostrarlo, por ejemplo, para resolver algún FBN dentro del comando.

Cierra con </MENSAJEQ>.

<MENSAJESQL>

Ídem anterior, no se usa y debería ser eliminado. Cierra con </MENSAJESQL>.

<TAG EVENTO>

Indica el tipo de evento ante el que debe ejecutarse, los valores posibles son:

  • ONENTER ocurre al entrar al control de edición. Al existir un auxiliar para las asignaciones de valores (muchas operan en el onenter) esta opción no se usa, aunque la funcionalidad está programada.
  • ONEXIT ocurre al salir del control de edición.

<TAG NOBUTTONS>

Indica al sistema que la pantalla que muestra el mensaje no debe tener botones, solo queda la "x" de cierre de la ventana a la que solo se accede con el mouse. Esta opción es para que los usuarios sean conscientes del mensaje de error y no presionen ESCAPE rápidamente sin prestar atención.

<TAG TIPO>

Indica el tipo de auxiliar, los valores posibles son:

  • ADVERTENCIA retorna un mensaje de advertencia.
  • ASIGNACION no se usa y debería ser eliminado.
  • VALIDACION valida un dato.

Ejemplos

Ejemplo de un evento de tipo ADVERTENCIA con un mensaje normal

Este auxiliar aplica a cmpCABECERA_pragma_proCUENTA que es un ancestro a cabeceras de comprobantes de proveedores, y al campo FCUENTA y verifica si el proveedor tiene embargos. Si los tiene retornará un mensaje de advertencia al usuario.

El código completo es:

<TAG EVENTO>ONEXIT
<TAG TIPO>ADVERTENCIA
<MENSAJE>
La cuenta seleccionada tiene embargos.
</MENSAJE>
<COMANDO>
SELECT EMBARGOS = CASE
WHEN EXISTS
(
SELECT * FROM PROEMBARGO WHERE
PROEMBARGO.FCUENTA = FBN(FCUENTA)
)
THEN CAST(0 AS INT)
ELSE CAST(1 AS INT)
END
</COMANDO>
  • La etiqueta <TAG EVENTO>ONEXIT indica que se ejecuta al salir del campo.
  • La etiqueta <TAG TIPO>ADVERTENCIA indica que se trata de una advertencia.
  • La etiqueta <MENSAJE> define el mensaje a mostrar al usuario, en este caso es un mensaje normal que no requiere tratamiento con SQL. Cierra con </MENSAJE>.
  • La etiqueta <COMANDO> contiene el SQL. En este caso si el proveedor existe en la tabla PROEMBARGO entonces retorna 0 indicando que la verificación falló y eso har{a que se muestre el mensaje. Cierra con </COMANDO>.

Ejemplo usando <MENSAJEQ>

DECLARE @FOBJETO VARCHAR(64) = 'PRXCAMPOS'
DECLARE @FCLASE VARCHAR(64) = 'PRO_CUSTOM'
DECLARE @FCAMPO VARCHAR(64) = 'FNUMEROINSCRIPCION'
DECLARE @FTIPO VARCHAR(24) = 'EVENTO_CAMPO'
DECLARE @FCODIGO VARCHAR(64) = 'VERIFICA CUIT DUPLICADO'

SELECT
pAUXD.FLINEA
, pAUXD.FCOMANDO

FROM pAUXD WHERE
pAUXD.FOBJETO = @FOBJETO
AND pAUXD.FCLASE = @FCLASE
AND pAUXD.FCAMPO = @FCAMPO
AND pAUXD.FTIPO = @FTIPO
AND pAUXD.FCODIGO = @FCODIGO

ORDER BY
pAUXD.FLINEA