Link

Formularios

Índice

  1. Diseño de formularios
  2. Formulario de los atributos de una capa
  3. Formulario de base de datos
  4. Subformularios
  5. Permisos de los formularios de base de datos
  6. Reglas de validación de los formularios
  7. Formulario de consulta de selección por atributos

Los formularios se utilizan en JMap para ingresar los parámetros de búsqueda en las consultas de selección por atributos, para el ingreso de los datos de los atributos de las capas editables y para la gestión de los datos almacenados en las bases de datos, siempre que éstos estén relacionados con los elementos de una capa. Existe también un tipo de formulario denominado subformulario, al que se accede a partir de un formulario.

El administrador JMap concibe los formularios mediante el diseñador de formularios y los usuarios pueden luego utilizarlos en las aplicaciones JMap Pro, JMap Web, JMap NG y JMap Survey. Según los permisos acordados, los usuarios pueden utilizar los formularios de ingreso de datos para visualizar, añadir, modificar o suprimir los datos.

Si el administrador no crea un formulario para ingresar los atributos de los elementos de una capa, JMap genera un formulario por defecto. Este formulario es muy simple y presenta los atributos disponibles. Siempre es mejor crear un formulario que responda perfectamente a sus necesidades específicas.

Las secciones siguientes explican en detalle el proceso de creación de los formularios así como la función de cada tipo de formulario.

img

Diseño de formularios

La interfaz de diseño de formularios permite definir el contenido y disposición de los formularios utilizados para el ingreso de atributos y para las consultas de selección por atributos.

Cada formulario está estructurado en forma de grilla con un número parametrable de filas y de columnas. Se pueden añadir filas y columnas en todo momento. Las filas vacías al final del formulario y las columnas vacías a la derecha del formulario se eliminan automáticamente al guardarlo.

Cada célula de la grilla puede contener un solo componente del formulario (etiqueta, campo de ingreso de texto, lista de valores, etc.) pero cada componente puede extenderse en el ancho sobre varias células.

El formulario puede estar estructurado en una o varias secciones. El usuario puede navegar a través de las mismas, lo que resulta útil en el caso de formularios largos y complejos.

La imagen siguiente muestra las partes principales del diseñador de formularios.

img

   
1 Deslice un componente hacia una célula del formulario. Todas las células disponibles son realzadas.
2 Presione img para crear una nueva sección.Presione img para reinicializar el formulario.
3 Acceda a las secciones a partir de estas pestañas.
4 Presione img y img para insertar filas o columnas vacías en los lugares correspondientes.
5 El símbolo img indica que el campo está configurado en modo sólo lectura.
6 El símbolo img indica que se trata de un campo obligatorio.
7 El botón img permite modificar los parámetros del componente. El botón img permite suprimir el componente del formulario.

La mayoría de los componentes del formulario deben estar asociados a un atributo de una capa, a un campo en una base de datos o a un criterio de búsqueda, según el tipo de formulario que esté creando. Los componentes Etiqueta, Foto y Grupo constituyen las excepciones a esta regla.

Parámetros de los componentes

Cada tipo de componente tiene su propia interfaz de configuración de parámetros. Los parámetros controlan el comportamiento y la apariencia del componente. El cuadro siguiente describe los parámetros que son comunes a varios componentes, seguido más abajo por una descripción de todos los componentes disponibles.

Parámetros de los componentes de formulario  
Atributo Seleccione el atributo de la capa o la variable de la consulta al que se asocia el componente. Es el atributo o la variable cuyo valor será ingresado mediante este componente del formulario.
Obligatorio Determine si el campo es obligatorio. El usuario podrá enviar el formulario sólo cuando los campos obligatorios estén completos (hayan recibido un valor). Para volver opcionales algunos de los campos debe desmarcar esta opción. En el diseñador de formularios los campos obligatorios son identificados con el símbolo img.
Sólo lectura Active esta opción para que el componente sea en modo Sólo lectura. El usuario no podrá modificar el contenido. Esta opción debería ser utilizada para un componente que tiene un valor por defecto.
Extensión Por defecto, cada componente ocupa una sola célula. Si un componente se extiende en ancho sobre varias células, ingrese el número de células sobre las que el componente va a extenderse.
Infoburbuja Este texto se visualiza en una infoburbuja cuando el usuario pasa sobre el componente con el cursor del ratón.
Etiqueta (prefijo) Ingrese un texto estático que se visualizará arriba del componente.
Etiqueta (sufijo) Ingrese un texto estático que se visualizará a la derecha del componente.
Ancho (pixeles) Especifique el ancho en pixeles del campo de ingreso del componente, excluyendo la etiqueta en sufijo. El valor por defecto es 100. Cada columna del formulario adoptará automáticamente el ancho del componente más grande.
Valor por defecto De manera opcional, ingrese un valor por defecto para inicializar el campo de ingreso. Es posible utilizar algunas funciones para inicializar el valor por defecto de un componente.

