Ir al contenido

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.

<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).

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 automaticamente
TipoSufijo de archivoDescripcion
crud*Crud.ymlVista completa (tabla + formulario)
form*Form.ymlFormulario de creacion/edicion
table*Table.ymlTabla de listado
entitypicker*Picker.ymlSelector de entidad
entityfilters*Filters.ymlFiltros de busqueda
export*Export.ymlCampos para exportar
config*Config.ymlFormulario de parametros del modulo
json*Json.ymlRepresentacion JSON
tree*Tree.ymlVista en arbol

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: 100px

Puedes usar notacion punto para navegar propiedades relacionadas:

fields:
manufacturer.name:
label: Fabricante
contactData.email:
label: Email
city.department.country.name:
label: Pais
ComponenteDescripcion
textboxCaja de texto simple
intboxCaja numerica para enteros
spinnerSelector numerico con rango
comboboxLista desplegable
entitypickerSelector de entidad con busqueda
entityrefpickerSelector por campo de referencia
entityreflabelMuestra etiqueta de entidad referenciada por ID
crudviewTabla CRUD embebida para colecciones
coollabelEtiqueta compuesta (imagen, titulo, subtitulo, descripcion)
entityfileImageVista previa de imagen en entityfile
linkCelda en forma de enlace que ejecuta accion
enumiconimageIcono/clase CSS segun valor enum
printerComboboxSelector de impresora
cuentacontablepickerSelector de cuenta contable
providermultipickerboxMulti-selector alimentado por Provider de Spring

coollabel:

products:
component: coollabel
params:
header:
width: 450px
bindings:
imageURL: photoURL
title: name
subtitle: lineName
description: type.name
tooltiptext: description

entityfileImage:

photoPreview1:
label: Vista previa
component: entityfileImage
params:
bind: photo1
thumbnail: true
thumbnailWidth: 100
thumbnailHeight: 100

crudview:

subitems:
component: crudview
features:
component: crudview
params:
controller: com.example.FeatureItemController

link:

serialDesc:
label: Serial
component: link
action: ViewSerialsDM
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.Decimal
ConversorDescripcion
converters.CurrencyMoneda con simbolo y separadores
converters.CurrencySimpleMoneda sin simbolo
converters.DecimalNumero decimal
converters.DateFecha
converters.DateTimeFecha y hora
layout:
columns: 4

Agrupa campos en secciones colapsables o etiquetadas:

groups:
salesConfiguration:
label: Configuracion de Ventas
collapse: true
fields:
- minSalePrice
- salePrice2
- sellable
- allowsDiscounts

Permite habilitar/deshabilitar acciones CRUD estandar y configurar atributos:

actions:
FindAction:
attributes:
searchFields: [ code, name, reference ]
NewAction:
enabled: false
ExportAction:
enabled: false

Parametros globales de la vista:

params:
orderBy: name
pageSize: 50
span: true
sizedByContent: true
writable: true
visibleActions: 15
view: crud
beanClass: com.example.Item
controller: com.example.ItemCrudController
autofields: false
view: form
beanClass: com.example.Item
autofields: false
layout:
columns: 4
fields:
name:
price:
params:
format: '#,##0.##'
view: table
beanClass: com.example.Item
autofields: false
fields:
name:
salePrice:
params:
converter: converters.Currency
view: entitypicker
beanClass: com.example.Customer
autofields: false
fields:
identification:
firstName:
lastName:
view: entityfilters
beanClass: com.example.Item
autofields: false
fields:
name:
totalStock:
params:
converter: converters.Decimal
view: export
beanClass: com.example.Customer
autofields: false
fields:
identification:
firstName:
lastName:
id: VentasConfig
view: config
fields:
MaxQuickSaleValue:
component: textbox
params:
parameterClass: tools.dynamia.modules.saas.jpa.AccountParameter
view: json
beanClass: com.example.Item
autofields: false
fields:
name:
code:
salePrice:
view: tree
beanClass: com.example.InventoryLine
autofields: false
fields:
name:
label: Lineas
active:
label: Activo

Para tablas embebidas en formularios puedes habilitar edicion directa:

view: table
beanClass: com.example.StickerItem
autofields: false
fields:
code:
quantity:
component: intbox
params:
writable: true

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.