En esencia, una Virtual List (VL) nos permite ver los valores de una return delimited list contenidos en una variable o campo global de una tabla. Los campos de esta tabla deben ser unstored calc.  Esta característica, unida a que la variable o campo que contiene los valores es global, hace que el contenido de la tabla así creada sea session specific.

¿Para qué sirve semejante concepto…? Buena pregunta. El concepto, acuñado en 2011 por Bruce Robertson de Concise Design, permite resolver situaciones complejas, podríamos decir que «imposibles», que se presentan habitualmente en el desarrollo con FileMaker. Además de resolverlas, lo hace de una forma simple y muy flexible, lo cual siempre es bienvenido. Es un concepto peculiar, muy potente y a la vez simple, que como desarrollador FileMaker conviene tenerlo en la «caja de herramientas».

En la Red se pueden encontrar muchas situaciones complejas resueltas con el uso de esta técnica. En este post, nuestra intención es mostrar los building blocks del concepto con un ejemplo simple que nos permita ver como funciona y poderlo aplicar cuando la situación lo requiera.

Vamos a crear una sidebar menu poniendo los elementos de menu en una variable global (SSUI.MENUITEMS) inicializada en el startup. Lo primero que tenemos que hacer es definir una tabla para la VL (Menu) con los siguientes campos:

El campo rowsToShow nos permite definir el número máximo de registros que estamos gestionando en la VL. Es un campo que perfectamente podría ser global y estar ubicado en una tabla de campos globales. Podemos utilizar la siguiente relación:

Definimos un script de ejecución manual (sólo tenemos que ejecutarlo una vez para crear los registros de la VL):

El número máximo de registros a crear en la VL (en el ejemplo 100) dependerá del número máximo de valores que consideremos que vamos a tener que gestionar.

De este modo, desde una tabla de datos (p.ej. contactos) podemos visualizar los registros de la tabla menu como un portal:

En el archivo anexo podéis ver el detalle.

Feliz FileMaking 🙂