La figura muestra un ejemplo de la disposición de los componentes de un formulario.

img

El cuadro siguiente describe los distintos componentes disponibles para la creación de formularios así como sus parámetros específicos. Ciertos componentes no están disponibles para la creación de consultas de selección por atributos.

Componentes de formularios  
img Etiqueta Texto estático que se visualiza en el formulario. El alineamiento del texto (izquierda, derecho o centrado) puede ser especificado, lo mismo que el estilo de la fuente de caracteres.Es posible utilizar algunas funciones en el texto de la etiqueta.
img Texto Campo de ingreso de un valor alfanumérico. El campo asociado debe ser de tipo alfanumérico o numérico.
Máscara de entrada: Puede ser utilizada para controlar el formato del valor ingresado.
Multilínea: (Campos alfanuméricos solamente) Si esta opción está activada, el campo de ingreso se visualiza en varias líneas de texto, lo que facilita el ingreso de textos extensos.
Número máximo de caracteres: (Campos alfanuméricos solamente) Determina la longitud máxima del texto que el usuario puede ingresar. Debe respetar las restricciones del campo de la base de datos que contiene los datos.
Validación del rango de valores: (Campos alfanuméricos solamente) Permite definir un rango de valores aceptados (por ejemplo de 0 a 100).
img Lista
(opción única)
Lista de valores entre los cuales se puede seleccionar un sólo valor. El campo asociado debe ser de tipo alfanumérico o numérico. Si el proyecto es multilingüe los valores de la lista pueden ser provistos en varios idiomas.
La lista puede ser dinámica, es decir que su contenido puede modificarse dinámicamente en función de la selección de un valor en otra lista. Por ejemplo, si selecciona un país en una lista, otra lista se actualiza automáticamente para mostrar sólo las ciudades del país seleccionado.
Atributo padre
Si la lista debe ser dinámica, seleccione el atributo padre.
Para ligar la lista B (hijo) a una lista A (padre), usted debe primero seleccionar el atributo padre para la lista B (atributo asociado a la lista A). Cada vez que hay un cambio en el valor seleccionado en la lista A, el contenido de la lista B se actualiza. Los valores en la lista B están determinados por la relación entre sus valores y los valores del atributo padre.Los valores de la lista pueden ser ingresados manualmente, provenir de una base de datos o provenir de otra fuente.
Valores
Ingrese los valores en el espacio previsto especificando para cada caso el valor padre (sólo si la lista es dinámica), el valor que se utiliza en la base de datos y la etiqueta que se visualizará en la lista. El valor ingresado será utilizado como dato. La etiqueta sirve solamente para que el usuario visualice el dato. En los casos en que el valor y la etiqueta son los mismos, ingrese el mismo valor las dos veces. Si la lista no es dinámica deje el valor padre vacío.
Obtener los valores de una base de datos
Debe seleccionar la base de datos a partir de la cual desea obtener los valores. Luego ingrese una expresión SQL que será ejecutada para obtener los valores padre (sólo si la lista es dinámica), los valores y las etiquetas que se visualizarán. Normalmente, las etiquetas deberían ser únicas y estar ordenadas.

Los ejemplos siguientes utilizan la tabla MY_TABLE.
img

Ejemplo:

Lista de países disponible en inglés y español. Esta lista no es dinámica. Se asocia a un atributo COUNTRY.

select * from MY_TABLE where ITEM_TYPE = 'Country' order by ITEM_VALUE;

En este ejemplo el campo ITEM_VALUE contiene el valor, el campo ITEM_LABEL_EN contiene el nombre del país en inglés y el campo ITEM_LABEL_ES contiene el nombre del país en español. No hay valor padre porque la lista no es dinámica (no tiene lista padre).

Ejemplo
:

Lista de ciudades disponible en inglés y español. Esta lista es dinámica. Su atributo padre es COUNTRY y está asociado a la lista precedente. Esta lista presenta la lista de las ciudades del país seleccionado en la lista padre.

