Los formularios de base de datos son utilizados para administrar datos almacenados en bases de datos externas a JMap. Permiten añadir nuevos datos así como modificar y suprimir los datos existentes. Se pueden crear varios formularios de este tipo para una misma capa. Cada formulario de base de datos incluye sus propios permisos para determinar los usuarios que pueden manipular los datos.
Estos formularios pueden ser utilizados para manejar datos que guardan una relación 1 a 1 con los datos de la capa. En ese caso, cuando un elemento es creado se añade un registro en la base de datos y al contrario, se elimina el registro cuando un elemento es suprimido.
Los formularios pueden también usarse para manejar datos que guardan una relación 1 a N con los datos de la capa. En ese caso, se trata de un tipo especial de formulario denominado subformulario, que está siempre asociado con un componente tabla de un formulario. La sección Subformularios presenta más detalles sobre el tema.
La configuración de este tipo de formularios es una función avanzada de JMap que requiere la elaboración de expresiones SQL para la extracción, inserción, modificación y supresión de datos.
Para crear un formulario de base de datos, seleccione Formularios en el menú de parámetros de la capa. En la pestaña Formulario presione Crear.
Debe ingresar un nombre para el nuevo formulario. Seleccione el tipo Base de datos y seleccione la base de datos que contiene los datos que se usarán en el formulario.
En la etapa siguiente, una ventana le permite escribir las expresiones SQL del formulario. Estas expresiones sirven para extraer, añadir, modificar y suprimir los datos. La sentencia SELECT es obligatoria mientras que las otras sentencias son opcionales. Los usuarios de las aplicaciones JMap podrán efectuar solo las operaciones para las cuales usted suministra una sentencia SQL.
La configuración de las expresiones SQL utiliza una sintaxis especial. En regla general, cada línea de la sintaxis debe terminar con un punto y coma (;). La sintaxis no es sensible a mayúsculas y minúsculas.
El cuadro siguiente explica en detalle el funcionamiento de esta sintaxis.
Sintaxis de los formularios de base de datos
ev(attrib) o elementValue(attrib)
Función que devuelve, para un elemento, el valor del atributo especificado en parámetro.
Ejemplo
ev(*city*);
Retorna el valor del atributo CITY del elemento.
fv(field) o formValue(field)
Función que devuelve el valor ingresado en el formulario, para el campo especificado en parámetro. El nombre del campo debe obligatoriamente incluir el nombre de la tabla como prefijo.
Ejemplo
fv(*table.name*);
Devuelve el valor ingresado en el componente del formulario asociado al campo TABLE.NAME de la base de datos.
ei() o elementId()
Función que devuelve el identificador del elemento. Puede tratarse de un campo jmap_id o de otro campo, tal como se ha configurado en la fuente de datos espaciales.
$variable
Permite crear e inicializar variables que pueden luego ser utilizadas en las distintas expresiones. En el caso de la sentencia INSERT, por ejemplo, resulta obligatorio crear una variable que contiene el identificador único del elemento añadido.
Ejemplo
$city = EV(*city*);
Crea una variable $city
inicializada con el valor del atributo CITY del elemento.
nti(table, field) o nextTableId(table, field)
Función que devuelve el próximo valor que se utilizará como identificador numérico para la tabla y el campo especificados en parámetro.
El campo debe existir en la tabla especificada y debe ser de tipo numérico entero.
La función determina cual es el valor máximo presente en la tabla y devuelve ese valor incrementado en 1 (max + 1).
Esta función resulta útil cuando se añade un nuevo registro en la base de datos en una tabla que contiene un identificador numérico único.
Ejemplo
$id = nextTableId(inspections, inspection_id)
Crea e inicializa una variable $id
con el valor del próximo identificador INSPECTION_ID de la tabla INSPECTIONS. Si el valor máximo presente es 100, el valor devuelto es 101.
El cuadro siguiente explica en detalle cada uno de los parámetros de la ventana de creación de un formulario para base de datos.
Propiedades del formulario
Base de datos
Seleccione la base de datos que contiene los datos que serán manipulados con el formulario.
Sentencia SELECT
Expresión SQL que obtiene los datos para poblar los campos del formulario.
Todos los campos devueltos por esta expresión pueden ser utilizados para configurar los componentes del formulario así como intervenir en otras expresiones definidas en el formulario mediante la función fv()
.
Las sentencias deben contener una condición que permita establecer el enlace entre un atributo de la capa y un campo de la base de datos.
Ejemplo de sentencia para un formulario de base de datos (1 a 1):
SELECT * FROM ASSET_INFO WHERE ASSET_ID = EI()
;
En este ejemplo se obtienen todos los campos de la tabla ASSET_INFO.
Los campos obtenidos están disponibles para la configuración de los componentes del formulario.
El campo ASSET_ID es utilizado para establecer el enlace con el elemento de la capa, mediante la función ei()
.
Si la funciónei()
retorna un valor en formato texto, para visualizarlo usted debe rodear la función con apóstrofes:
SELECT * FROM ASSET_INFO WHERE ASSET_ID = 'EI()';
Ejemplos de sentencia para un formulario de base de datos (1 a N):
Ejemplo del subformulario Inspections:
SELECT * FROM INSPECTION WHERE ASSET_ID = EI();
En este ejemplo se obtienen todos los campos de la tabla INSPECTION, que quedan disponibles para la configuración de los componentes del subformulario.
El campo ASSET_ID se utiliza para establecer la relación con el elemento de la capa ASSETS mediante la función ei()
.
Si la funciónei()
retorna un valor en formato texto, para visualizarlo usted debe rodear la función con apóstrofes:
SELECT * FROM INSPECTION WHERE ASSET_ID = 'EI()';
Ejemplo del subformulario imbricado Inspectors:
SELECT * FROM INSPECTOR WHERE INSPECTION_ID = FV(INSPECTION_ID);
En este ejemplo se obtienen todos los campos de la tabla INSPECTOR que quedan disponibles para la configuración de los componentes del subformulario.
El campo INSPECTION_ID se utiliza para establecer la relación con el elemento de la tabla INSPECTION utilizando la función fv(field)
.
Ejemplo del subformulario imbricado Interventions:
SELECT * FROM INTERVENTION WHERE INSPECTION_ID = FV(INSPECTION_ID);
En este ejemplo se obtienen todos los campos de la tabla INTERVENTION que quedan disponibles para la configuración de los componentes del subformulario.
El campo INSPECTION_ID se utiliza para establecer la relación con el elemento de la tabla INSPECTION utilizando la función fv(field)
.
Identificador único
La sentencia SELECT debe incluir obligatoriamente un campo de identificación único (numérico o alfanumérico). Seleccionar el campo que funcionará como identificador único. Ejemplo de sentencia formulario de base de datos (1 a 1): ASSET_INFO.ASSET_ID Ejemplo de sentencia formulario de base de datos (1 a N) subformulario Inspections: INSPECTION.INSPECTION_ID Ejemplo de sentencia formulario de base de datos (1 a N) subformulario imbricado Inspectors: INSPECTOR.INSPECTOR_ID Ejemplo de sentencia formulario de base de datos (1 a N) subformulario imbricado Interventions: INTERVENTION.INTERVENTION_ID
Sentencia INSERT
Expresión SQL que inserta nuevos datos en la base de datos.
Configure esta sentencia sólo si el formulario permitirá la inserción de registros en la base de datos.
Se debe definir obligatoriamente una variable que contiene el valor del identificador único para el nuevo registro.
Ejemplo de sentencia para un formulario de base de datos (1 a 1):
$id = ei()
;
INSERT INTO ASSET_INFO (ASSET_ID, ASSET_YEAR, BRAND, ASSET_HEIGHT) VALUES (EI(), FV(ASSET_INFO.ASSET_YEAR), FV(ASSET_INFO.BRAND), FV(ASSET_INFO.ASSET_HEIGHT))
;
En este ejemplo, cuando se ejecuta la sentencia SQL de tipo INSERT los datos del formulario se insertan en la tabla ASSET_INFO.
Los valores de los campos ASSET_INFO.ASSET_YEAR, ASSET_INFO.BRAND y ASSET_INFO.ASSET_HEIGHT provienen de los valores ingresados en el formulario por el usuario, utilizando la función fv(field)
.
El valor de la variable ASSET_INFO.ASSET_ID proviene de la función ei()
.
Ejemplos de sentencia para un formulario de base de datos (1 a N):
Ejemplo del subformulario Inspections:
$id = nti(INSPECTION, INSPECTION_ID)
;
INSERT INTO INSPECTION (INSPECTION_ID, ASSET_ID, INSP_DATE, INSP_COMMENT) VALUES ($id, EI(), FV(INSPECTION.INSP_DATE), FV(INSPECTION.INSP_COMMENT))
;
En este ejemplo se crea una variable $id
que se inicializa con el próximo valor (max + 1) del campo ID de la tabla INSPECTION.
Cuando se ejecuta la sentencia SQL de tipo INSERT los datos del subformulario se insertan en la tabla INSPECTION.
Los valores de los campos INSP_DATE e INSP_COMMENT provienen de los valores ingresados por el usuario en el subformulario utilizando la función fv(field)
.
El valor del campo INSPECTION_ID proviene de la variable $id
.
El valor del campo ASSET_ID proviene de la funciónei()
.
Ejemplo del subformulario imbricado Inspectors:
$id = nti(INSPECTOR, INSPECTOR_ID)
;
INSERT INTO INSPECTOR (INSPECTOR_ID, INSPECTION_ID, CONTACT_INFO, TEAM) VALUES ($id, FV(INSPECTOR.INSPECTION_ID), FV(INSPECTOR.CONTACT_INFO), FV(INSPECTOR.TEAM))
;
En este ejemplo se crea una variable $id
que se inicializa con el próximo valor (max + 1) del campo ID de la tabla INSPECTOR.
Cuando se ejecuta la sentencia SQL de tipo INSERT los datos del formulario se insertan en la tabla INSPECTOR.
Los valores de los campos INSPECTION_ID, CONTACT_INFO y TEAM provienen de los valores ingresados por el usuario en el subformulario utilizando la función fv(field)
.
El valor del campo INSPECTION_ID proviene de la variable $id
.
El valor del campo INSPECTOR_ID proviene de la variable$id
.
Ejemplo del subformulario imbricado Interventions:
$id = nti(INTERVENTION, INTERVENTION_ID)
;
INSERT INTO INTERVENTION (INTERVENTION_ID, INSPECTION_ID, WORK_ORDER, FOLLOW_UP) VALUES ($id, FV(INSPECTION_ID), FV(INTERVENTION.WORK_ORDER), FV(INTERVENTION.FOLLOW_UP))
;
En este ejemplo se crea una variable $id
que se inicializa con el próximo valor (max + 1) del campo ID de la tabla INTERVENTION.
Cuando se ejecuta la sentencia SQL de tipo INSERT los datos del formulario se insertan en la tabla INTERVENTION.
Los valores de los campos INSPECTION_ID, WORK_ORDER y FOLLOW_UP provienen de los valores ingresados por el usuario en el subformulario utilizando la función fv(field)
.
El valor del campo INTERVENTION_ID proviene de la variable$id
.
Variable del identificador único (ID) del nuevo elemento
Seleccione la variable que contiene el valor del identificador único del nuevo registro insertado en la tabla. Ésta debe ser definida con la sentencia INSERT. Para que sus datos se guarden en la base de datos (las fotos, por ejemplo), usted debe definir y seleccionar esta variable.
Ejemplo de sentencia formulario de base de datos (1 a 1):$id
Ejemplo de sentencia formulario de base de datos (1 a N) subformulario Inspections: $id
Ejemplo de sentencia formulario de base de datos (1 a N) subformulario imbricado Inspectors: $id
Ejemplo de sentencia formulario de base de datos (1 a N) subformulario imbricado Interventions: $id
Sentencia UPDATE
Expresión SQL que actualiza los datos en la base de datos. Configure esta sentencia solo si el formulario permite la actualización de los datos.
Ejemplo de sentencia para un formulario de base de datos (1 a 1):
UPDATE ASSET_INFO SET ASSET_YEAR = FV(ASSET_INFO.ASSET_YEAR), BRAND = FV(ASSET_INFO.BRAND), ASSET_HEIGHT = FV(ASSET_INFO.ASSET_HEIGHT) WHERE ASSET_ID = FV(ASSET_INFO.ASSET_ID)
;
En este ejemplo, cuando se ejecuta la sentencia SQL de tipo UPDATE los datos del formulario se utilizan para actualizar la tabla ASSET_INFO.
Los valores de los campos ASSET_YEAR, BRAND y ASSET_HEIGHT provienen de los valores ingresados por el usuario en el formulario utilizando la función fv(field)
.
La cláusula WHERE permite actualizar el registro que contiene el identificador único del elemento, ASSET_ID, utilizando también la función fv(field)
.
Ejemplos de sentencia para un formulario de base de datos (1 a N):
Ejemplo del subformulario Inspections:
UPDATE INSPECTION SET INSP_DATE = FV(INSPECTION.INSP_DATE), INSP_COMMENT = FV(INSPECTION.INSP_COMMENT) WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID)
;
En este ejemplo, cuando se ejecuta la sentencia SQL de tipo UPDATE los datos del subformulario se utilizan para actualizar la tabla INSPECTION.
Los valores de los campos INSP_DATE e INSP_COMMENT se actualizan a partir de los valores ingresados por el usuario en el subformulario, utilizando la función fv(field)
.
La cláusula WHERE utiliza la función fv(field)
para obtener el valor del identificador único del registro.
Ejemplo del subformulario imbricado Inspectors:
UPDATE INSPECTOR SET CONTACT_INFO = FV(INSPECTOR.CONTACT_INFO), TEAM = FV(INSPECTOR.TEAM) WHERE INSPECTOR_ID = FV(INSPECTOR.INSPECTOR_ID)
;
En este ejemplo, cuando se ejecuta la sentencia SQL de tipo UPDATE los datos del subformulario se utilizan para actualizar la tabla INSPECTOR.
Los valores del campo CONTACT_INFO se actualizan a partir de los de los valores ingresados por el usuario en el subformulario, utilizando la función fv(field)
.
La cláusula WHERE utiliza la función fv(field)
para obtener el valor del identificador único del registro.
Ejemplo del subformulario imbricado Interventions:
UPDATE INTERVENTION SET WORK_ORDER = FV(INTERVENTION.WORK_ORDER), FOLLOW_UP = FV(INTERVENTION.FOLLOW_UP) WHERE INTERVENTION_ID = FV(INTERVENTION.INTERVENTION_ID)
;
En este ejemplo, cuando se ejecuta la sentencia SQL de tipo UPDATE los datos del subformulario se utilizan para actualizar la tabla INTERVENTION.
Los valores de los campos WORK_ORDER y FOLLOW_UP se actualizan a partir de los de los valores ingresados por el usuario en el subformulario, utilizando la función fv(field)
.
La cláusula WHERE utiliza la función fv(field)
para obtener el valor del identificador único del registro.
Sentencia DELETE
Expresión SQL que suprime los datos en la base de datos. Configure esta sentencia solo si el formulario permite la supresión de los datos.
Ejemplo de sentencia para un formulario de base de datos (1 a 1):
DELETE FROM ASSET_INFO WHERE ASSET_ID = FV(ASSET_INFO.ASSET_ID)
;
En este ejemplo el registro correspondiente al valor del atributo ASSET_ID del elemento es eliminado de la tabla ASSET_INFO, utilizando la función fv(field)
para obtener el valor del identificador del elemento.
Ejemplos de sentencia para un formulario de base de datos (1 a N):
Ejemplo del subformulario Inspections:
DELETE FROM INSPECTION WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID)
;
DELETE FROM INTERVENTION WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID)
;
DELETE FROM INSPECTOR WHERE INSPECTION_ID = FV(INSPECTION.INSPECTION_ID)
;
En este ejemplo, el registro correspondiente al identificador único de la inspección es eliminado de la tabla utilizando la función fv(field)
para obtener el valor del identificador.
Al eliminarse la inspección, los registros de los subformularios imbricados INTERVENTION e INSPECTOR correspondientes al identificador único de la inspección son eliminados también de la tabla.
Ejemplo del subformulario imbricado Inspectors:
DELETE FROM INSPECTOR WHERE INSPECTOR_ID = FV(INSPECTOR.INSPECTOR_ID)
;
En este ejemplo, el registro correspondiente al identificador único del inspector es eliminado de la tabla utilizando la función fv(field)
para obtener el valor del identificador.
Ejemplo del subformulario imbricado Interventions:
DELETE FROM INTERVENTION WHERE INTERVENTION_ID = FV(INTERVENTION.INTERVENTION_ID)
;
En este ejemplo, el registro correspondiente al identificador único de la intervención es eliminado de la tabla utilizando la función fv(field)
para obtener el valor del identificador.
Los subformularios son formularios de base de datos que se abren a partir de un componente Tabla presente en otro formulario. Usualmente se utilizan para manejar datos que tienen una relación 1 a N con los elementos de la capa. Pueden servir, por ejemplo, para el manejo de datos de inspecciones de activos (N inspecciones pueden ser asociadas a un mismo objeto). Se configuran de manera similar a los otros formularios de base de datos.
Para crear un subformulario, seleccione Formularios en el menú de parámetros de la capa. En la pestaña Subformulario presione Crear. Debe ingresar un nombre para el nuevo formulario y seleccionar la base de datos que contiene los datos que se utilizarán en el subformulario.
En la etapa siguiente debe configurar la expresión SQL del subformulario, como se detalla en la sección precedente.
Varios niveles de subformularios pueden estar imbricados en un subformulario. Se utilizan para manejar datos que tienen una relación 1 a N con los registros del subformulario. Pueden servir, por ejemplo, para la gestión de los datos de intervenciones que tienen lugar como consecuencia de la inspección de un activo (N intervenciones pueden estar asociadas a una inspección). Un subformulario imbricado se abre a partir de un componente Tabla presente en el subformulario con el que se vincula. La creación de un subformulario imbricado sigue las mismas etapas que la creación de subformularios. El cuadro de la sección Creación de formularios de bases de datos.
La figura presenta un ejemplo de subformularios imbricados en una aplicación JMap Pro.
Los formularios para base de datos tienen sus propios permisos, que se describen en este cuadro.
Permisos de los formularios
Agregar datos
Permite que un usuario o grupo de usuarios utilicen el formulario para añadir nuevos datos en la base de datos.
Editar datos
Permite que un usuario o grupo de usuarios utilicen el formulario para modificar datos existentes en la base de datos.
Eliminar datos
Permite que un usuario o grupo de usuarios utilicen el formulario para suprimir datos existentes en la base de datos.
Los formularios de atributos de la capa y los formularios y subformularios de bases de datos le permiten definir reglas de validación global del formulario, basadas en múltiples campos.
Las reglas validan los valores de los campos del lado del cliente, es decir, los valores que los usuarios de las aplicaciones JMap ingresan en los formularios. La validación tiene lugar cuando se guarda el formulario, lo que no es posible si el formulario no respeta las reglas.
Para configurar las reglas de un formulario o subformulario, abra la interfaz de configuración del formulario o subformulario:
Presione Crear para abrir la ventana de creación de una regla.
Regla
Nombre
Ingrese un nombre para la regla.
Expresión
Ejemplo
{“!”:[
{“and”:[
{“==”:[{“var”:“STATUT”},“done”]},
{“or”:[
{“==”:[{“var”:“MATERIAL”},“”]},
{“==”:[{“var”:“INSP_DATE”}, null]},
{“==”:[{“var”: “DIAMETER”}, null]},
{“<=”:[{“var”:“DIAMETER”}, 0]}
]}
]}
]}
Esta expresión indica que cuando el valor del campo STATUT es “done”, los campos MATERIAL, INSP_DATE y DIAMETER deben ser inicializados (sus valores no pueden ser nulos ni 0).
Nota: Actualmente, JMap Server no puede validar expresiones que contienen campos de tipo de fecha.
Mensaje
Ingrese el mensaje de error que aparece cuando se viola la expresión lógica. Puede ingresar el mensaje en varios idiomas.
Ejemplo
Los campos MATERIAL, INSP_DATE y DIAMETER no pueden ser nulos o vacíos si STATUS es 'Done'
Presione Guardar.
Usted puede crear varias reglas para un formulario.
Presione para abrir el menú y seleccione la opción Reglas. La interfaz que lista las reglas se visualiza.
Ingrese la expresión lógica que define la regla. La sintaxis es la de . Puede ingresar expresiones lógicas y/o matemáticas. La expresión debe ser respetada para que el formulario sea validado y cerrado. Es decir que el usuario de una aplicación JMap (Pro, Survey, NG) debe ingresar los datos correctos para los campos afectados por la expresión para que se respete la regla (resulte verdadera) y se pueda guardar y cerrar el formulario.