Campos
Los formatos de un campo de Flex, la diferencia entre formato y rol, y las propiedades que publica el servidor y muestra la ventana de un campo.
Un campo es una columna de una sección: el dato que se rellena en la ficha y la columna física de su tabla. En la Flex API es el tipo FlexObjectTypes.Fields. Un campo se define con dos decisiones: el formato (el tipo físico de la columna) y el rol (la máscara que define cómo se trata el dato).
Antes de empezar
- Ser Administrador de la empresa. Los campos se crean y se colocan en Diseñando la ficha; su ficha se explica en La ficha de un campo.
- El formato y el rol se eligen al crear y no se cambian: los dos determinan el tipo de la columna. Para cambiarlos hay que borrar el campo y crear otro.
El formato
El formato es el enum FieldFormatE del SDK.
| Valor | FieldFormatE | Rótulo | Qué guarda |
|---|---|---|---|
| 1 | BOOL | Sí/No | Una casilla marcada o no. |
| 2 | INT | Entero | Un número sin decimales. |
| 3 | DEC | Decimal | Un número con decimales. |
| 5 | STR | Texto | Una línea de texto. El rol recorta la longitud (60 caracteres con Email, 100 con Web). |
| 6 | DateAndTime | Fecha y hora | Un instante, en UTC. La ficha lo muestra en la zona horaria del usuario. |
| 7 | DATE | Fecha | Un día, sin hora. |
| 8 | TIME | Hora | Una hora del día, sin fecha. |
| 9 | Guid | Relación | El identificador de una ficha de otra sección. Exige la sección de destino. |
| 11 | virtual | Botón | Un campo que no crea columna: un botón o un contenedor de la ficha. |
Un campo Entero se crea con el control de tamaño estándar, o pequeño si su rol es un enum o Año.
Un campo de archivo o de imagen es una relación a la tabla de imágenes con un identificador fijo; no se crea desde FlexHub.
Formato y rol
El rol es el enum RoleFieldE del SDK. Con formato Texto y rol Email el campo valida y muestra un correo; con formato Decimal y rol Moneda, un importe. FlexHub ofrece 22 combinaciones preparadas en la ventana ¿Qué tipo de campo?, que abre cada fila de Nuevos campos en el diseñador; el catálogo entero está en Roles de campo.
Al crear con el SDK, Flex_CreateObjectAsync(FlexObjectTypes.Fields, sectionId, patch) recibe el formato, el rol y, en un contenedor, el renderizado en el mismo patch. El servidor también admite la posición, el tamaño, la pestaña y si es obligatorio.
Cada alta consolida el esquema y tarda unos 11 segundos. Con la clave consolidar a 0 en el patch, el servidor crea el campo sin consolidar: la columna existe, pero el campo no sale en la ficha ni admite ediciones hasta la siguiente consolidación. Crea así todos los campos y llama una vez a Flex_ConsolidateAsync. El diseñador de FlexHub crea así los campos de Nuevos campos.
Identidad
La ventana de un campo en FlexHub abre con la Etiqueta a lo ancho, encima de las pestañas, y debajo el Nombre interno. Las dos notas están en la card Ayudas de la pestaña General.
| Columna | Rótulo en FlexHub | Qué es |
|---|---|---|
etiqueta | Etiqueta | Lo que lee el usuario. Obligatoria, mínimo 3 caracteres. Cambiarla cambia la palabra clave del campo. |
informacion | Ayuda para quien lo rellena | Texto de ayuda en la ficha. |
infodev | Nota para quien lo programa | Nota interna. |
El servidor rechaza las etiquetas reservadas del motor: destinador, autor del alta, empleado principal, contenedor-listado, exportar en módulos, fecha del dato, fecha de alta y hora local. Son los valores de CampoEspecialE.
Comportamiento
Las columnas que publica Flex_GetEditablesAsync(FlexObjectTypes.Fields) y su enum, cuando lo tienen. En FlexHub están en la pestaña En la ficha: las cuatro primeras en su primera card y los bloqueos en la card Quién puede escribirlo.
| Columna | Rótulo en FlexHub | Valores |
|---|---|---|
visible | Se ve en la ficha | Sí/No. Oculto, la ficha no lo muestra nunca. |
obligatorio | Hay que rellenarlo | Sí/No. No deja guardar la ficha vacío. |
rendertype | Cómo se muestra | RenderizadoEspecialCampoE: Genérico (0), Pequeño (1), Sí/No (2), Gigante (3), Desplegable (4), Desplegable no editable (5), Contenedor (6), Texto (7), Botón (8), Botón pequeño (9), Botón gigante (10), Contenedor de Archivo (11). |
validadore | Qué se valida | CriterioValidacionCampoE: Cualquier valor numérico (0), Mayores que 0 (1), Menores que 0 (2), Positivos o 0 (3), Negativos o 0 (4), Diferente de 0 (5). |
serverlocke | Bloqueo en el servidor | CriterioBloqueoCampoServerE: Nunca (0), Ediciones (1), Si está rellenado (2), Si está vacío (3). |
lockrest | Bloqueo por la API REST | CriterioBloqueoRestE: Automático (0), Bloquear al Agregar (1), Bloquear al Editar (2), Bloquear Siempre (3), Nunca (4). |
bloqueoe | Bloqueado, en el menú del campo del diseñador | CriteroBloqueoCampoE: Nunca (0), Siempre (1), Ediciones (2), Si está rellenado (3), Si se ha agregado al listado (4). El diseñador pasa de Nunca a Siempre y al revés. La ventana del campo no lo muestra. |
indx | Sí/No. El índice en la base de datos. Cambiarlo exige consolidar. FlexHub no lo muestra. |
Los tres bloqueos actúan en sitios distintos: la ficha (bloqueoe), el servidor al escribir cualquier registro (serverlocke) y la API REST (lockrest). Un bloqueo del servidor con Ediciones impide cambiar el valor una vez creado el registro; con Si está rellenado, solo cuando ya tiene valor.
Dónde sale en la ficha
La geometría viaja en las columnas pestana, pestanaorden, posicionx, posiciony, ancho, alto, etiquetaizquierda y etiquetaizquierdaancho. Se cambian arrastrando en Diseñando la ficha, o en lote con Flex_ApplyLayoutAsync, que escribe todo o nada. La ficha mide 1018 px de ancho. En la ventana de un campo, la card Dónde sale el campo de la pestaña En la ficha lleva al diseñador con Abrir el Diseñador.
Qué guarda
La card Qué guarda de la pestaña General muestra lo que define el campo. Todo es de solo lectura menos la sección a la que apunta una relación: cambiar el resto convertiría el campo en otro.
| Dato | Columna | Qué es |
|---|---|---|
| Tipo de dato | formato | El formato. |
| Enteros y decimales | decimalescalc | Solo en un decimal. |
| Apunta a la sección | relaciontabla | Solo en una relación. Siempre una sección principal: ni plantillas base ni tablas de líneas. Se puede cambiar. |
| Valor único | esunique | Si el valor no se repite en dos fichas. |
| Sección | La ficha de la que es el campo. | |
| Campo base | campobaseid | Solo en el campo de una sección derivada. Abrir lo edita en otra ventana: ahí se cambia lo que se decide en la base, como Confidencial. |
Cambiar la sección a la que apunta
Elige la sección nueva en Apunta a la sección, pulsa Aceptar y después Consolidar ahora. Consolidar rehace los informes que pasan por el campo.
- Los registros que ya tienen el campo relleno no se convierten: siguen apuntando a fichas de la sección anterior.
- En el campo de la sección base, el cambio pasa al mismo campo en todas sus derivadas.
- En una derivada solo se puede elegir la sección a la que apunta el campo base o una derivada de ella. Para apuntar a otra, cambia el campo en la sección base.
- Los campos del sistema y los de archivo o imagen no cambian de sección.
Lo que administra el motor
Estas columnas llegan en Values y FlexHub no las muestra:
| Columna | Qué es |
|---|---|
id | El GUID del campo. |
nombrecampo | El nombre de la columna, pr_ seguido de un número. |
campobaseid | El campo de la plantilla base del que hereda. |
tc | CampoEspecialE. Personalizado (1) es lo normal. Los demás son los campos que el motor reserva: Autor Del Alta (3), Destinación Destinador (4), Contenedor Listado (8), Empleado Principal (10), Criterio exportación (12), Fecha Dato (13), Fecha Alta (14), Hora local (15). |
tf | DedicatedFunctionalityE en el SDK. Ordinaria (0) es lo normal. El resto marca el papel del campo en una transacción o en la cotización de un documento de compra-venta. Los de la API: API - ID Externa (Principal) (23), API - Versión Externa (24) y API - ID Externa (Relación) (25). |
El Nombre interno, debajo de la etiqueta en FlexHub, es con el que se lee y escribe el campo desde un script: C. seguido del nombre. La Flex API no publica quién creó un campo ni cuándo.
Relaciones
Un campo de formato Relación guarda el id de una ficha de la sección de destino. Con relaciones se navega de una factura a su cliente. Un algoritmo de tipo Relacionado agrega las líneas de un documento, y un informe cruza datos de varias secciones. En un script, el campo se lee con C. seguido de su nombre interno, y una relación se recorre encadenando el nombre interno del campo de la ficha de destino, un nivel. Ver Scripts.
Siguiente: Roles de campo.