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
 
(No se muestran 2 ediciones intermedias del mismo usuario)
Línea 76: Línea 76:


*La etiqueta '''<TAG EVENTO>ONEXIT''' indica que se ejecuta al salir del campo.
*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 '''<TAG TIPO>ADVERTENCIA''' indica que se trata de una advertencia y que el sistema seguirá operando una vez cerrado el 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 '''<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>===
===Ejemplo usando <MENSAJEQ>===
Este auxiliar aplica a '''PRO_CUSTOM''' que es un ancestro de la tabla de [[PROVEEDORES]], y al campo FNUMEROINSCRIPCION y verifica que el CUIT ingresado no exista en otro proveedor. Si existe retornará un mensaje de advertencia al usuario. Este auxiliar en particular arma ese mensaje usando SQL para completar sus datos.
El código completo es:
<pre>
<pre>
DECLARE @FOBJETO VARCHAR(64) = 'PRXCAMPOS'
<TAG EVENTO>ONEXIT
DECLARE @FCLASE VARCHAR(64) = 'PRO_CUSTOM'
<TAG TIPO>ADVERTENCIA
DECLARE @FCAMPO VARCHAR(64) = 'FNUMEROINSCRIPCION'
<TAG NOBUTTONS>
DECLARE @FTIPO VARCHAR(24) = 'EVENTO_CAMPO'
<COMANDO>
DECLARE @FCODIGO VARCHAR(64) = 'VERIFICA CUIT DUPLICADO'
 
SELECT
SELECT
pAUXD.FLINEA
FVALIDAR = CASE
, pAUXD.FCOMANDO
WHEN EXISTS
(
SELECT FBN(TABLENAME).* FROM FBN(TABLENAME) WHERE
FBN(TABLENAME).FCODIGO <> FBN(FCODIGO)
AND FBN(TABLENAME).FNUMEROINSCRIPCION = FBN(FNUMEROINSCRIPCION)
AND FBN(TABLENAME).FNUMEROINSCRIPCION IS NOT NULL
)
THEN CAST(0 AS INTEGER)
ELSE CAST(1 AS INTEGER)
END
</COMANDO>
<MENSAJEQ>
SELECT FMENSAJE = 'El CUIT ' + CHAR(39) + FBN(FNUMEROINSCRIPCION) + CHAR(39) + ' ya está asociado a la cuenta '
+ CHAR(34)
+
(
SELECT TOP 1 FBN(TABLENAME).FCODIGO + ', ' + FBN(TABLENAME).FDENOMINACION FROM FBN(TABLENAME) WHERE
FBN(TABLENAME).FCODIGO <> FBN(FCODIGO)
AND FBN(TABLENAME).FNUMEROINSCRIPCION = FBN(FNUMEROINSCRIPCION)
ORDER BY FBN(TABLENAME).FCODIGO
)
+ CHAR(34)
</MENSAJEQ>
</pre>


FROM pAUXD WHERE
*La etiqueta '''<TAG EVENTO>ONEXIT''' indica que se ejecuta al salir del campo.
pAUXD.FOBJETO = @FOBJETO
*La etiqueta '''<TAG TIPO>ADVERTENCIA''' indica que se trata de una advertencia y que el sistema seguirá operando una vez cerrado el mensaje.
AND pAUXD.FCLASE = @FCLASE
*La etiqueta '''<TAG NOBUTTONS>''' indica que la pantalla de no debe tener botones para cerrarla, y que solo puede hacerse picando con el mouse sobre la cruz arriba a derecha.
AND pAUXD.FCAMPO = @FCAMPO
*La etiqueta '''<COMANDO>''' contiene el SQL que verifica la existencia del mismo CUIT en otro proveedor. Hay un comando '''FBN(TABLENAME)''' que maneja exclusivamente la aplicación y que reemplaza ese código por el nombre de la tabla que está haciendo la verificación, la tabla correspondiente a [[PROVEEDORES]] es PRO por lo que ese código se reemplaza con el texto PRO sin comillas.
AND pAUXD.FTIPO = @FTIPO
*La etiqueta '''<MENSAJEQ>''' define el mensaje a mostrar al usuario y la '''Q''' indica que debe ser procesado por SQL para completar alguno de sus campos. Una vez procesado por SQL se muestra al usuario. En este caso el mensaje será algo así como '''"El CUIT '23333333333' ya está asociado a la cuenta 'xxx'"'''.
AND pAUXD.FCODIGO = @FCODIGO
 
ORDER BY
pAUXD.FLINEA
</pre>

Revisión actual - 15:28 4 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 y que el sistema seguirá operando una vez cerrado el 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>.

Ejemplo usando <MENSAJEQ>

Este auxiliar aplica a PRO_CUSTOM que es un ancestro de la tabla de PROVEEDORES, y al campo FNUMEROINSCRIPCION y verifica que el CUIT ingresado no exista en otro proveedor. Si existe retornará un mensaje de advertencia al usuario. Este auxiliar en particular arma ese mensaje usando SQL para completar sus datos.

El código completo es:

<TAG EVENTO>ONEXIT
<TAG TIPO>ADVERTENCIA
<TAG NOBUTTONS>
<COMANDO>
SELECT
FVALIDAR = CASE
WHEN EXISTS
(
SELECT FBN(TABLENAME).* FROM FBN(TABLENAME) WHERE
FBN(TABLENAME).FCODIGO <> FBN(FCODIGO)
AND FBN(TABLENAME).FNUMEROINSCRIPCION = FBN(FNUMEROINSCRIPCION)
AND FBN(TABLENAME).FNUMEROINSCRIPCION IS NOT NULL
)
THEN CAST(0 AS INTEGER)
ELSE CAST(1 AS INTEGER)
END
</COMANDO>
<MENSAJEQ>
SELECT FMENSAJE = 'El CUIT ' + CHAR(39) + FBN(FNUMEROINSCRIPCION) + CHAR(39) + ' ya está asociado a la cuenta '
+ CHAR(34)
+
(
SELECT TOP 1 FBN(TABLENAME).FCODIGO + ', ' + FBN(TABLENAME).FDENOMINACION FROM FBN(TABLENAME) WHERE
FBN(TABLENAME).FCODIGO <> FBN(FCODIGO)
AND FBN(TABLENAME).FNUMEROINSCRIPCION = FBN(FNUMEROINSCRIPCION)
ORDER BY FBN(TABLENAME).FCODIGO
)
+ CHAR(34)
</MENSAJEQ>
  • 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 y que el sistema seguirá operando una vez cerrado el mensaje.
  • La etiqueta <TAG NOBUTTONS> indica que la pantalla de no debe tener botones para cerrarla, y que solo puede hacerse picando con el mouse sobre la cruz arriba a derecha.
  • La etiqueta <COMANDO> contiene el SQL que verifica la existencia del mismo CUIT en otro proveedor. Hay un comando FBN(TABLENAME) que maneja exclusivamente la aplicación y que reemplaza ese código por el nombre de la tabla que está haciendo la verificación, la tabla correspondiente a PROVEEDORES es PRO por lo que ese código se reemplaza con el texto PRO sin comillas.
  • La etiqueta <MENSAJEQ> define el mensaje a mostrar al usuario y la Q indica que debe ser procesado por SQL para completar alguno de sus campos. Una vez procesado por SQL se muestra al usuario. En este caso el mensaje será algo así como "El CUIT '23333333333' ya está asociado a la cuenta 'xxx'".