606 252 000 info@jjconsulting.es

Desde que FileMaker incluyó el objeto barra de botones nuestra vida como programadores en FileMaker fue un antes y un después.

Sin embargo, no todo son ventajas, ya que cada objeto de barra de botones aunque solo necesitamos copiarlo de una a otra presentación presenta un serio problema en las siguientes situaciones:

  1. Tenemos muchas presentaciones y necesitamos incluir una nueva opción al menú. Si solamente tenemos 5 presentaciones esto no es el problema ¿pero qué pasa cuando son 40, 50 o 100? ¿Qué pasa cuando recién añadida la nueva opción el cliente nos cambia los requisitos o nos solicita nuevas opciones?
  2. Cuando en estos menús, deben incluir opciones en ciertas presentaciones dependiendo del usuario.

Para estos casos podemos hacer que nuestros menús sean dinámicos tanto a la hora de pulsar una determinada opción, como en el número de opciones que le aparecen visibles al usuario final en la pantalla. Y todo esto de forma dinámica y además en tiempo real, en lugar de hacer los típicos pasos de ir editando cada presentación y guardando los cambios realizados.

Haz clic aquí para descargar el archivo Demo_Vacia.fmp12

¿Cómo hacer esto? Sigue leyendo.

Para poder hacer que los menús sean dinámicos también necesitamos que sean dinámicas algunas de las opciones disponibles para configurar en un segmento del menú:

  • Rótulo
  • Botón activo
  • Acción a ejecutar
  • Parámetro de guión.

Para ello necesitamos poder guardar estos datos en algún sitio y que en función de las reglas que definamos, cada segmento del menú varíe su funcionalidad en base a lo que en cada momento demande el usuario o cualquiera otras reglas definidas.

Esto lo vamos a conseguir almacenando en una tabla el Rótulo, el Nombre de la Presentación o ID y un campo llamado Orden que ordenará la aparición de cada registro en el menú. Con respecto al segmento activo se calculará en función de la opción que pulsamos en cada momento a través del parámetro del guión de cada segmento.

Aquí se muestra la estructura de la tabla que para este ejemplo llamaremos Menús y que alimentará dinámicamente los menús:

Rótulo

Presentación

Orden

Clientes

Lista de clientes

10

Proveedores

Lista de Proveedores

20

Artículos

Lista de Artículos

30

Facturas Clientes

Lista facturas clientes

40

Facturas Proveedores

Lista facturas proveedores

50

 

Esta es la versión de tabla mínima para que sea funcional, sin embargo lo ideal es añadir otros campos como: si se permite o no visualizar una opción, o si al abrir una presentación ha de hacerlo en la ventana actual o abrir una nueva ventana. En fin, eso ya queda a la creatividad de cada uno. Comentar qué nuestro módulo de menú es bastante más sofisticado con el fin de dar las máximas funcionalidades. La tabla anterior es principalmente para entender de forma sencilla la idea de la que se parte para desarrollar finalmente el módulo de menú.

Una vez tenemos esta tabla debemos crear las cinco presentaciones asociadas a cada opción que corresponde con cada registro de la tabla Menús. Una por cada registro o fila de la tabla de más arriba. En nuestro ejemplo a modo demostrativo solo crearemos las presentaciones con un texto que nos indique en qué presentación estamos para ver cómo varía la presentación al pulsar en el menú. Por tanto crearemos cinco presentaciones dentro de cada una de las cuales colocaremos un texto que puede ser por ejemplo el mismo nombre de la presentación.

Presentaciones:

        

Ahora debemos hacer que el menú presente los rótulos de cada ficha de la tabla y que cada botón de cada segmento lleve a la presentación indicada. Para esto utilizaremos la función ExecuteSQL de FileMaker dentro de un guión que ejecutaremos nada más iniciar la aplicación y cada vez que se pulse una opción de menú. Qué es la responsable de cargar las variables globales que más tarde utilizaremos en la configuración del menú.

Supongamos que nuestro guión de inicio se llama Start, en él añadiremos la siguiente línea:

.

.

ejecutar guión “Menu”

.

.

Y este es el guión “Menu”:

Haz clic aquí para descargar el archivo Demo_Final.fmp12

En la línea 11ª ejecutando la función ExecuteSQL obtenemos una lista de los rótulos de todas las opciones del menú del campo Rotulo que se almacenará en la variable global $$rotulo.

En la línea 13ª obtenemos una lista de todas las presentaciones  de cada uno de los botones de los segmentos que se almacena en la variable global $$moduleNames.

Es importante destacar por qué se utiliza el comando ORDER BY dentro de la sentencia ExecuteSQL. Este comando hace que tanto los rótulos, como las opciones, al ordenarse queden perfectamente emparejadas. O sea, el valor 1º de la lista de rótulos se corresponde con la 1ª presentación de la lista presentaciones y así sucesivamente.

En la Línea 16ª se guarda el parámetro de guión que más tarde definirá tanto la presentación a la que debe ir, como el segmento activo del botón pulsado.

Ahora vamos a la última parte, el objeto barra de botones o lo que solemos llamar menú de la aplicación.

Lo primero es entender que un menú tiene cuatro funciones u opciones que definen su funcionamiento para cada segmento del menú:

