¡Esta es una revisión vieja del documento!


Menús de la Aplicación



En algunos casos, el APPWIZARD (2 niveles de menús) puede quedarse pequeño, o bien queremos personalizar aún más profundamente el diseño de los menús de la aplicación.

Para ello, disponemos del atributo entry-point=“ColeccionConMenuPersonalizado“ en el nodo app, para señalar la colección que queremos que se ejecute inmediatamente después de que el usuario se haya logueado (Independientemente de que se haga el login normal o este también se haya personalizado, ver opción anterior ). Utilizando este atributo, ignoraremos por completo el fichero appwizard.xml y será el programador el encargado de diseñar sus propios menús en la colección indicada en dicho atributo.

<?xml version="1.0" encoding="iso-8859-1"?>
<xml>
	<app prefix="gen" version="0.0.0.26" entry-point="MenuPersonalizado">
		<!--
		<style url="default.css">
		<style url="default_hor.css" conditions="phone:horizontal"/>
		<style url="default_tablet.css" conditions="tablet:vertical"/>
		<style url="default_hor.css" conditions="tablet:horizontal"/>
		-->
	</app>
 
	<collprops type="general">
 
	<coll name="Empresas" ...>
		<group name="General" id="1" />
		<prop name="..." ... />
	</coll>
	<coll name="Usuarios" ... >
		<group name="General" id="1" />
		<prop name="IDEMPRESA" group="1" visible="0" type="N" mapcol="Empresas" mapfld="ID" />
		<prop name="LOGIN" visible="3" group="1" type="T" fieldsize="10" fixed-text="true" size="10" />
		<prop name="PWD" group="1" type="T" fieldsize="10" fixed-text="true" size="10" visible="" />
		<prop name="NOMBRE" visible="3" group="1" type="T" fieldsize="30" fixed-text="true" size="30" />
		<prop name="USERTYPE" visible="1" group="1" type="T" fieldsize="30" fixed-text="true" size="50" />
		<create>
			<action name="setval" field="IDEMPRESA" value="##ENTID##" />
		</create>
	</coll>
 
	<coll name="MenuPersonalizado" title="Menu" fontsize="8" sql="" objname="" updateobj="" filter="" sort="" progid="ASData.CASBasicDataObj">
		<group name="General" id="1" />
		<prop name="MAP_TEST" group="1" type="TL" visible="3" title="Aquí va el menú" fieldsize="10" size="10" />
	</coll>


Actualmente tenemos dos formas de hacer los menús para la aplicación:

  1. Editando el fichero APPWIZARD.XML (Tenemos 2 niveles de Menús).
  2. Si queremos personalizar los menús para hacerlos completamente a nuestro gusto o tenemos más de dos niveles de menús, podemos hacer nuestra propia colección de menús personalizada, con el diseño que queramos. Para indicarle al Framework que no utilice el fichero APPWIZARD.XML y que utilice en su lugar nuestra colección personalizada de menús, tenemos que definir el atributo entry-point=”NombreColeccionConMenuPersonalizado“ en el nodo app.



El fichero Appwizard.xml define la estructura de menús para la aplicación.


<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Línea que define la codificación del fichero -->
<xml>
<!-- Lugar donde se abre el nodo XML. Aquí no hace falta tener otro fichero de configuración de propiedades.  -->
	<app name="Xone" caption="Titulo Aplicación"/>
	<!-- Titulo de la aplicación, que se muestra en la parte de arriba al entrar en el FrameWork. -->
	<menus>
	<!-- Tendremos un nodo menus por cada tipo de usuario distinto que tengamos en la aplicación -->
		<user>
			<prop name="TIPO_USUARIO" value="Administrador"></prop>
			<!-- 
			Nodo para decidir que tipo de usuario entra. 
			Para ello el nodo busca en la coll 'usuarios' del mappings, buscando el campo que está en el atributo 'name', 
			para aquellos que tengan el valor igual que el que está en el atributo 'value'
			Esto lanzaria: SELECT * FROM Gen_Usuarios WHERE TIPO_USUARIO="Administrador"
			-->	
		</user>
 
		<item name="Personal">
		<props caption="Personal" imgbk="logo.gif"/>  
		<!-- 
			Nodo para crear los distintos menús en forma de pestañas. 
			Posteriormente dentro de este nodo, se insertan las opciones que pueda haber dentro de la pestaña. 
				name: Su valor debe ser único en todo el Appwizard.			
				caption: Título de la pestaña-menu. 
				imgbk: Imagen que saldrá de fondo en la pestaña.
		-->
			<item menu="personal" name="mnUsuarios">
			<props caption="Personal" icon="../icons/cliente.bmp"/>				 
			<!-- 
				menu: Se suele poner el nombre de la pestaña donde va ésta opción.
				name: Su valor debe ser único en todo el Appwizard. 
				caption: Titulo del icono que sale en pantalla. 
				icon: Ruta hacia el icono.
 
			-->
				<coll name="Centros" mode="0">
				<props caption="Los Usuarios del sistema" mask="31"/>
				<!-- 
					name: Nombre de la Colección del Mappings. 
					mode: Como se entra en la colección por defecto, modo listado (0) ó modo edición (1). 
					caption: Titulo de la opción. 
					mask: Acciones que se pueden realizar, como editar, crear, borrar o filtrar. 
					loadall: Para cargar o no todos los datos de la coll. 
				-->
				</coll>
			</item>
		</item>
	</menus>
</xml>



  • En la estructura anterior se repetirá el nodo <menus> tantas veces como usuarios distintos vayamos a tener en nuestra aplicación.
  • Dentro del nodo ”<item menu…“, tenemos otro nodo ”<item menu…“ anidado, el primero corresponderá a la pestaña, y el anidado a los iconos que hay dentro de dicha pestaña, como se puede ver en las ilustraciones siguientes:


pda.jpg


Atributo Descripción
menu es donde se pone el nombre del menú utilizado
name su valor debe ser único en todo el Appwizard
Imgbk sirve para llamar a una imagen, que saldrá de fondo en la pestaña
mode define como se va a entrar en la opción por defecto, si en modo listado (0) o modo edición (1)
Mask acciones que se pueden realizar, como editar, crear, borrar o filtrar
Loadall para cargar o no todos los datos de la coll


Es un número que en binario indicará las operaciones que se podrán hacer sobre la colección.

La codificación de ese número es la siguiente:

Posición BIT en Binario Icono Opción Asociada Modo Listado (GRID) Modo Edición (FORMULARIO)
1 ( 0 0 0 0 0 0 1 ) Crear nuevo SI SI
2 ( 0 0 0 0 0 1 0 ) Editar SI NO
4 ( 0 0 0 0 1 0 0 ) Borrar SI SI
8 ( 0 0 0 1 0 0 0 ) Salir SI SI
16 ( 0 0 1 0 0 0 0 ) Filtrar SI NO
32 ( 0 1 0 0 0 0 0 ) inline (Solo Pocket PC) NO SI
64 ( 1 0 0 0 0 0 0 ) Guardar NO SI



Hay varios sitios donde podemos definir la máscara(permisos) a una colección:

Atributo Nodo
mask En fichero appwizard.xml en la llamada a la colección
editmask En el nodo COLL de definición de una colección
mask En el PROP de llamada a una colección CONTENTS
nomenmask En el nodo COLL de definición de una colección (Máscara cuando se llama desde una lupa a esta colección)