21 Dic Creación de un menú arbolado paso a paso
Cuando nos acercamos a probar una nueva plataforma de desarrollo, lo primero que queremos es ejecutar algún ejemplo para «ver» como quedaría nuestra aplicación en ese nuevo entorno.
A los desarrolladores que se acercan a Velneo les ocurre lo mismo. Para ello cuentan con el menú arbolado.
Este planteamiento tiene un problema: quieren «copiar» su aplicación en la nueva plataforma. Idéntica. Mismos menús con las típicas opciones de:
- Alta de registros
- Editar registros
- Eliminar registros
- Buscar registros
- Imprimir informes
Os estaréis preguntando el porqué de esta reflexión.
Todo lo anterior viene por este post del foro en el que Carlos dice:
«Quiero hacer una app que tiene a la izquierda un dock con opciones arboladas (treeview) al pulsar una rama se contrae o despliega, y al pulsar una hoja ejecuta una acción que abre un formulario. Esta es la base de cualquier sistema pero no me sale. O lo que lei no es -life is soft-. Ejemplo que en access me llevaría 1 hora (ya se que lo domino).«
Velneo tiene sus peculiaridades y es verdad que al principio, sobre todo si no has cambiado el «chip», puede que no descubras todo su potencial… y te des por vencido.
Ya he hablado de ello en «17 errores que te impiden arrancar con Velneo V7«.
En los cursos que he realizado, siempre digo que en Velneo hay que comenzar por el final, es decir por el resultado que queremos obtener:
- Si quiero lanzar un localizador, primero tendré que tener creada la rejilla a incrustar en dicho localizador y antes el formulario a mostrar al seleccionar un registro. Después crearé el localizador y por último la acción a disparar.
- Si quiero mostrar un registro desde una búsqueda, primero tendré que crear el formulario de edición de la ficha, después crearé la rejilla (a la que asociaré el formulario creado anteriormente) y por último la búsqueda y la acción.
Pues con las opciones de los menús pasa exactamente lo mismo.
Pasos previos a la creación del menú arbolado
En Velneo lo mas «natural» es tener una única opción de menú para realizar todo el mantenimiento de un módulo… Ya se lo que estaréis pensando «¡sacrílego como es eso posible!»: con el uso de un formulario que «actúa» como menú al que dotamos de toda la funcionalidad que el usuario va a necesitar.
Si no te lo crees te invito a leer antes de continuar «Destripando un formulario menú de vErp» o «Sincronizar vistas de datos en un formulario sin origen«.
¿Ya los has leído?… Pues continuemos.
Con este montaje en el que sólo utilizamos un formulario, logramos simplificar nuestro menú arbolado.
Siguiendo la lógica que te acabo de explicar, el siguiente paso será crear las distintas acciones que vamos a disparar desde nuestro menú.
Montando nuestro menú arbolado
Una vez que hemos montado nuestro formulario que actuará de menú, ha llegado la hora de crear los objetos necesarios para lanzarlo desde el menú arbolado.
Vamos a suponer que queremos montar algo como lo de la siguiente imagen:
Tendremos que crear un árbol de opciones con:
- Maestros
- Opciones del menú maestros
- Oportunidades
- Tareas
- Oportunidades
- Resumen de oportunidades
- Control de horas
- Opciones del menú control de horas
Vamos a crear los objetos necesarios para el menú de oportunidades.
Creando las acciones
Necesitamos 3 acciones:
- TAR_CRM_MEN: lanzará el menú de tareas
- OPO_CRM_MEN: lanzará el menú de oportunidades
- RES_OPO_CRM_MEN: lanzará el menú de resumen de oportunidades.
Cada una de las acciones debe quedar como esta de la imagen:
Lo importante de la acción son las siguientes propiedades:
- Comando: en este caso «Disparar objetos».
- Objeto 1: objeto a disparar. En este caso el formulario OPO_CRM_MEN que es el que hemos visto en la imagen anterior.
La estructura de las demás acciones será la misma que esta, cambiando las propiedades por los otros módulos a crear.
Por ejemplo la acción de «Tareas» quedaría así:
Una vez definidas todas las acciones, ha llegado el momento de crear los menús.
Creando los menús
Vamos a crear 4 objetos menú para montar nuestro árbol:
- MEN_MAE_CRM: para mostrar las opciones de maestros.
- MEN_OPO_CRM: para mostrar las opciones de oportunidades. En este caso, incluiremos las siguientes acciones:
- TAR_CRM_MEN
- OPO_CRM_MEN
- RES_OPO_CRM_MEN
- MEN_RES_CRM: para mostrar las opciones de resumen de horas.
- MEN_GEN: menú que incluirá, en lugar de acciones, los tres menús anteriores.
El menú de oportunidades, quedará como el de la imagen inferior:
Ya tenemos casi construido nuestro «lego». Nos falta poder visualizar nuestro menú de opciones.
Visualizando el menú arbolado
Como diría un amigo mío, «ya está todo prácticamente a medias». Tenemos los objetos creados pero todavía no podemos visualizar nuestro menú arbolado.
Para poder hacerlo, vamos a crear un formulario… ¡siiiiiii! vamos a visualizar nuestro menú arbolado dentro de un formulario.
Si os fijáis en el formulario, la propiedad «Tabla asociada» está vacía… es un formulario sin origen.
Dentro del formulario hemos creado un control de tipo «Menú arbolado» cuyas propiedades son:
En la propiedad «Estilo«, le indicamos que sólo queremos una rama abierta y que con el simple click, dispara la acción.
En la propiedad «Objeto«, le indicamos el menú que queremos mostrar… en este caso «MEN_GEN», que es el que incluía los otros tres menús de opciones.
Ya estamos terminando nuestro montaje. Sólo nos falta decidir desde donde vamos a lanzar nuestro formulario «Menú arbolado».
Modificando el marco «Autoexec»
Para ello, en nuestro marco «Autoexec», vamos a crear un nuevo subobjeto, en este caso un «Dock»:
- En la propiedad «Objeto«, le indicamos el objeto a incluir. En este caso nuestro formulario «MEN_GEN».
- En la propiedad «Posición» le indicamos dónde queremos mostrarlo. En este caso a la izquierda.
Y ahora si… por fin podemos ejecutar nuestra aplicación y nos aparecerá un maravilloso menú arbolado a la izquierda de la misma.
¿Has comenzado a cambiar ya el «chip» Déjame tu opinión mas abajo en los comentarios.
Carlos Barni
Posted at 13:46h, 22 diciembreExcelente explicación, muchas gracias por tu tiempo francisco, es muy alentador saber que aveces nuestra ignorancia motiva a generar conocimiento, para uno y para aquellos que talvez no se animaron a preguntar. Espero algún día llegar a tener tus conocimientos y así ayudar a los nuevos.
Por respeto a la autoria, no puese como respuesta a la pregunta del foro este link, y me parece que estaría bueno lo pusieras vos, así si alguien tiene el mismo problema que yo (y veo que no soy el único) puede encontrar la solución. Un abrazo Carlos
Francisco José Vila Martín
Posted at 15:32h, 22 diciembreHola Carlos:
Paso a paso… Lo que si te recomiendo es no hacer la aplicación en velneo «de la misma manera que en tu aplicación actual». Velneo tiene sus peculiaridades.
Estoy seguro que pronto podrás aportar en el foro tus conocimientos a los nuevos desarrolladores.
Yo mismo anteriormente también recibí consejo de otros desarrolladores con mas experiencia que yo… y los sigo recibiendo.
Un saludo y no te desanimes