1º El nombre o ID del botón. Cuyos valores serán númenros correlativos: 1, 2, 3… n

2º El rótulo de cada botón. Cuyos valores son: 

GetValue ( $$rotulo ; 1 ) Para el rótulo del botón 1º

GetValue ( $$rotulo ; 2 ) Para el rótulo del botón 2º

Etc.

3º El segmento activo. Cuyo valor es el valor del Nombre o ID del botón pulsado y que se pasa como parámetro. Esto se explica en el punto nº4.

4º La acción que desencadena el botón de cada segmento y su parámetro de guión cuyos valores serán: 

GetValue ( $$moduleNames ; 1 ) & «¶1» Para el parámetro del botón 1º

GetValue ( $$moduleNames ; 2 ) & «¶2» Para el parámetro del botón 2º

GetValue ( $$moduleNames ; 3 ) & «¶3» Para el parámetro del botón 3º

Etc.

Donde el primer valor es el nombre de la presentación y el segundo es el valor del Nombre o ID del segmento pulsado.

Además si deseamos que sea dinámico también en el nº de segmentos, vamos a necesitar utilizar la condición de oculto. En este caso debemos definir tantos segmentos como el máximo de segmentos a presentar simultáneamente en la pantalla. Por ejemplo 20 segmentos, será muy raro que presentemos más de 20 segmentos simultáneamente en la pantalla. Por tanto cada segmento debe tener la condición de oculto siguiente:

ValueCount ( $$moduleNames ) < 1 Para el primer segmento.

ValueCount ( $$moduleNames ) < 2 Para el segundo segmento.

ValueCount ( $$moduleNames ) < 3 Para el tercero segmento.

Etc.

Y así sucesivamente de forma que si hay 20 opciones disponibles pero solo tres rellenas, el resto de los segmentos que no utilicemos se ocultarán.

Cómo se puede ver los valores que utilizamos son los valores guardados en las variables que se cargaron en el guión “Menús” y no directamente los campos de la tabla Menús.

Hasta aquí una explicación básica de cómo operarían los menús dinámicos. A continuación vamos a explicar cómo implementar el módulo de Menús en el que además estos podrán ser diferentes para cada usuario. Adicionalmente podremos gestionar los usuarios desde este módulo pudiendo crearlos, modificarlos o darlos de baja en el resto de ficheros que se asocien al módulo.

Lo primero es descargar que el fichero del módulo que se llama Menus.fmp12.

Haz clic aquí para descargar el archivo Menus.fmp12

A continuación se indican las instrucciones a seguir paso a paso para implementarlo junto con cualquier fichero al que se le desee añadir el menú y la gestión de usuarios integrada.

Integrar Menús en otros ficheros.

1º Crear fuente de datos en el fichero a enlazar (Su fichero) del fichero Menus.fmp12

2º Crear en su fichero las representaciones de tabla (TO) en el mapa de relaciones con estos nombres y relacionadas a las tablas del fichero Menus.fmp12: Presentaciones, Usuarios y UsuariosOpciones:

Ta_d_Presentaciones

Ta_d_Usuarios

Ta_d_UsariosOpciones

3º Crear las presentaciones asociadas a las tres representaciones de tabla (TO) del punto nº3 con los mismos nombres de la representación de tabla respectivamente:

Ta_d_Presentaciones

Ta_d_Usuarios

Ta_d_UsariosOpciones

4º Copiar todas las funciones personalizadas al fichero enlazado.

5º Crear en el fichero enlazado (Su fichero) los tres siguientes conjuntos de privilegios:

Administrador

Usuario

Consultas

6º Importar al fichero enlazado la carpeta de guiones denominada:

Para incluir en los ficheros enlazados

7º Ir a la opción del fichero Menus.Fmp12 Presentaciones y corregir el botón :

“Recalcular Presentaciones” por el guión del fichero enlazado (Su fichero) llamado

“Sistema | Admin Recalcular fichero -Presentaciones-” Tenga en cuenta que estos guiones fueron copiados a su fichero en el punto nº 7º.

8º Ir a los guiones indicados dentro del fichero Menus.Fmp12 y añadir un enlace a los guiones del fichero enlazado (Su fichero):

Alta/Baja cuenta usuario en Todos -> Sistema | Alta/Baja cuenta usuario (Externo)

Cambiar password Todos -> Sistema | Cambiar password (Externo)

Reset password Todos -> Sistema | Reset password (Externo)

Activa/Desactiva usuario en Todos  -> Sistema | Activa/Desactiva usuario (Externo)

9º Copiar el menú de la presentación Ta_d_Menus dentro de la pestaña Recursos a todas las presentaciones del fichero enlazado que se desee. Para ello recuerde que debe poner la presentación en modo de edición para poder copiar el objeto.

También es importante saber que ese objeto es un panel deslizante que contiene tres paneles, cada uno con un menú con un formato diferente. Además permite seleccionar en la ficha del usuario cual de los tres menús se desea mostrar a cada usuario. El sistema permite que un usuario tenga uno distinto de otro usuario.

Y para finalizar te dejamos el fichero que hemos usado en la Spanish DevCon FileMaker 2019 a continuación.

Haz clic aquí para descargar el archivo Facturas.fmp12

Gracias, para cualquier consulta nos podeis contactar AQUI ó dejanos tu comentario aca en el blog.