View Descriptors
Los view descriptors son archivos YAML que definen como se muestra y se comporta una entidad en la UI. Evitan escribir vistas ZUL manualmente para CRUD estandar, delegando la configuracion al motor de descriptores de Dynamia.
Ubicacion
Sección titulada «Ubicacion»<module>/ui/src/main/resources/META-INF/descriptors/En algunos casos tambien pueden ubicarse en
core/cuando el descriptor no depende de componentes visuales (por ejemplo*Json.yml).
Estructura general
Sección titulada «Estructura general»Cada descriptor inicia con un encabezado que identifica tipo de vista y entidad:
view: <type> # Tipo de vista (requerido)id: <identifier> # ID unico (opcional, por defecto nombre de archivo)beanClass: com.example.Entity # Clase Java de la entidad (requerido en la mayoria de casos)controller: com.example.Controller # CrudController personalizado (opcional)customizer: com.example.Customizer # Personalizador de formulario (opcional)autofields: false # Si es true, genera campos automaticamenteTipos de vista (view)
Sección titulada «Tipos de vista (view)»| Tipo | Sufijo de archivo | Descripcion |
|---|---|---|
crud | *Crud.yml | Vista completa (tabla + formulario) |
form | *Form.yml | Formulario de creacion/edicion |
table | *Table.yml | Tabla de listado |
entitypicker | *Picker.yml | Selector de entidad |
entityfilters | *Filters.yml | Filtros de busqueda |
export | *Export.yml | Campos para exportar |
config | *Config.yml | Formulario de parametros del modulo |
json | *Json.yml | Representacion JSON |
tree | *Tree.yml | Vista en arbol |
Seccion fields
Sección titulada «Seccion fields»Define los campos visibles en la vista. Cada campo usa el nombre del atributo Java de la entidad.
fields:
name: # Campo simple con valores por defecto
price: label: Precio de Venta description: Solo valores >= 0 component: textbox required: true visible: false params: span: 2 span-sm: 12 readonly: true multiline: true height: 100px placeholder: Escribe aqui... format: '#,##0.##' constraint: 'no negative: only positive values' newRow: true style: 'color: red' sclass: orange lighten-5 width: 100pxPropiedades anidadas
Sección titulada «Propiedades anidadas»Puedes usar notacion punto para navegar propiedades relacionadas:
fields: manufacturer.name: label: Fabricante contactData.email: label: Email city.department.country.name: label: PaisComponentes de campo (component)
Sección titulada «Componentes de campo (component)»| Componente | Descripcion |
|---|---|
textbox | Caja de texto simple |
intbox | Caja numerica para enteros |
spinner | Selector numerico con rango |
combobox | Lista desplegable |
entitypicker | Selector de entidad con busqueda |
entityrefpicker | Selector por campo de referencia |
entityreflabel | Muestra etiqueta de entidad referenciada por ID |
crudview | Tabla CRUD embebida para colecciones |
coollabel | Etiqueta compuesta (imagen, titulo, subtitulo, descripcion) |
entityfileImage | Vista previa de imagen en entityfile |
link | Celda en forma de enlace que ejecuta accion |
enumiconimage | Icono/clase CSS segun valor enum |
printerCombobox | Selector de impresora |
cuentacontablepicker | Selector de cuenta contable |
providermultipickerbox | Multi-selector alimentado por Provider de Spring |
Ejemplos
Sección titulada «Ejemplos»coollabel:
products: component: coollabel params: header: width: 450px bindings: imageURL: photoURL title: name subtitle: lineName description: type.name tooltiptext: descriptionentityfileImage:
photoPreview1: label: Vista previa component: entityfileImage params: bind: photo1 thumbnail: true thumbnailWidth: 100 thumbnailHeight: 100crudview:
subitems: component: crudview
features: component: crudview params: controller: com.example.FeatureItemControllerlink:
serialDesc: label: Serial component: link action: ViewSerialsDMEstilos de columnas (header, cell, footer)
Sección titulada «Estilos de columnas (header, cell, footer)»totalStock: label: Stock params: converter: converters.Decimal header: align: center width: 120px sclass: green color-white cell: sclass: green lighten-5 footer: function: sum functionConverter: converters.DecimalConversores comunes
Sección titulada «Conversores comunes»| Conversor | Descripcion |
|---|---|
converters.Currency | Moneda con simbolo y separadores |
converters.CurrencySimple | Moneda sin simbolo |
converters.Decimal | Numero decimal |
converters.Date | Fecha |
converters.DateTime | Fecha y hora |
Seccion layout
Sección titulada «Seccion layout»layout: columns: 4Seccion groups
Sección titulada «Seccion groups»Agrupa campos en secciones colapsables o etiquetadas:
groups: salesConfiguration: label: Configuracion de Ventas collapse: true fields: - minSalePrice - salePrice2 - sellable - allowsDiscountsSeccion actions
Sección titulada «Seccion actions»Permite habilitar/deshabilitar acciones CRUD estandar y configurar atributos:
actions: FindAction: attributes: searchFields: [ code, name, reference ]
NewAction: enabled: false
ExportAction: enabled: falseSeccion params
Sección titulada «Seccion params»Parametros globales de la vista:
params: orderBy: name pageSize: 50 span: true sizedByContent: true writable: true visibleActions: 15Ejemplos por tipo de descriptor
Sección titulada «Ejemplos por tipo de descriptor»view: crudbeanClass: com.example.Itemcontroller: com.example.ItemCrudControllerautofields: falseview: formbeanClass: com.example.Itemautofields: falselayout: columns: 4fields: name: price: params: format: '#,##0.##'view: tablebeanClass: com.example.Itemautofields: falsefields: name: salePrice: params: converter: converters.Currencyentitypicker
Sección titulada «entitypicker»view: entitypickerbeanClass: com.example.Customerautofields: falsefields: identification: firstName: lastName:entityfilters
Sección titulada «entityfilters»view: entityfiltersbeanClass: com.example.Itemautofields: falsefields: name: totalStock: params: converter: converters.Decimalview: exportbeanClass: com.example.Customerautofields: falsefields: identification: firstName: lastName:id: VentasConfigview: configfields: MaxQuickSaleValue: component: textboxparams: parameterClass: tools.dynamia.modules.saas.jpa.AccountParameterview: jsonbeanClass: com.example.Itemautofields: falsefields: name: code: salePrice:view: treebeanClass: com.example.InventoryLineautofields: falsefields: name: label: Lineas active: label: ActivoTabla editable en linea (writable)
Sección titulada «Tabla editable en linea (writable)»Para tablas embebidas en formularios puedes habilitar edicion directa:
view: tablebeanClass: com.example.StickerItemautofields: falsefields: code: quantity: component: intboxparams: writable: trueNota final
Sección titulada «Nota final»Esta pagina resume los casos mas usados.
Si necesitas referencia completa por propiedad y ejemplos extendidos, usa esta guia junto con los ejemplos en docs/view-descriptors.mdx y los descriptores reales de tus modulos.