select * from MY_TABLE where ITEM_TYPE = 'City' order by ITEM_VALUE;

En este ejemplo el campo ITEM_VALUE contiene el valor, el campo ITEM_LABEL_EN contiene el nombre de la ciudad en inglés y el campo ITEM_LABEL_ES contiene el nombre de la ciudad en español. El campo PARENT_VALUE contiene el valor padre.


Atención: Es necesario que la expresión SQL de una lista hijo incluya el campo que permite relacionarla con los valores padre. El ejemplo precedente utiliza select para incluir todos los campos en la petición.

Nota: A veces las etiquetas que se presentan en una lista provienen de una tabla asociada a una fuente de datos espaciales almacenada en la base de datos System de JMap Server. En esos casos no se conoce el nombre de la tabla física. Para resolver este problema usted puede utilizar esta técnica simple: en lugar del nombre de la tabla puede escribir el ID de la capa precedido por la sigla “DS”, entre dos símbolos $.

Ejemplo:

select distinct ID_CITY, CITY from $DS27$ order by CITY

Otro
Puede ocurrir que otras fuentes estén disponibles para proveer los valores y las etiquetas. En ese caso, usted puede seleccionar esta opción y elegir la fuente en la lista de fuentes disponibles.
img Lista
(opciones múltiples)
Lista de valores entre los que puede seleccionar uno o varios. El campo asociado debe ser de tipo alfanumérico. El valor ingresado en el campo es la lista de ítems seleccionados, separados por comas (,).
Los valores de la lista pueden ser ingresados manualmente o provenir de una base de datos o de otra fuente. Ver Lista (opción única) para más información.
img Casilla de verificación Permite establecer el valor del campo asociado, para el que existen solamente 2 valores posibles. Estos 2 valores posibles deben ser especificados y pueden ser cadenas de caracteres (ej.: verdadero o falso) o numéricos (ej.: 0 o 1). Si el campo asociado es de tipo lógico o booleano, se deben utilizar obligatoriamente los valores true y false.
Valor verificado: Valor que se ingresa si la casilla se marca.
Valor no verificado: Valor que se ingresa si la casilla no se marca.
img Calendario Permite seleccionar una fecha. El atributo de la capa o el campo utilizado en la consulta debe ser de tipo date, datetime o timestamp.
Formato de fecha: Es el formato con el que se visualizará la fecha seleccionada en el componente calendario. Si el usuario ingresa la fecha manualmente, deberá utilizar también ese formato (ej.: dd/MM/yyyy, yy/MM/dd H:ss, etc.).
img Foto
(No disponible para los formularios de consultas de selección por atributos)
Este componente permite al usuario insertar fotos en un formulario o en un subformulario. En las aplicaciones JMap Survey permite tomar fotos con la cámara del dispositivo. En las aplicaciones JMap Pro, JMap Web o JMap NG el usuario puede seleccionar imágenes existentes e insertarlas en el formulario o subformulario. Un formulario o un subformulario puede contener sólo un componente de tipo Foto.
En el caso de formularios de los atributos de una capa, las fotos pueden ser almacenadas en la base de datos System de JMap Server (no se requiere ninguna configuración) o en una base de datos externa. En el caso de los formularios de base de datos que contienen este componente, las fotos se almacenan en una base de datos externa. Usted debe entonces definir los parámetros requeridos para dicho almacenamiento.

Almacenamiento de las fotos:

Seleccione la opción JMap para almacenar los datos en la base de datos System de JMap (disponible sólo para los formularios de atributos de una capa). Las fotos seleccionadas por los usuarios se copian en el directorio JMAP_HOME\db\documents y la relación entre los elementos de la capa y la foto se añade a la tabla JMAP_DOCUMENTS de la base de datos System.

