You are on page 1of 9

Hasta el momento hemos visto ejemplos de aplicacin de Data Provider que

requieren acceder a la base de datos para recuperar informacin.


Pero tambin es posible utilizar un Data Provider que devuelva una estructura de
datos que ha sido cargada manualmente.

Como ejemplo de aplicacin veremos la implementacin de un men que estar


siempre visible en las pginas de la aplicacin.
Usaremos el user control: Slide Menu.
Este user control no est inicialmente integrado a la barra de herramientas de
GeneXus, as que deberemos instalarlo.
Desde el Marketplace de GeneXus se dispone de un catlogo completo de user
controls. Desde all buscamos Slide Menu y lo descargamos.
Para que quede finalmente instalado en la Toolbox de GeneXus se debe
descomprimir la carpeta y copiarla en la carpeta UserControls bajo el directorio de
instalacin de GeneXus.
Luego por lnea de comando se deber ejecutar GeneXus.exe / install.
Al abrir finalmente GeneXus, el user controls aprarecer automticamente
integrado a la toolbox.

Creamos un nuevo web panel de nombre WPMenu. Observemos que en la Toolbox


aparece el nuevo control integrado. Lo arrastramos sobre el form.
Como ya sabemos, cada vez que se utiliza un user control, se crean una serie de
objetos en la KB y variables en el objeto que incluimos el user control. En este
caso, se crea el SDT SlideMenuData en la KB, que si nos detenemos a observarlo
podemos ver que se trata de una coleccin de elementos que componen a 1
menu. Cada uno de estos elementos tendr un identificador, un nombre y un
objeto al cual invocar.
Adems, GeneXus cre en el web panel, variables del tipo del SDT creado, que
necesitaremos para completar la implementacin de la carga del control.

Para cargar la variable coleccin que contiene la informacin del men en el web
panel, utilizaremos un Data Provider. As que creamos el Data Provider DPMenu y
arrastramos el SDT hacia l.
Con qu datos cargaremos la coleccin? Necesitamos acceder a la base de
datos?
No. Porque las opciones que mostrar el men, no estn almacenadas en la base
de datos, as que tendremos que cargar esta estructura con valores fijos.
Cmo lo hacemos?
Definiendo explcitamente cada grupo que representa una opcion en el men.
Vamos a definir nuestro men solamente con dos opciones, para acceder a
trabajar con Pases y Atracciones.
Indicamos el identificador del item del men (ponemos nosotros los nmeros), la
descripcin que mostrar y la invocacin al objeto correspondiente utilizando el
mtodo Link.
Para definir la segunda opcin, copiamos y pegamos la estructura del grupo
anidado.
Y as podriamos seguir definiendo todas las opciones que deseemos mostrar en el
men.

Volvamos ahora al web panel para invocar a este Data Provider.


En el evento Start, realizamos la invocacin al Data Provider de forma tal que el
mismo retorna su output en la variable &SlideMenuData (que fue creada
automticamente en el web panel al arrastrar el user control sobre el form).

Al ejecutar el web panel vemos el men con las opciones definidas.


Seleccionemos una de las opciones, se invoca al objeto correctamente, pero el
men desapareci..
Y si queremos que el men est siempre visible en todas las pginas de la
aplicacin?

El men debera formar parte de la Master Page que se crea automticamente con la KB.
Vamos entonces a hacer que nuestro men est en el objeto AppMasterPage.
Tenemos 2 opciones:
1) Declarar al web panel WPMenu (que contiene el user control Slide Menu + la invocacin al
Data Provider para cargarlo) como Component. Si observamos la propiedad Type del web panel
WPMenu, vemos que un web panel puede ser una Master Page, una Web Page o un Component.
Por defecto todo web panel es una Web Page y ya sabemos tambin lo que es una Master Page.
Pero, qu significa definir que un Web Panel es un Component?
Cuando declaramos que un web panel es un Component, estamos diciendo que dicho web panel
podr ser incluido dentro de otro objeto.
Sigamos con nuestro ejemplo.
AppMasterPage
Observermos que en la AppMasterPage hay un control que dice ContentPlaceHolder. Se trata del
contenedor de las pginas de la aplicacin. Dicho en otras palabras, toda pgina de la aplicacin
(objeto GeneXus con form web) se cargar y mostrar dentro del control ContentPlaceHolder y
es por eso es que siempre vemos el diseo de la Master Page en ejecucin alrrededor y en el
sector donde est ubicado el control ContentPlaceHolder, vemos nuestros objetos interactivos.
Bien. Ahora queremos que siempre est disponible el men a la izquierda del control
ContentPlaceHolder. As que desde la Toolbox arrastramos un control WebComponent que ser el
encargado de contener y mostrar un objeto de la base de conocimiento que indiquemos (en
este caso, el web panel que contiene el men). En la propiedad Object de este control
WebComponent, indicamos el nombre del objeto cuyo tipo es Component y el mismo ser
cargado dentro de dicho control.
As que completamos la propiedad Object=WPMenu.
Presionando F5 podremos ver el resultado en ejecucin.
2) En lugar de usar el web panel WPMenu, podramos dejar de usarlo (eliminar el objeto de la
KB) y arrastrar directamente el user control Slide Menu a la AppMasterPage, dentro de una celda
a la izquierda del control ContentPlaceHolder. As el men estara incluido directamente en la

AppMasterPage y no en un objeto incluido en la AppMasterPage haciendo el uso del concepto de


Component. Solamente restara invocar al Data Provider para cargar el men en el evento Start del
objeto AppMasterPage.

Ahora el men forma parte del diseo de la master page, as que aparece cargado
en todos los objetos.

You might also like