Enumerados

De Egeasy
Saltar a: navegación, buscar

¿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:

Enumerado01.jpg

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:

Enumerado01.jpg

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:

Enumerado02.jpg