Seleccione la opción Externo para el almacenamiento en la base de datos o en el directorio de su elección. La relación entre el elemento de la capa y la foto se almacena en la tabla y la base de datos de su elección. Si elige Externo, debe especificar los parámetros de configuración siguientes.
Borrar las fotos con el elemento: Seleccione esta opción para que las fotos asociadas a un elemento sean suprimidas automáticamente si el elemento es borrado. Esta opción no está activada por defecto.
Base de datos: Seleccione la base de datos donde se almacenan las fotos. Esta base de datos debe haber sido configurada previamente en JMap Admin.
Tabla: Seleccione la tabla que contendrá la información sobre las fotos. Esta tabla debe tener la estructura siguiente. El nombre de la tabla y los nombres de los campos pueden variar.
img
El campo de tipo BLOB no es necesario si el almacenamiento de las fotos se hace en disco y no en la base de datos. ver la opción Persistencia de las fotos para más detalles.
Campo ID de la foto: Seleccione el campo de la tabla que contendrá el identificador digital único de la foto.
Campo ID del elemento: Seleccione el campo de la tabla que contendrá el atributo identificador del elemento de la capa. Este atributo se denomina atributo clave y se selecciona cuando se crea la fuente de datos espaciales a la que está asociada la capa.
Campo Nombre del archivo: Seleccione el campo de la tabla que contendrá el nombre del archivo de las fotos.
Campo título de la foto: Seleccione el campo de la tabla que contendrá el título de la foto.
Campo comentario de la foto: Seleccione el campo de la tabla que contendrá el comentario de la foto. Este campo tiene 255 caracteres.
Persistencia de las fotos: Seleccione la opción Base de datos para guardar las fotos directamente en la base de datos, en un campo de tipo BLOB presente en la tabla. Debe entonces seleccionar el campo de tipo BLOB. Seleccione la opción Sistema de archivos para guardar las imágenes en un directorio del sistema de archivos del servidor. Debe ingresar entonces la carpeta que contendrá los archivos de fotos.

Nota: Los campos Título de la foto y Comentario de la foto son novedades de JMap 7 Istanbul. Si usted actualiza su servidor JMap 7 Hanoi (o versión anterior) a JMap 7 Jakarta, para que los usuarios de la aplicaciones JMap puedan añadir un título o un comentario a las fotos usted debe modificar los formularios para seleccionar los campos de la tabla que contendrán esos parámetros.
img Árbol Este componente presenta un árbol de valores de N niveles. El usuario puede seleccionar un valor en el árbol, rama u hoja. Este valor se almacena en el atributo asociado. El campo asociado debe ser de tipo alfanumérico. Si el proyecto es multilingüe los valores de la lista pueden ser provistos en varios idiomas.
El árbol presenta una estructura de datos padre-hijo, como las listas dinámicas ligadas entre ellas. A diferencia de las listas dinámicas, el árbol está asociado a un sólo atributo.
Los valores del árbol pueden ser ingresados manualmente o provenir de una base de datos o de otra fuente.
Valores
Ingrese los valores en el espacio previsto construyendo la estructura del árbol. Para cada valor ingresado puede definir su padre (o la raíz del árbol).
Obtener los valores de una base de datos
Debe seleccionar la base de datos de la que desea obtener los valores. Luego debe ingresar una petición SQL que se ejecutará para obtener los valores a partir de una tabla con relación padre-hijo.
El ejemplo siguiente utiliza la tabla MY_TABLE.
img
Ejemplo:
Árbol conteniendo países (nivel 1) y ciudades (nivel 2), disponible en inglés y francés.
select * from MY_TABLE;

En este ejemplo, el campo ITEM_VALUE contiene el valor, el campo ITEM_LABEL_EN contiene el nombre del país o de la ciudad en inglés y el campo ITEM_LABEL_FR contiene el nombre del país o de la ciudad en francés. El campo PARENT_VALUE contiene el padre. Con esta configuración JMap va a construir el árbol siguiente:
img
img Tabla
(No disponible para los formularios de consultas de selección por atributos)
Permite manipular datos provenientes de bases de datos externas a JMap y para las cuales existe una relación 1 a N con los elementos de la capa.

Ejemplo:

Supongamos una capa de puntos que representan los grifos de incendio en JMap y una base de datos externa a JMap que contiene datos sobre las inspecciones realizadas a esos grifos de incendio. Cada grifo puede haber tenido 0, 1 o varias inspecciones. En el formulario de los atributos de la capa Grifos de incendio (formulario Assets ), la tabla permite visualizar los datos de las inspecciones realizadas a un grifo de incendio, cada línea de la tabla correspondiendo a una inspección. Según los permisos acordados, la tabla también permite al usuario añadir, modificar o suprimir los datos de inspección.
Pueden crearse subformularios imbricados en un formulario o un subformulario. En este ejemplo, cada inspección puede tener 0, 1 o varias intervenciones asociadas. La tabla permite en este caso, visualizar los datos de las intervenciones efectuadas en cada inspección.

