Enumerados
Contenido
¿Qué es un enumerado?
Un enumerado
es un recurso de ODL que permite obtener una lista de valores. La idea de tener una lista de valores es que ésta luego puede ser utilizada para asignar valor a un campo, por ejemplo.
Hay dos formas de obtener los valores que van a formar parte del enumerado: bien insertándolos directamente en el código ODL, o bien, obteniéndolos desde un fichero .csv.
La definición de los enumerados, al ser éstos un recurso, se realiza de forma independiente a cualquier otra definición, al igual que los roles, contenedores, habitaciones o tareas.
Existen dos formas de definir un enumerado:
- Definición de tipo: se realiza para derivar nuevas definiciones de enumerados o definiciones de tipo enumerado. Estas definiciones son siempre abstractas:
tipo
[Nombre]es
enumerado
... ...fin
- Definición de enumerado: se crea la lista de valores que se utilizará posteriormente para asignar valores a un campo. Un usuario nunca podrá crear enumerados:
[Nombre]es
enumerado
... ...fin
Asignando valores a un enumerado...
Mediante código ODL
Una de las opciones a la hora de crear una lista de valores es incluirlos dentro de la definición de enumerado. Para ello, existe la palabra reservada valores
donde posteriormente podremos incluir los valores que queramos separados por comas.
Veamos un ejemplo:
[Islas]es
enumerado
valores
"Gran Canaria"
,"Tenerife"
,"Lanzarote"
,"Fuerteventura"
,"La Palma"
,"La Gomera
,"El Hierro
,
fin
Mediante fichero CSV
Un fichero .csv es un tipo de documento para representar datos en forma de tabla, donde las columnas y datos están separados por coma. La sintaxis para crear un csv sería la siguiente:
'Isla':texto,'Provincia':texto //columnas de la tabla
"Gran Canaria","Las Palmas"
"Tenerife","Santa Cruz de Tenerife"
"Fuerteventura","Las Palmas"
"Lanzarote","Las Palmas"
"El Hierro","Santa Cruz de Tenerife"
"La Gomera","Santa Cruz de Tenerife"
"La Palmas","Santa Cruz de Tenerife"
Una vez creado el fichero que llamaremos islas.csv definiremos nuestro enumerado, especificando esta vez un fichero .csv con las palabras reservadas valores en fichero
:
[Islas]es
enumerado
valores en fichero
"islas.csv"
fin
Quizás te estés preguntando cómo es posible que a un enumerado le asignemos un fichero .csv con más de una columna. ¿No era una lista de valores?
Para aclarar estos conceptos, realizaremos una serie de ejemplos en la siguiente sección.
Ejemplos
El primer ejemplo que vamos a tratar consiste en utilizar el primer enumerado que hemos definido, es decir, introduciendo los valores manualmente en el código. Nuestro enumerado islas tiene un listado de valores con los nombres de las islas.
Ahora, este listado de valores lo utilizaremos para mostrar los posibles valores que puede adquirir un determinado campo de tipo texto.
Veamos cómo realizar esta acción a nivel de código:
tipo
[Expediente]es
contenedor
[Contenido]es
formulario
... ... [Isla]es
texto
-edicion.valores
= $Matriz([Islas]); -apariencia.desplegable
= verdadero;fin
fin
Hemos definido un campo de tipo texto llamado Isla con el que queremos dar la opción al usuario de poder seleccionar uno de los nombres de las islas listados en el enumerado. Para ello, utilizamos dos atributos: el atributo edicion.valores
y el apariencia.desplegable
.
El atributo edicion.valores
admite una lista de valores que podrán ser asignados a un campo. Este atributo trabaja con matrices, y al ser el enumerado un listado, tendremos que convertirlo a formato matriz con la función $Matriz. Con el atributo apariencia.desplegable
a verdadero conseguimos que los valores se muestren en forma de desplegable:
El siguiente ejemplo lo haremos utilizamos el fichero CSV definido en la sección anterior, también relacionado con el nombre de las islas. En dicho fichero tenemos dos columnas, una llamada Isla y otra llamada Provincia. El enumerado, aunque el CSV parezca que tiene una estructura bidimensional, sigue manteniendo una estructura de listado. Por tanto, también tendremos que utilizar la función $Matriz para que el atributo edicion.valores
admita los datos.
Ahora bien, si queremos seleccionar unos valores concretos del enumerado, por ejemplo, los valores de la columna Isla, tendremos que hacer un filtrado para seleccionar aquella columna que nos interese. Para ello, ODL proporciona una función llamada $Columnas, que devuelve una matriz con las columnas seleccionadas de otra matriz que pasamos por parámetro. Si el atributo edicion.valores
recibe una matriz con más de una columna, sólamente mostrará los datos de la primera columna. Por tanto, haremos el filtro con la columna Isla de la siguiente manera:
tipo
[Expediente]es
contenedor
[Contenido]es
formulario
... ... [Isla]es
texto
-edicion.valores
= $Columnas($Matriz([Islas]),"[Isla]"
); -apariencia.desplegable
= verdadero;fin
fin
El resultado será el mismo que el caso anterior:
Si realizamos el filtrado con la columna Provincia para otro campo llamado Provincia, se mostrarían los valores de la columna Provincia. Como cada a cada isla le corresponde una provincia, la lista de valores que nos saldrá en este caso estará repetida. Para que no salgan valores repetidos y salga sólo una vez la provincia de Las Palmas y sólo una vez la de Santa Cruz de Tenerife, utilizaremos otra función llamada $EliminarFilasRepetidas que como su propio nombre indica, elimina aquellas filas repetidas de una matriz que pasamos por parámetro. En nuestro caso, una matriz de una sola columna:
tipo
[Expediente]es
contenedor
[Contenido]es
formulario
... ... [Isla]es
texto
-edicion.valores
= $Columnas($Matriz([Islas]),"[Isla]"
); -apariencia.desplegable
= verdadero; [Provincia]es
texto
-edicion.valores
= $EliminarFilasRepetidas($Columnas($Matriz([Islas]),"[Isla]"
)); -apariencia.desplegable
= verdadero;fin
fin
El resultado sería el siguiente: