Clases. Definición e interface común

Introducción

Los administradores de la BD pueden consultar y modificar el árbol de clases de la base actual en Menú > Clases.

Las clases en Ingrid, se pueden ver como los distintos tipos de 'fichas' de datos o contenedores de información que tenemos en cada proyecto: documentos, inventario, personal, espacios, capítulos de presupuesto, recursos...

El modelo de datos esta orientado a documentos de BD que contienen toda su información y a veces una gran parte de la información de los documentos con los que se relaciona. Por ejemplo, en el mismo objeto JSON de BD, se guardan todos los valores de los campos que tiene por la clase a la que pertenece un concepto, pero también la información de las imágenes externas y archivos que tiene relacionados, la lista de objetos georreferenciados en un mapa, y la lista de objetos que tiene relacionados o que le apuntan mediante algún campo.

La estructura de clase sí está orientada a objetos, con una estructura flexible: definen los campos que podrían mostrarse en un concepto de esa clase o con qué formato y en qué orden, pero el concepto puede tener más aunque no sean visibles.

La clase contiene toda la funcionalidad sobre algo que hemos modelizado en Ingrid: una carpeta con contenidos, un programa Javascript que ejecuta un procedimiento (exportar datos, leer archivos o imprimir un informe en html...), o por ejemplo, toda la información relativa a una orden de trabajo o a un elemento de maquinaria.

En la base de datos ingrid-comun hay un catálogo de clases que los administradores pueden utilizar para construir (copiándolas) el modelo de datos de su base.

Una base nueva toma como plantilla la base de datos 'plantilla-vacia', las clases principales de organización (administración), espacios e inventario. Para utilizar otras muchas clases predefinidas, los administradores de BBDD tienen que abrir la conexión con la base 'ingrid-comun' que es plantilla de otras muchas clases especializadas, con modo admin en Menú > Avanzado > Clases comunes y desde allí puede marcar las que desee tener en el proyecto actual.

Base de ejemplo: test-campos

Persiana nombreClase (administradores)

Es de color NARANJA y por tanto, sólo se ofrece a los usuarios de grupo ADMINISTRADORES (grupo 'admin'), cuando se encuentran en modo admin. Permite definir las características, comportamiento y funcionalidad de cada clase.

Persiana Campos

Para especificar la lista ordenada de campos de la clase, con sus tipos, pista de ayuda, etc. Puede ver un ejemplo de todos los tipos de campos y su uso en la base de ejemplo indicada al inicio (test-campos). Hay sub-persianas para definir los campos de la clase actual y de las superiores de las que herede campos.

Los iconos de la columna Info indican si tiene información en los campos refl (referencias), gral (imágenes), geol (mapas)...

La documentación rápida de la columna Tipo de campo y la presentación en Modificadores, está en la pista (tip) del botón de cabecera de cada uno y la documentación completa del control de campos en la Persiana de campos.

Persiana Relaciones

Se muestra cuando hemos definido algún campo de tipo >>, para definir los campos de relación entre el concepto actual y la lista de conceptos relacionados en ese campo.

Persiana Eventos

Permite crear funciones Javascript (hay documentación en la página Definición de eventos), con nombres que identifican la acción que dispara la ejecución de esa función, y el del campo que se va a mirar cada vez que cambie. También hay eventos para el momento de la creación de un conceptos, de su borrado, modificación de cualquier manera... Este código es parte de la funcionalidad de la clase y se traslada con ella cuando se copia la clase a otra base (por ejemplo desde la base ingrid-comun).

Hay ejemplos y documentación en la base   test-eventos.

Persiana JSON

Muestra en ese formato el contenido el documento actual (la definición de la clase) en la BD mongo. En cualquier otro concepto que no sea una clase, muestra la información completa del documento mongoDB (referencias, georreferencias, medidas, otras relaciones, campos directos, códigos de imágenes...)

Persiana Clase (Expertos)