La tabla está siempre asociada a un subformulario. Este subformulario define la manera en que se accede a los datos externos y permite ingresar esos datos. El subformulario debe haber sido creado previamente para poder configurar la tabla.
Subformulario: Seleccione un subformulario existente para ingresar los valores relacionados a la tabla.
Campos: Permite gestionar los campos visualizados en la tabla. Esos campos son los campos del subformulario asociado a la tabla. Es posible modificar el título de los campos, su orden de presentación así como su visibilidad en la tabla. Es posible también modificar el formato de los campos numéricos y de tipo date.

Los parámetros de la tabla permiten definir los campos de datos externos que se visualizarán en la tabla y su orden.

La figura siguiente ilustra el diseño del formulario Assets con la componente Table que permite visualizar los datos de las inspecciones, ingresados a través del subformulario Inspections.
img

La figura siguiente ilustra el diseño del subformulario Inspections con los componentes Table que permiten visualizar los datos de las intervenciones y de los inspectores, ingresados a través de los subformularios imbricados Intervertions e Inspectors.
img

Para obtener más detalles sobre la utilización de datos externos con los formularios de JMap, consulte la sección Formulario de base de datos.
img Grupo Este componente permite agrupar componentes del formulario. Los componentes que pertenecen a un mismo grupo serán rodeados por un marco con un título.
Para comenzar un nuevo grupo debe insertar este componente en una célula de una fila vacía. Este componente se extiende automáticamente a todas las células de la fila. No puede ser insertado en una fila que ya contiene otros componentes.

Importante: Si usted configura un formulario de base de datos debe asegurarse que los parámetros de cada componente del formulario son compatibles con las características del campo correspondiente en la base de datos. Por ejemplo, si en la base de datos un campo de tipo texto tiene un tamaño de 50 caracteres, el componente correspondiente del formulario, de tipo Texto, debe tener una tamaño máximo de 50 caracteres.

Funciones

Ciertas funciones permiten inicializar los componentes de los formularios:

Funciones  
username() Sustituida por el código de usuario del usuario.
fullname() Sustituida por el nombre completo del usuario.
date() Sustituida por la fecha actual.
datetime() Sustituida por la fecha y hora actuales.

Reglas de validación de los componentes

Usted puede definir reglas de validación para cada componente, a fin de disminuir los errores cuando los usuarios de las aplicaciones JMap (Pro, Survey, NG) ingresan los valores del componente. Otras reglas pueden ser creadas a nivel del formulario o de los subformularios. La sección Reglas de validación de los formularios presenta este tema.

Las reglas que usted define a nivel de los componentes permiten:

  • Volver un campo “read-only” (sólo lectura) o “required” (obligatorio) en función de los valores de otros campos del formulario.

  • Calcular los valores de ciertos campos.

JMap utiliza JSonLogic, un lenguaje de programación que permite elaborar la sintaxis de las reglas y validarlas, dado que ofrece bibliotecas de evaluación de las expresiones en todos los lenguajes. Usted puede elaborar expresiones lógicas, matemáticas o de cadenas de caracteres.

Las reglas a nivel de los componentes permiten tres tipos de expresiones:

Reglas  
Obligatorio Usted puede ingresar una expresión booleana que indica los casos en los que el campo es obligatorio. Es decir que si la expresión que usted ingresa es respetada (es verdadera), el campo es obligatorio. La expresión implica valores de otros campos del formulario.

Ejemplo:

{"==" : [ { "var" : "STATUT" }, "done" ]}

Esta expresión para el campo MATERIAL, indica que cuando el usuario ingresa el valor “done” en el campo STATUT, debe ingresar un valor en el campo MATERIAL para poder guardar y cerrar el formulario.

Nota:
Esta expresión es excluyente con el parámetro Obligatorio del componente.
Si usted marca el parámetro Obligatorio, el campo es siempre obligatorio y la sección Obligatorio para definir la expresión lógica de la regla no está disponible.
Si usted no marca el parámetro Obligatorio y define una regla, el campo se vuelve obligatorio sólo cuando la regla es respetada (verdadera).
Sólo lectura Usted puede ingresar una expresión booleana que indica los casos en los que el campo es en modo sólo lectura. Es decir que si la expresión que usted ingresa es respetada (es verdadera), el campo es en modo sólo lectura. La expresión implica valores de otros campos del formulario.
Nota:
Esta expresión es excluyente con el parámetro Sólo lectura del componente.
Si usted marca el parámetro Sólo lectura, el campo es siempre en modo sólo lectura y la sección Sólo lectura para definir la expresión lógica de la regla no está disponible.
Si usted no marca el parámetro Sólo lectura y define una regla, el campo se vuelve en modo sólo lectura solamente cuando la regla es respetada (verdadera).
Calculado Usted puede ingresar una expresión matemática o de cadena de caracteres para calcular el valor de un campo. El resultado de esta regla es el valor del campo.

