Definición de Campos
Introducción. Modelo de BD
El modelo conceptual de las BBDD Ingrid sobre el motor de BD MongoDB está orientado a documentos dinámicos (asimilables a los 'registros' en SGBD relacionales), agrupados dentro de colecciones (asimilables a 'tablas' o conjuntos de ellas). Cada documento de BD tiene algunos campos fijos, con los que trabaja Ingrid, porque los tiene en cuenta para su funcionalidad y procesos, y además se puede definir una cantidad variable de campos dinámicos de los tipos de campos reconocidos por Ingrid. Relación completa de los tipos de campos y cómo utilizarlos está en Definición de campos.
En el menú de la aplicación, la definición de clases no tiene límite de niveles, y sirve solo para indicar qué campos se deben mostrar jerárquicamente e incluso en qué orden, tanto en listas (columnas) como en formularios (páginas con un conjunto de campos a consultar o rellenar). Esta definición de campos -solo visible y editable para administradores-, permite indicar cuáles son visibles en formularios, cuáles en listas, cuáles editables inicialmente, la vista por defecto...
Esquema cliente-servidor
El servidor de Ingrid está implementado en lenguaje multiplataforma nodeJs, y utiliza el motor de BD MongoDB. El cliente web está implementado, en ECMAscript y HTML5.
Las BD se encuentran en la misma máquina que la instalación de Ingrid que proporciona el servicio web, o distribuidas entre distintos servidores (por ejemplo para repartir la carga), sin importar dónde, y no se garantiza su ubicación física.
El cliente no requiere ningún tipo de instalación ni permisos especiales de red local, solo un navegador (soportados Chrome, Explorer y Firefox), y acceso a Internet para abrir una web. En los casos de las redes más protegidas que no permiten todo tipo de tráfico hacia el exterior, puede requerir la apertura de un puerto para comunicarse con Ingrid.
Los servidores de Ingra proporcionan unas condiciones con el siguiente nivel de servicio (SLA):
- Alta disponibilidad de servicio (99,8% del tiempo) en una empresa de alojamiento de reconocimiento mundial
- Proyectos alojados en al menos 3 servidores físicos en ubicaciones geográficas distintas (todas en Europa, lo que es importante por tema de protección de datos)
Seguridad:
- Comunicaciones encriptadas con SSL (mediante HTTPS) y WSS WebSockets seguros
- Encriptación de datos sensibles dentro de cada proyecto, mediante AES-256 con clave privada SÓLO en el lado del cliente
- Backup cada dos horas de los datos de las bases y archivos del proyecto, con historial de modificaciones durante 6 meses
- Aplicaciones cliente y servidor con librerías propias, lo que aumenta la dificultad de hackeo por código publicado
Rendimiento:
- Acceso a directorios de datos del servidor desde la propia aplicación
- Alta velocidad de entrada y salida en servidores dedicados de 1Gbps ancho de banda simétrico máximo (no garantizado en todo momento)
- Motor de BBDD mongoDB orientado a Big data
- Procedimientos, Informes y Descripciones Parámetricas en Javascript (Con traducción automática desde estándar FIEBDC)
- Conector con Visual Studio Code para depuración de Procedimientos, Informes y programas paramétricos
- Modelo de datos con clases personalizables y ampliables por el usuario desde el interface
- Control de obra con mensajería mediante Telegram (con envío de multimedia y seguimiento GPS en tiempo real con almacenamiento de las rutas)
Definición de Campos
El administrador de BD, pulsando el botón Admin, puede
acceder en una clase (conceptos cuyo código comienza con punto) a la
persiana <Nombre_de_la_clase> > Campos y crear
en ella campos de los tipos que permite Ingrid en las clases
predefinidas por la aplicación. También modificar los existentes
predefinidos (con chincheta azul
a la derecha), excepto el Código y Tipo, y (Tamaño del
campo Tipo). El Tamaño del campo Tipo (es decir, la forma
de visualizar los datos), es modificable excepto en los campos de
tipo referencia (>), cuyo Tamaño es la Clase. También se
pueden crear nuevas clases de conceptos completas para propósitos específicos,
con los campos que se desee.
Base de ejemplo:
test-campos
IMPORTANTE: todas las herramientas definidas en estas columnas se aplican tanto a definición de los campos de interface en el modelo de datos de las clases, como a parámetros de informes, pero NO todos estos tipos de campos se pueden usar como parámetros de informes, y algunas herramientas para parámetros no tienen sentido en campos de BD. En cada caso se indicará si se aplica a campos, parámetros o ambos. Vea al final de la ficha los específicos para informes.
Al abrir cada proyecto, se chequean todos los campos, para comprobar que la estructura del modelo de datos, aunque sea un proyecto muy antiguo, es consistente con la estructura de la aplicación actual.
En la parte superior derecha de la lista de campos, además de
los botones estándar de listas (el nº de líneas, un enlace
contextual a la ayuda y el volcado de la tabla a un archivo de
texto en formato .CSV para abrir en Excel), si hemos hecho algún
cambio en los campos con respecto al modelo fijado en Ingrid (y
se trata de una clase estándar) o bien si los datos que teníamos
no coinciden con el modelo de datos actual al abrir la
aplicación, se muestra un icono
Pone campos de defecto en la tabla actual para indicar que hay diferencias
y en la lista se muestran en color rojo las diferencias.
Pulsando el botón, podemos recuperar el estado estándar actual y los campos sobrantes se guardarán en una sección 'Particulares' al final.
Menú contextual de la lista
Con el clic derecho del ratón en una de las casillas de la lista, (o clic izquierdo sobre el botón con 3 puntos en la cabecera de esa columna), se muestra el menú de operaciones siguiente:
1. SIN EDICIÓN. En todos los casos (con ninguna, una o varias líneas seleccionadas):
Cuenta campos, Cuenta todos los de las clases y subclases y los de las relaciones, para actualizar el índice de la columna ND (nº de documentos), es decir todas las referencias posibles, pero a demanda, ya que esta información no se encuentra calculada para toda la BD en tiempo real en todo momento. Ver la función siguiente para entender qué funcionalidad le da ejecutar esta opción mientras se mantiene pulsada la tecla CONTROL o MAYÚSCULAS.
2. EN MODO EDICIÓN, acciones sobre campos:
2.A. Con o sin selección:
Analiza campos, Recorre toda la información almacenada en todos los documentos mongoDB de la clases y crea como campos de interface los que no existan, poniéndolos al final como campos particulares para no desordenar los que ya había. Esto se puede realizar tras la ejecución de un script que crea o modifica datos, tras una importación, etc. en la que pueden quedar campos ocultos por no haberlos contemplado el administrador en el interface.
El log de campos se pone al pie de la ventana, y en color rojo los encontrados que no existen. El clic en la opción de menú mientras se pulsa la tecla CONTROL, muestra todos los campos de todas las superclases, es decir todos los campos que puede mostrar el documento. Si se hace clic junto con la tecla MAYÚSCULAS, crea los campos que no existan. El tipo de campo que se pone es estimado estadísticamente por el tipo de datos contenido, luego debemos comprobar que es correcto.
2.B. Con una o más líneas seleccionadas:
Renombra campo... Cambia en todas las referencias a ese campo en todos los documentos de la BD, es la forma correcta de renombrar un campo a menos que no se quieran cambiar esas referencias. OJO! Si en esta lista de campos cambiamos el código de un campo tecleándolo directamente en la columna código se nos muestra un diálogo indicando
Cambia el tipo de campo... Muestra un diálogo que permite
cambiar entre diversos tipos de campo compatibles entre sí. Ejemplos
típicos: tenemos uno de texto y queremos convertirlo en una lista
cerrada de clasificaciones (rótulos #), o viceversa, o bien de rótulos a
referencias (_ids de conceptos) o viceversa. En el diálogo se pide el
tipo destino >Clase # s t e r, y el segundo campo indica
cómo se interpreta el formato de los datos existentes (en negrita
el que usa por defecto si no se especifica nada):
· en referencias
>Clase se puede usar: _id cla cod res
· en rótulos # se puede
usar: cod res
· en campos selección se puede usar: num
res
Cuando los destinos son referencias (>Clase o #) se puede especificar el formato de la serie incremental.
Por último, Prueba, simula la conversión lo mejor posible sin hacer ningún cambio.
Cambia valores del campo... Permite reemplazar contenido en el campo seleccionado, en todos los documentos de la base, indicando un array de 2 valores en formato javascript, es decir, como muestra el ejemplo del diálogo, ["origen","origen2"] reemplaza si es un campo cadena, todas las apariciones de la primera por la segunda. La función protege la mayoría de cambios incorrectos, del tipo de reemplazar [12,"a"] en un campo de tipo entero.
Elimina valores de campos seleccionados... Es el paso previo a eliminar el campo con su contenido, si simplemente borramos el campo de esta lista, el programa nos lo va a permitir pero estos datos van a quedar ocultos dentro de la base. También podemos querer eliminarlos todos porque ya no tengan utilidad los existentes, pero el campo sí.
3. Sólo con 2 líneas seleccionadas (mutiseleccionando con clic+CONTROL):
Copia valores del campo <campo_orig> <campo_dest> Ejecuta esa función SIN TENER EN CUENTA los tipos de campo origen y destino. Se copian en el destino con el tipo del origen, es decir, nos tenemos que ocupar nosotros de no copiar el contenido de un campo entero en un texto o viceversa, o bien, utilizar luego la función Cambia el tipo de campo. CUIDADO, por ejemplo, si el destino es un campo de tipo clasificación, no se crean los valores en la tabla de rótulos.
(·) Icono
El clic en el icono de la línea muestra debajo de esta persiana la lista de conceptos que tiene cualquier valor en ese campo. Pueden aparecer tantas listas como clics hagamos, hasta que las cerremos.
Código
Identificador del campo en la clase. En cada clase se pueden repetir, naturalmente. ATENCIÓN a que si una clase es 'hija' de otra (una subclase), hereda los campos de las clases 'padre' y por tanto sí se podrían reescribir, primando el de cada clase sobre los heredados.
Restricciones a los identificadores de DB: Sólo se admiten: caracteres ASCII de 0-9, a-z, A-Z y los 9 símbolos
!#$%&@-._, también se admite el espacio en blanco, aunque no se recomienda
en absoluto, porque puede complicar las ordenaciones, búsquedas,
exportaciones e importaciones...
Esta limitación viene menos dada por el motor de BD mongoDB, que admite casi
cualquier carácter, que por los nombres de archivos Windows, dado que los
códigos o _id de concepto se utilizan muchas veces como nombre de archivo
para generar webs, exportaciones...
Unidad de medida
Un simple texto para documentar la unidad en las que se miden las cantidades del campo. No tiene otro alcance.
(Abr) Abreviatura
Rótulo que se imprimirá en tablas, para que los nombres largos de campos no hagan columnas muy anchas.
Resumen
Nombre completo del campo, es uno de los datos que se pueden cambiar en los campos fijos (con una chincheta en el campo Info) para personalizarlos, igual que la Abreviatura. Si se redefine un campo de una clase superior, se mostrará el Resumen definido en la subclase más baja.
Tipo
Todos los tipos disponibles y la forma de usarlos están en el tema Definición de campos. Tipos.
Este dato en cada campo, permite definir el tipo de dato que se almacena en cada campo de cada clase (número, cadena de caracteres, identificador...) y el formato que se da al mostrar el contenido de cada campo. Por ejemplo, un real almacenado 2222.1234 se puede mostrar como '2222' (sin decimales) o 2.222,12 (con 2 decimales, no significa que se redondee, y además se usa la notación decimal española, no la que está almacenada en BD).
Búsqueda
Permite establecer una condición para filtrar los valores que se presentarán en los campos de tipo referencia a concepto cuando se utiliza la herramienta 'buscar todo', es decir, teclear una máscara punto (.) o hacer clic en el icono de la clase de concepto referencia. Por ejemplo, si hace referencia a la clase espacio (> esp), con una búsqueda como 'cla=espzon' nos mostrará para elegir en un diálogo solo los de una subclase zona, no todos. Es una ayuda que no se aplica poner una máscara por _id o resumen, ni tampoco al teclear explícitamente el _id de un espacio de otra clase, si queremos introducirlo a propósito.
Valor por (Defecto)
Valor que consideramos habitual y que se puede recuperar en todos los parámetros de golpe, con el botón de la esquina superior derecha de la persiana Parámetros: Pone parámetros por defecto
Marca de agua
Muestra el texto difuminado para dar información sobre el contenido que hay que poner en el campo o el valor de defecto que contiene. Se puede introducir el dato encima de él.
Observaciones
Un texto opcional para documentación interna y comentarios del administrador de BD en cada campo.
(Ayuda) en pista
Texto de ayuda rápida y breve de uso del campo o parámetro. Cuando se pone, aparece junto al nombre del campo un punto central (·) indicando que al ponerse encima del nombre aparece un tip. Se pueden poner múltiples pistas separadas por barras verticales ( | ) en múltiples botones push (tipo bp) y cada una aparecerá en su botón por orden.
Tema de (Ayuda) del campo
Ayuda más extensa que la pista, es una página propia de la ayuda en línea y el usuario no puede editarla, es documentación de la aplicación para campos predefinidos. Se indica una dirección url absoluta con lo que aparece junto al campo un icono de ayuda, que abre la documentación al pie de la página.
Restricciones
Permite especificar para cada campo una lista de códigos de grupos de usuarios (como g1, g2...), seguidos por dos puntos (:) y una restricción L(lectura) o E(edición) y separados por espacios en blanco, como: g5:E g6:L
Se usan habitualmente en combinación con los modos T de traza, y la restricción consiste en que los usuarios de esos grupos no puedan editar o ni siquiera ver el campo.
Modificadores
Todos los modificadores de campos disponibles y la forma de usarlos están en el tema Definición de campos. Modificadores.
Matizan el comportamiento del campo según su Tipo, permitiendo cambiar dónde se muestran (fichas, listas...), cómo se alinean, cómo se muestran según el valor que tienen, su comportamiento, etc.
(NºD)ocumentos
El nº de conceptos en toda la BD que tienen algún valor en ese campo.
Info
Muestra información complementaria sobre herramientas de la aplicación, relacionadas con el campo según su tipo:
- Un icono cualquiera de una de las clases existentes en la base actual, se pone para identificar que es una referencia a un identificador de un concepto de esa clase. Ayuda a localizar las líneas de referencia y a qué clases.
-
la chincheta indica que es un
campo fijo del programa, no se puede eliminar (aunque sí cambiar de
sitio, moviéndolo arriba o abajo en al lista de campos). En estos sólo
se pueden modificar los datos (o columnas del campo): Resumen,
Abreviatura, Unidad de medida y SOLO si está activado
en al cabecera de lista el Permitir campos personalizados.
-
una o varias letras indican que tiene asociado un
eventos que se ejecutará al leer, introducir un dato, borrar, o
modificar la información del campo. Pueden ser: (L)ee, (G)raba,
(g)rabado y/o (F)iltro.
Definición de Campos SÓLO COMO parámetros de procedimientos
Hay otras columnas en la definición de campos que SÓLO SON APLICABLES A CAMPOS DEFINIDOS COMO Parámetros de procedimientos, no se aplican a los de una ficha o lista de conceptos:
Modificadores
- A, parámetro oculto en el modo avanzado. Cuando hay al menos
uno, se muestra en la esquina sup. derecha de la persiana parámetros
el botón.
- m1, memorizar contenido en la instancia del navegador; por
defecto se guarda el último valor introducido en un parámetro de informe
para usarlo las siguientes veces que lo ejecutemos. Si algún parámetro no se
quiere guardar, por ejemplo una fecha que siempre cambia, usar m0.
- x, ejecutable.
Se usa principalmente en campos botón, para forzar la recarga de
parámetros, ya que se lanza la función inicia() que puede utilizar
el informe.
Procesa
Permite especificar un código javascript que se ejecuta dentro de una función function (bas, pro) { ... } para cargar un valor o bien ocultar un parámetro, ya que está hecho para que cuando sea el resultado sea indefinido (undefined), no se muestre.
Por ejemplo, en el informe común pro.pre.exporta, en el
campo en que se indica el nº de certificación con el que ejecutar el
informe, se define el código JS: if (bas.cab.cerl) return ingrid.memoria.cera||bas.cab.cerl.length
que comprueba si hay definidas certificaciones, y pone en el parámetro la guardada en memoria al usarlo la última vez o bien la última certificación definida.
Campo Estilo de concepto
La representación como icono de cualquier concepto de BD, se hace inicialmente en la clase a la que pertenece. En el campo Estilo de esa clase, se guarda la representación del icono de conceptos para las listas y la propia ficha, y también para la representación de capa geográfica en el mapa (que puede ser un icono para un objeto puntual, una línea abierta o una superficie cerrada con relleno).
Además se puede especificar un estilo de representación en el mapa que debería ser (y suele serlo) igual que el icono de clase de conceptos, pero no para algunas excepciones ni para elementos lineales o superficiales, por ejemplo.
Se puede ver la especificación completa y ejemplos de uso en Anexo. Estilos de conceptos y capas.
Directorios comprimidos
El servidor de archivos permite en una ruta dada, tener comprimidos todos los archivos de un directorio (incluidos subdirectorios) con el mismo nombre y extensión .zip (no .rar). El acceso a todos los archivos será transparente, como si estuviera descomprimido. Siempre recomendado construir el archivo zip sin compresión para un acceso más rápido.
Limitación: los nombres de archivos se buscan exactos distinguiendo
mayúsculas de minúsculas, es decir, si teníamos un directorio \mapas\nivel1
dentro del directorio de la base, con 25.000 archivos, y los comprimimos en
uno \mapas\nivel1.zip, sin comprimir, admitía buscar, por ejemplo, un archivo https://ingra.es/mapas/nivel1/F003.21.11.png
aunque estuviese grabado con el nombre F003.21.11.PNG,
pero comprimido no se encontraría.