Permite a los usuarios del perfil EXPERTOS (g1, que son responsables del contenido y presentación de los datos, no de la definición del modelo de datos), marcar las opciones de presentación y características de la clase. Estos campos se pueden ver y editar también en modo tabla, en conjunto desde el árbol completo de Clases, en vez de una a una.

Descripción

Resumen o nombre, Descripción y Observaciones de la clase. También campos particulares si los hay.

Presentación

Si se indica Sin campos, la clase sólo sirve de estructura jerárquica, pero no aparece al navegar desde una clase pasando por las superiores.

La Clase superior indica cómo se anida en al estructura de árbol de la pestaña de Clases.

Ordenación por defecto de los conceptos, principalmente cuando aparezcan en cualquier lista como primer elemento. La sintaxis es de un objeto con los campos y valores 1 ó -1 (inverso), como por ejemplo en las tareas preventivas: {"fecpro":1,"esp":1}

Persianas de ficha. Combina controla la visualización de las persianas en las que se agrupan los campos de distintos bloques. Por ejemplo: una ficha de Persona puede tener los campos generales de concepto, algunos particulares que se hayan definido en todos los conceptos, los particulares de la clase persona e incluso los de la subclase si se tratara de una subclase como 'empleado', 'subcontrata', 'contacto'...

Por defecto, si son pocos, todos se combinan en una única persiana. Con la primera opción: En única pestaña, podemos forzarlo a que sea así aunque sean bastantes y con No combina, forzar a que cada uno salga en su persiana.

 

Persianas de ficha. Presenta controla qué campos se presentan con el formato definido en el campo anterior: Sólo de clase oculta los particulares de clase y subclase, De clases sin base, al contrario, oculta los campos generales comunes y No presenta oculta todos.

Persianas de relaciones controla cómo se agrupan las distintas subpersianas de relaciones (listas de relaciones con conceptos de otras clases, de las cuales se muestra una persiana por clase). Por defecto se agrupan en un contenedor cuando son más de 3. Sin contenedor, quita una persiana de agrupación y las muestra todas, Con contenedor fuerza mostrarlas así aunque sólo haya 1 ó 2, y No presenta oculta el panel de relacione siempre para esa clase.

Persianas de referencias controla la presentación de los conceptos que apuntan mediante algún campo al concepto actual. Todos se muestran juntos en un contenedor, pero con este conmutador se puede hacer que no aparezca la persiana, si no tiene interés en esta clase de conceptos.

 

Los 3 grupos siguientes de campos definen qué información se presenta acerca de las imágenes e información geográfica relacionada con los conceptos de la clase y cómo se muestran las columnas cuando es una lista de conceptos de esta clase.

ATENCIÓN, en las clases principales de administración de BD (Carpetas, Búsquedas, Procedimientos), no se muestra esta sección EN LA FICHA DE CLASE porque los siguientes datos se definen INDIVIDUALMENTE PARA CADA CONCEPTO, no en conjunto para toda la clase.

Presenta imágenes de : controla en la persiana de imágenes y archivos asociados, el presentar sólo los relacionados con el concepto y/o los de sus hijos. Si tiene información de archivos relacionados propios, siempre se mostrarán (se esté en modo edición o no), aunque tenga la opción actual=no

Presenta mapas de : controla la representación geográfica en el mapa:

- actual, su propia ubicación o posición geográfica (uno o varios iconos, líneas abiertas y/o polígonos cerrados). OBLIGATORIO para poder mostrar cualquiera o varias de las opciones siguientes:

- sus espacios "hijos" o inferiores relacionados en esa jerarquía de campos de relación mencionados.

- sus espacios "nietos" (los relacionados con sus "hijos" de la misma forma).

- su espacio "padre" al que el concepto actual apunta con ese primer campo de referencia a un espacio.

- los conceptos relacionados como "hermanos", o sea, todos los conceptos que tienen el mismo "padre" que el actual.

- el contenido geográfico dentro de los límites de la georreferencia actual, sin ninguna relación de campos en BD.