Ejemplo:

{ "*" : [ 2, 3.1416, {"/": [ {"var" : "DIAMETER"}, 2] }] }

Esta expresión calcula el valor del campo CIRCONFERENCE a partir del valor del campo DIAMETER.

Las secciones siguientes describen las etapas de creación de los formularios y subformularios. Los ejemplos citados se refieren a las tablas de la figura siguiente:

img

Formulario de los atributos de una capa

Estos formularios son utilizados para ingresar los valores de los atributos de una capa editable. Cada capa puede tener sólo un formulario de ingreso de datos. El usuario debe poseer los permisos necesarios para modificar los valores de los atributos de una capa. La sección Permisos de las capas ofrece más detalles sobre el tema.

Creación de un formulario para los atributos de la capa

Para crear un formulario para ingresar los valores de los atributos de una capa, seleccione Formularios en el menú de parámetros de la capa. Presione Crear.

Ingrese un nombre para el nuevo formulario. Debe seleccionar el tipo de formulario Atributos de la capa y presionar Guardar.

Si no es dirigido automáticamente, seleccione Diseño de formulario en el menú Parámetros para abrir el diseñador de formularios y añadir los componentes. Cada componente del formulario debe asociarse a un atributo de la capa. El componente presenta el valor del atributo, el cual es actualizado cuando el usuario cierra el formulario y guarda las modificaciones. La sección Diseño de formularios ofrece más detalles sobre el tema.

img

El formulario de los atributos de la capa se utiliza para manejar solo los atributos que están disponibles en la fuente de datos espaciales y vinculados a la capa.

Formulario de base de datos

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.

img

Los formularios de base de datos se utilizan para manejar datos externos a JMap que se relacionan con los elementos de una capa mediante un campo en común.

Creación de formularios de base 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 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 table 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.

Subformularios

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.

Creación de subformularios

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.

img

Los subformularios son formularios de base de datos que permiten manejar los datos que guardan una relación 1 a N con los datos de la capa, utilizando un campo en común.

Subformularios imbricados

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.

img

Los subformularios son formularios de base de datos que permiten manejar los datos que guardan una relación 1 a N con los datos del subformulario, utilizando un campo en común.

La figura presenta un ejemplo de subformularios imbricados en una aplicación JMap Pro.

img

Permisos de los formularios de base de datos

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.

Reglas de validación de los formularios

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:

  1. Presione img para abrir el menú y seleccione la opción Reglas. La interfaz que lista las reglas se visualiza.

  2. Presione Crear para abrir la ventana de creación de una regla.

    Regla  
    Nombre Ingrese un nombre para la regla.
    Expresión Ingrese la expresión lógica que define la regla. La sintaxis es la de JSonLogic. 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.

    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 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'
  3. Presione Guardar.

Usted puede crear varias reglas para un formulario.

Formulario de consulta de selección por atributos

Como los formularios de edición de datos, los formularios utilizados en las consultas de selección por atributos son creados mediante el diseñador de formularios. Son utilizados por los usuarios para ingresar los parámetros de las búsquedas. Cada componente del formulario está entonces asociado a un parámetro de la consulta ($param1, $param2, etc.).

Contrariamente a los otros tipos de formulario, éstos no pueden ser divididos en secciones. Otra diferencia es que los componentes de tipo Foto no están disponibles para este tipo de formulario.

Estos formularios son creados cuando se configuran las consultas de selección por atributos, presionando Diseño de formulario.

Cuando se crea un formulario resulta muy importante tener en cuenta los parámetros que son obligatorios y los que son opcionales, en función de la definición de la expresión de consulta. Por ejemplo, si un componente del formulario no tiene la opción Obligatorio activada, el texto de la expresión de consulta debe prever que ese parámetro es opcional. La sección Creación de consultas de selección por atributos ofrece más información sobre el tema.