Vista de columnas : Particular es como un botón de grabación que mantiene la vista de columnas actual cada vez que se muestra la lista. Para cambiar la vista hay que desactivar la opción, poner el formato deseado y volver a activar. 

Estilo

Tiene un completo interface para hacer modificaciones en el campo Estilo con el que se presentan los iconos de los conceptos en las listas y en el Geomapa (bordes, relleno, bloque a utilizar y sus características, visualización del texto, icono, zoom...)

La definición detallada de estilos está en la página de Estilos de capas.

Se pueden ver ejemplos de casi todos en la base   test-mapas

La información de estas 7 pestañas es la misma que se puede ver al seleccionar una capa en la persiana Capas del editor de la Persiana de georreferencias (mapa). En al pista de capa campo, se muestra el modificador al que corresponde en la especificación detallada. Por ejemplo: color de borde (#), color de relleno (@), grueso de borde (g)...

IMPORTANTE los campos de pestaña Varios: Campo con estilo extendido, Campo con Color y Campo con tamaño, permiten representar geográficamente los individuos con detalles más realistas según una clasificación (que corresponderá a un bloque vectorial en formato .inca, por ejemplo), y dos campos de enteros que le darán color y tamaño en función del dato que tenga cada ficha individual.

Veamos dos casuísticas habituales:

  • Jardinería: la representación gráfica de cientos de especies botánicas (que suelen ser conceptos) con una quincena de bloques distintos que por color y forma son los que se pueden distinguir visualmente en el mapa. Para esto creamos otro campo de tipo clasificación "familia gráfica" y definimos los pocos valores en la clase, cada uno con su grafismo .inca, tomados del índice de bloques. Esto tiene la ventaja de representar en el mapa con un campo y tener el dato de la especie en otro. Para evitar la desventaja de tener 2 campos que mantener a mano y además cometer errores, el método aconsejable sería hacer un procedimiento script que pondrá el grafismo en el campo no editable según una tabla de correspondencia entre especies y grafismos-bloques, y que se lanza cuando se quiera para tener todos los datos actualizados. Se podría hacer un cuadro de especies (conceptos) con un campo rótulo con el grafismo más adecuado y usar ese en el script.
  •  Carreteras:  representación de las señales verticales por su familia (pueden ser unas 100). Al coincidir el nº de grafismos con el nº de familias, podemos convertir el campo de tipo referencia a concepto familia a tipo rótulo, y definir nuestra tabla de rótulos, teniendo un solo campo de familia.

El Estilo controla la forma de visualización:

  • Del icono gráfico que se muestra en el campo Icono (·) de la línea cuando los conceptos de esa clase se muestran en listas de datos alfanuméricos
  • En la Persiana de georreferencias de cualquier concepto (bloques para representar elementos puntuales, o bien líneas para elementos lineales, o áreas cerradas para elementos superficiales).

Globales (Expertos)

En algunas clases, aparece esta persiana con los datos globales a todos los elementos de ciertas clases fijas de la aplicación: Imágenes, Procedimientos, Espacios (características relativas a mapas), Cuentas Contables, Bancos.

Persiana Clasificaciones

Sólo si la clase tiene campos de tipo clasificación (rótulos), esta persiana muestra una subpersiana por cada una de las tablas de rótulos, con su nombre y el código de campo en el tip. En el menú contextual se pueden Contar los conceptos que tienen referencia a cada valor de la lista de rótulos, se puede cambiar el icono, color de representación, etc. para que se muestre al tomar ese valor si así lo hemos indicado en el estilo, y se pueden dar de alta, baja o modificar los rótulos.

El clic en el icono permite una búsqeud arápida de los conceptos con ese valor, que se muestran en una persiana de lista debajo de esta.

Persiana Subclases

Sólo se muestra si la clase tiene subclases.

Una clase puede apuntar a otras en el campo Clase superior, para establecer una jerarquía entre ellas, de forma que tenga los campos y eventos de la clases superiores, añadidos a los suyos. Las clases muestran en esta persiana todas las clases que le hacen referencia.

Persiana Búsqueda

En diversas subpersianas aparecen los distintos conjuntos de campos de la clase (concepto, clase general, subclase, si se trata de una de ellas...) como un formulario para aceptar datos y filtrar en la siguiente persiana, Conceptos, el resultado de la búsqueda. En principio aparecen todos los campos que en su definición no tengan el modificador b0 (no presentar en búsquedas). El formato del campo para aceptar los filtros cambia en algunos, para que pueda ser un formulario. por ejemplo:

En la BD de ejemplo indicada al comienzo de la página, si abrimos la página de la clase .campos, en su persiana Administración > Definición de campos > campos de .campos, veremos que el campo 't2· Texto multilínea' tiene el modificador 'b0', que impide que salga en los formularios de búsqueda. En la Persiana Búsqueda de más abajo, no se muestra.

Por otro lado hay algunos tipos incompatibles con la búsqueda en formulario, como las Tablas auxiliares definida inline, y otros. Aunque pueden verse, no tienen sentido para buscar, como la el tipo firma, el código JSON, código JS, vista de mapa Google o vista streetView... que deberían tener el modificador en 'b0'. Estos ya tienen internamente en la columna Modificadores 't0' para no mostrar estos campos como columnas en las tablas.

 

Los datos admitidos como máscaras y expresiones regulares, varían según el tipo de campo:

· Los campos de tipo Fecha, igual que los otros numéricos, enteros y reales, admiten un texto, para poder poner expresiones como '>20230112' o '>1000 <5000'

· Los de tipo Botón aparecen como booleanos check triestado que permiten, dejarlo vacío (no filtra), poner valor positivo (=sí=1=verdadero), o poner valor negativo (=no=0=falso).

· Los de tipo referencia a un concepto o clasificación son de selección múltiple (aunque el campo no esté definido como tal) para poder filtros por varios valores a la vez.

· Todos admiten la 'existencia'  !!  o 'no existencia'  !  de algún valor, poniendo esas máscaras.

· Numéricos, Fecha y Fecha-Hora: [operador] valor (el formato decimal Fecha hora es: AAAMMDD.HHMMSS)

· Alfanuméricos: Cualquier texto equivale a la búsqueda con expresión regular /valor/i (es decir, busca el valor independiente de mayusc/minusc en cualquier parte del texto. También admite una expresión regular´, en la que el valor sería por ejemplo: /

· Tabla definida en la clase (>>): tecleamos una máscara, o código, o resumen para seleccionar un concepto concreto, y lo busca como en los campos de referencia (>): los que incluyan una referencia al indicado.

El uso de la sintaxis más habitual en expresiones regulares de búsqueda PCRE (las de Perl también usadas en mongoDB) en el Anexo de Expresiones regulares

Persiana Conceptos · (opcionalmente, filtro)

Muestra en un control de lista (o tabla) todos los conceptos de la clase. El menú contextual permite las operaciones habituales en listas de conceptos: Cambiar Icono o Identificador, eliminarlos, copiarlos, lanzar los procedimientos contextuales sobre ellos. También navegar a los conceptos accesibles desde sus campos de referencia a otros conceptos.

Si el conmutador al pie Incluye subclases está pulsado, se mostrarán todos los conceptos de todas las subclases (habitualmente las clases con subclases no tienen conceptos propios, son organizativas).

Si el resultado se encuentra filtrado por algún dato en la persiana de Búsqueda, las condiciones del filtro aparecen en al cabecera de esta persiana, sino, se muestran todos los conceptos.

Botón Menú Contextual

En al zona inferior derecha se tiene un botón para un menú contextual a las opciones de definición de clases:

En una primera sección muestra una opción para mostrar la página de ayuda contextual a la clase que estamos viendo.

Debajo, muestra la lista de procedimientos que tengan como Clase asociada, la del concepto actual tomando 3 orígenes distintos: la propia BD, la base comun y los definidos en el código JS de la propia aplicación Ingrid.