jueves, 18 de abril de 2013

Como hacer un menu usando el GAM


Se parte de que se tiene activado el GAM en su propiedad Enable Integrated Security = True
Y la propiedad Default Integrated Security = Authorization
Al tener esta ultima propiedad en autorización el gam se encarga de agregar los objetos utilizados en Genexus a los permisos de la aplicación
La forma en que los agrega es poniéndoles _NombreDel Evento
Ejemplo.- si tengo una transacción Menu  agregara los siguientes permisos
menu_Execute (significa que puede ejecutar el objeto)
menu_Insert (permite insertar)
menu_Update (permite modificar)
menu_Delete (permite eliminar)
menu_FullControl  (Permite agregar todos los permisos anteriores)


Se cuenta con tres pasos para tener los permisos en usuario
a) Primero debe existir el permiso en la aplicación
                en este punto en el caso de los menus principales que no llaman a un objeto deben de darse de alta en los permisos de la aplicación usando las opciones de agregar permisos a la aplicación.
b) Se debe agregar los permiso a los roles
c) Por último se debe agregar los roles al usuario

ahora procederemos a crear una transacción Menu con los campos necesarios para guardar los datos de las opciones que componen al menú como se muestra en la figura siguiente


MenuIsHeader.- se utiliza para indicar que es un menú principal pero que no va a llamar a ningún objeto para ejecutarse.
trim(MenuObject)+'_Execute' IF not MenuObject.isempty();
trim(MenuName)+'_Execute' IF  MenuObject.isempty();
MenuObjectNull.- se utiliza para indicar va llamar a un objeto o no
MenuObject IF MenuIsHeader=False
Se debe crear un subtipo con los siguientes atributos
MenuParentId
MenuParentName




De esta forma tenemos un menú recursivo
Hasta aquí ya tenemos la transacción menú para dar de alta nuestras opciones de menú
Ahora en la master page se debe agregar el user control de su preferencia para mostrar el menú
En este ejemplo usaremos  SmoothNavMenu


Agregamos el user control SmoothNavMenu a nuestra master page como se muestra en la figura

 en la pestaña de eventos de nuestra master page se debe agregar el código que muestra la imagen, se esta llamando en el evento start el data provider que devuelve la SDT con los datos del menú que se debe mostrar.

Ahora en el data provider se debe llenar de la siguiente forma:
order MenuOrder
where MenuParentId = &MenuParentId or (&MenuParentId=0 and MenuParentId.IsNull() )
Where GAMRepository.CheckPermission(MenuGAMObject)
{
      Id = str(MenuId)
      Title = MenuName
      Description = MenuDescription

      //Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject+'.aspx') //generador C#
      Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject) //generar java
     
      Items = SmoothNavMenuDP.udp(MenuId)
}



La siguiente instrucción GAMRepository.CheckPermission(MenuGAMObject)
Nos devuelve si tiene permisos el usuario autentificado al objeto enviado como parámetro a la funcion



Asi es como debe aparecer el menú del ejemplo

si usas otro user control solo debes hacer algunos cambios para llenar la SDT del menu, el principio de este ejemplo es el mismo para cualquier User Control de Menu

si quieres el ejemplo completo en xpz comenta esta entrada y dale en ++Google
Espero les sea de utilidad



161 comentarios:

  1. Venga donde lo aprendiste?

    ResponderEliminar
  2. tengo tiempo trabajando con genexus, he hecho menus sin usar el gam, cuando empece a trabar con el gam, vi como podia usarlo y el resultado fue el ejemplo de arriba

    ResponderEliminar
    Respuestas
    1. Estimado MUY BUENO EL MENU. Por casualidad tendrias el XPZ para incorporarlo??? Gracias.
      gustavohorno@gmail.com

      Eliminar
    2. Muy Bueno... sixto.msanchez@hotmail.com

      Eliminar
    3. Poderia enviar o XPZ para mim? ccordiolli@gmail.com
      Muito obrigado

      Eliminar
  3. justo empiezo a trabajar con el gam y me parece bueno el post me podrias enviar el xpz o dime si lo tienes en gxopen. De antemano gracias.

    ResponderEliminar
  4. muy interesante y muchas gracias por compartirlo, podrías compartirme el pxz... saludos

    ResponderEliminar
  5. Amigo... me podes dar el ejemplo mas claro..
    ya que cuando hago todo lo que dices.. me sale error " Error : SPC0178 Missing member SmoothnavMenuData.MenuOrder in SDT" .

    Este error me sale haciendo tu ejemplo.. yo uso Gx Evo 2 Upgrade2 con su GAM...

    ResponderEliminar
    Respuestas
    1. También necesito el XPZ... me aparecen errores que no encuentro...

      Eliminar
  6. Hola...me podrías proporcionar el xpz?, gracias¡¡ mi correo lindaaranot@gmail.com

    ResponderEliminar
  7. Me parece muy bueno, me interesa el XPZ, gracias (aluziner@gmail.com)

    ResponderEliminar
  8. Boa tarde, muito bom o exemplo... gostaria de receber o exemplo (xpz)... (email: suporte@softup.com.br)

    ResponderEliminar
  9. se ve muy interesante, por favor me podrias enviar la XPZ (dm_garnica09@hotmail.com).

    ResponderEliminar
  10. Excelente aporte!!!, voy a probarlo. Gracias.

    ResponderEliminar
  11. Buen aporte, he tratado de hacerlo pero tengo ciertos problemas, me puedes enviar el xpz te lo agredeceria mucho; mi correo es

    clemente_reyes@hotmail.com

    ResponderEliminar
  12. Exelente, sabes como se le puede agragar propiedades a las Category de Genexus, con una extencion o algo parecido??

    ResponderEliminar
  13. Hola, interesante la propuesta. Podrías enviarme el xpz a tabletmvya@gmail.com . Gracias.

    ResponderEliminar
    Respuestas
    1. Gracias por enviarme. Voy a probarlo y comento.

      Eliminar
  14. Excelente! lo ideal es crear un nuevo DP como lo muestras arriba y utilizar este en la MP. Ahora hay algunas cuestiones que no logro entender, me enviarias el xpz? te lo agradeceria mucho.
    Suerte y sigue asi.

    ResponderEliminar
    Respuestas
    1. Recibido Gabriel. Muchisimas gracias. Cualquier consulta estamos en contacto.

      Eliminar
  15. Hola...me podrías enviar el xpz? gracias.
    andrea.camino@gmail.com

    ResponderEliminar
  16. me podrías enviar el xpz? gracias.
    profecrece@hotmail.com

    ResponderEliminar
  17. Me llegó. Muchas Gracias

    ResponderEliminar
  18. Hola, que tal! Muy buen aporte! Espero me puedas mandar el xpz!! Saludos! robert_garcia10@hotmail.com

    ResponderEliminar
  19. Hola, que tal! Muy buen aporte! Espero me puedas mandar el xpz!! Saludos! robert_garcia10@hotmail.com

    ResponderEliminar
  20. Me parece excelente, ¿Podrías compartirme el XPZ? mi correo es tashmen@hotmail.com. Gracias de ante mano. Saludos

    ResponderEliminar
    Respuestas
    1. Gabirle muchas gracias, he recibido la información solicitada. Te felicito el ejemplo jala de primera y es muy útil. Excelente aportación.

      Saludos

      Eliminar
  21. alguien podría ser tan amable de proporcionarme el xpz mi correo es ratan_20@hotmail.com

    ..saludos

    ResponderEliminar
  22. Excelente aporte. Podrías enviarme el XPZ a wcantillo@gmail.com

    Gracias

    ResponderEliminar
  23. muy bueno, me gustaría probarlo, podrías pasarme el xpz?
    gracias

    ResponderEliminar
  24. esta bueno el ejemplo, quisiera el xpz
    gracias

    ResponderEliminar
  25. Excelente Ejemplo podrias adjuntarme el xpz.
    gracias

    ResponderEliminar
  26. Me puede mandar el XPZ por correo por favor al r_nelsonc@yahoo.com, ya que realizo el ejemplo igual, pero me salen errores.

    ResponderEliminar
  27. Hola muy bueno, estoy arrancando a trab con gx, me podes mandar el xpz mi correo es diegoguisasola@hotmail.com desde ya muchas gracias.

    ResponderEliminar
  28. Buenos dias, podrías enviarme el XPZ, estoy usando Evo x2 y me tira una serie de errores al intentar cargar el DP.
    mramanolo@gmail.com.
    Muchas graciass

    ResponderEliminar
  29. Buen día me lo podrías mandarme estoy usando Evo x2 juliandlacruz@gmail.com

    ResponderEliminar
  30. Boa noite,
    Poderia me enviar o xpz cristiano.souza.mail@gmail.com

    Abs.

    ResponderEliminar
  31. Hola, muy buen aporte y muchas gracias por compartirlo, podrías enviar el xpz a mi correo, santiagovillega@gmail.com

    ResponderEliminar
  32. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  33. Está muy padre el ejemplo, me podrías mandar el XPZ para revisarlo? luisfelipeguerra@gmail.com Gracias!!!

    ResponderEliminar
  34. Muy bueno el post, estoy empezando desarrollo en genexus, me podrías enviar el xpz, y seria bueno ver como realizar este tipo de menú sin el GAM. Gracias (karinacsanchez@yahoo.es)

    ResponderEliminar
  35. Muito bom, poderia por favor me mandar o xpz em ricardoemilio999@hotmail.com

    ResponderEliminar
  36. muy bueno el post, me gustaria recibir el xpz en ya1000caceres@gmail.com

    ResponderEliminar
  37. me puedes mandar el ejemplo barucmb10@gmail.com

    ResponderEliminar
  38. me puedes mandar el xpz a kevinksoft@yahoo.es

    ResponderEliminar
  39. Hola enviame el xpz, gracias wlodtzun@gmail.com

    ResponderEliminar
  40. Buenas tardes, muy ilustrativo el ejemplo. Me podrias enviar el xpz por favor ? Te agradeceré mucho. ( cmreyna@gmail.com )

    ResponderEliminar
  41. Saludos, por favor si puedes enviarme el xpz. Por demás interesante tu aporte. gregonzalezg@hotmail.com

    ResponderEliminar
  42. Muchas gracias por el ejemplo, me podrias enviar el xpz por favor? mi correo es matudntc@gmail.com Gracias

    ResponderEliminar
  43. Parece interesante, me gustaria probarlo, me puedes enviar xpz a mmoya@live.cl

    ResponderEliminar
  44. Guru, tendrás el xpz para enviarmelo?, gracias, juampi [dot] perez [at] outlook [dot] com [dot] ar

    ResponderEliminar
  45. Hola...me podrías proporcionar el xpz?, desde ya muchas gracias¡¡ mi correo cavtdf@gmail.com

    ResponderEliminar
  46. Hola!! ¿sería posible que también compartas conmigo este xpz? Mi email es vivi.cordoba@gmail.com. Gracias!

    ResponderEliminar
  47. Muy bueno!, me podrías pasar el xpz mi mail es rosanaro3@hotmail.com muchas gracias!!

    ResponderEliminar
  48. Buenos dias, me podrías pasar el xpz mi mail es raul.manrique.vargas@gmail.com muchas gracias!!

    ResponderEliminar
  49. Respuestas
    1. podrias por favor enviar el xpz a ryardin@gmail.com
      Gracias

      Eliminar
  50. Podrias pasarme el xpz a ronald.rmendoza@gmail.com, de atemano gracias

    ResponderEliminar
  51. Muy buena informacion, por favor me puedes ayudar enviandome el xpz a pepetorrestorres@live.com. Gracias.

    ResponderEliminar
  52. Estimado MUY BUENO EL MENU. Por casualidad tendrias el XPZ para incorporarlo??? Gracias.
    gustavohorno@gmail.com

    ResponderEliminar
  53. Hola!!!!! alguien me podria compartir el xpz????????? Gracias.

    ResponderEliminar
  54. Grandioso, como obtengo el XPZ?????, Gracias

    ResponderEliminar
  55. Excelente aportacion Gabriel,

    Me enviarías el XPZ? (gxsoft@gmail.com)

    Saludos,
    gab

    ResponderEliminar
  56. Excelente Gabriel,

    Me enviarías el .xpz a jor.castaneda@hotmail.com
    gracias, saludos.

    ResponderEliminar
  57. Buenisimo aporte Gabriel, sera que me podrias enviar tambien el xpz?? porfa? addmym@gmail.com muchisimas gracias desde ya.. saludos

    ResponderEliminar
  58. favor si me puedes enviar el xpz, v.delgado.saavedra@gmail.com

    ResponderEliminar
  59. buenisimo me envia el xpz por favor, correo: lesacvi@hotmail.com

    ResponderEliminar
  60. Uf ! que dificil seria la vida si no hubiera gente que comparte el conocimiento. Hace una semana etoy probando distintas cosas sin exito.
    Me podrias enviar el xpz a danigonzalez.ar@gmail.com ?
    Estoy queriendo tambien armar un menu asi recursive pero sin usar GAM , tenes algun ejemplo de eso ?

    ResponderEliminar
  61. Muito bom... você poderia me enviar o XPZ por e-mail?
    Obrigado

    ResponderEliminar
  62. buenas me podrias enviar el xpz por mail(jjfilipovich@gmail.com)

    ResponderEliminar
  63. Muy buen ejemplo necesitaria el xpz... amedina@sircal.com.uy .Muchas Gracias! Estaría bueno que este blog no muriera! Saludos.

    ResponderEliminar
  64. me podria enviar el .xpz a (rcastell13@hotmail.com)
    saludos, gracias.

    ResponderEliminar
  65. Muito bom. Você poderia enviar o xpz para:
    meder35@hotmail.com
    Obrigado.

    ResponderEliminar
  66. Ya se que es muy tarde, pero esto esta buenisimo maestro!! me podes enviar el xpz? mi email: cruzale29@gmail.com

    ResponderEliminar
  67. Muy bueno el menu con GAM... te agradeceria proporcionarme tu XPZ... mi correo es edw_ogg@hotmail.com

    ResponderEliminar
  68. Excelente ejemplo. Por favor si podrias enviarme el xpz ejemplo. Desde ya muchas gracias. Mi correo ruben_ksj@hotmail.com

    ResponderEliminar
  69. Estoy interesado, por favor enviame el .xpz efrainnunez@gmail.com gracias saludos

    ResponderEliminar
  70. hola me podes enviar el .xpz a kakolvcb@gmail.com??

    ResponderEliminar
  71. hola me podrias apoyar enviándome el xpz por fa este es mi correo: hernandezgleza@hotmail.com


    ResponderEliminar
  72. Hice la prueba y solo se ve el primer nivel, nunca se despliegan las ramas para abajo.
    Tanto en chrome, IE como en firefox
    Le ha pasado a alguien?

    ResponderEliminar
    Respuestas
    1. lo mas probable que te falte configurar las opciones en el GAM

      Eliminar
  73. Muy interesando estoy interesada en realizar algo así

    ResponderEliminar
  74. Muy buen post. Te agradecería si podés enviarme el ejemplo xpz. fernandezsergio@gmail.com

    ResponderEliminar
  75. Excelente el post, muy util.Podría enviarme el xpz? Mi mail es sole84@gmail.com. Gracias!

    ResponderEliminar
  76. Excelente el post, muy util.Podría enviarme el xpz? Mi mail es m.gustavo.m88@gmail.com. Gracias!

    ResponderEliminar
  77. Muy util solo que aun me sale

    smoothnavmenudatadp.cs(196,69): error CS0030: No se puede convertir el tipo 'int' en 'GeneXus.Utils.IGxCollection'
    en esta linea

    Items = SmoothNavMenuDataDP.Udp(MenuId)

    que puedo estar haciendo mal ??

    ResponderEliminar
    Respuestas
    1. Items puede que no tengas definido el tipo de Datos del SDT

      Eliminar
  78. ojala me puedas enviar el xpz oscarfg78@gmail.com

    ResponderEliminar
  79. Buen Post .....Estaba tratando de realizar algo parecido pero me sale un error al momento de hacer el link, dice recurso no disponible ...Podrias enviarme el xpz a mi correo .....carlosf_20@hotmail.es

    Gracias..

    ResponderEliminar
  80. Muito bom, pode me enviar o xpz.. jotapepinheiro(at)gmail.com

    ResponderEliminar
  81. Estimado MUY BUENO EL MENU. Por casualidad tendrias el XPZ para incorporarlo??? Gracias y las fotos para hacer bien el ejemplo
    barucmb10@gmail.com

    ResponderEliminar
  82. buenos días
    estaba haciendo el ejemplo q me pasaste pero tengo un problema ya me muestra el menu dinámico
    pero el problema es que no le agrega el aspx al webpanel ejemplo hice uno que se llama wpprueba1 agrege permisos en aplicacion y roles y usuario
    Imágenes integradas 1

    cuando doy clic me da la direccion pero no le pone el .aspx
    si le agrego el .aspx me lo muestra
    Imágenes integradas 2

    ResponderEliminar
  83. Muy bueno!! Excelente!!
    Me envias el xpz?
    Inavifor@gmail.com
    Graciasss

    ResponderEliminar
  84. Muy bueno y completo, me gustaría ver el xpz.

    ResponderEliminar
  85. Excelente me puedes enviar xpz?
    mario.lamique"@gmail.com
    Gracias

    ResponderEliminar
  86. Utilicé tu ejemplo para hacer el menú en mi aplicación en ev2 y ahora la estoy migrando a ev3.
    Para que funcionen las opciones de menú hay que agregar a mano el Java package name en el nombre del objeto? o hay otra manera?
    Gracias

    ResponderEliminar
    Respuestas
    1. una opcion es hacer un procedimiento para que lea el developermenu.xml
      y obtengas el Java package name

      en el developer menu vienen los webpanel que son sujetos a estar en tu menu, con la opcion que tienes actualmente del object de tu menu lo buscas dentro del developermenu y obtienes el Java package name y actualizas el object de tu tabla de menu

      pero recuerda que el menu del evolution 2 no es responsive asi que si lo que necesitas un menu responsive
      tendras que cambiar el usercontrol que usas como menu, por otro que sea responsive, esto solo si es tu caso

      otra consideracion es que que debes tener un atributo MenuNamespace, y otro MenuObjeto

      MenuNamespace = com.grpiv1.ubicacion.wwestado
      MenuObjeto = Estado

      MenuGAMObj = trim(MenuObjeto)+'_Execute' IF not MenuObjeto.isempty();

      con el MenuGAMObj valida si tiene permisos Where GAMRepository.CheckPermission(MenuGAMObj)

      y con el MenuNamespace generas el link
      Link = iif(MenuNamespace.IsEmpty(),!"#",lower(trim(MenuNamespace)))

      Saludos

      Eliminar
  87. Hola, muy bueno, me podrias enviar el xpz? mi correo es caroeve27@gmail.com

    ResponderEliminar
  88. Valioso y gran aporte estoy revisando la documentación pero tengo problemas para implementarlo por favor me podrías enviar el xpz?

    ResponderEliminar
  89. Excelente solucion!!
    Me podrian enviar a mi correo el xpz? Desde ya muchas gracias!

    ResponderEliminar
  90. error: Missing group start brace '{'. (SmoothNavMenuDataDP Source, Line: 1, Char: 2#1)
    ayuda con este error

    ResponderEliminar
  91. Me enviarias el xpz por favor.

    Saludos.-

    ResponderEliminar
  92. Hola me podrías enviar el xpz por favor mi correo es ape9725@gmail.com

    ResponderEliminar
  93. Creo que me seria util jorluiord@gmail.com, gracias

    ResponderEliminar
  94. Creo que me seria util jorluiord@gmail.com, gracias

    ResponderEliminar
  95. enviame el xpz por favor ce.al.castillo@gmail.com

    ResponderEliminar
  96. que tal podrias enviarme el .xpz gracias mi correo es ares898@gmail.com

    ResponderEliminar
  97. que tal podrias enviarme el .xpz gracias mi correo es ares898@gmail.com

    ResponderEliminar
    Respuestas
    1. Ya te lo envié, Saludos espero te sea de utilidad

      Eliminar
  98. La verdad muy bueno...voy a probarlo

    ResponderEliminar
  99. Quiero probarlo, podes enviarmelo..saludos y gracias anticipadas...fbaamonde@gmail.com

    ResponderEliminar
  100. Hola!! Me parece excelente. Me puedes enviar el XPZ para probarlo. Gracias. jaubaldot@gmail.com

    ResponderEliminar
  101. me pasas el xpz porfa gracias esta genial hackol94@gmail.com

    ResponderEliminar
  102. Hola... Buenisimo es lo que necesito , me podrias pasar el xpz a norbertojaramillo@gmail.com

    ResponderEliminar
  103. Me puedes mandar el XPZ??
    lichudp@gmail.com

    Muchas gracias

    ResponderEliminar
  104. Hola Gabriel, que buen aporte soy nuevo en Genexus y me gustaría probarlo, agradezco me enviaras el .xpz para ver y aprender. Saludos. Mi correo dfgallo@gmail.com

    ResponderEliminar
  105. Que tal Gabriel, tengo una aplicación en Gx ev1 y no puede generar reportes en excel, e hice un modelo en Gx ev3 para poder generar reportes en excel apuntando a la db que tengo en mi modelo gxev1

    El detalle es que en gx ev3 utilizo k2btools y gam, se puede integrar el menu que estas compartiendo? mi correo es flopez.power@gmail.com, de antemano gracias por tu aporte

    ResponderEliminar
  106. Buen día Gabriel, me puedes explicar como hacer el siguiente punto, gracias:
    a) Primero debe existir el permiso en la aplicación
    en este punto en el caso de los menus principales que no llaman a un objeto deben de darse de alta en los permisos de la aplicación usando las opciones de agregar permisos a la aplicación.

    ResponderEliminar
  107. Estimado Gabriel.

    Veo que en tu ejemplo creas una transacción para almacenar tu menú. sin embargo, entiendo que GAM también tiene sus propias tablas de registro de menús.

    No he encontrado todavía la manera de asociar esas tablas de menú con un usuario en particular.

    Tienes talvez algún ejemplo de crear un menú similar al de tu ejemplo, pero usando el menú registrado en GAM?

    ResponderEliminar
  108. excelente me pazas el xpz? mi correo es jvcari@hotmail.com

    ResponderEliminar
  109. Buenas noches Gabriel, muy buen aporte, me podría enviar el caza wigamu@hotmail.com, muchas gracias de nuevo por sus aportes.

    ResponderEliminar
  110. exelente, podrias pasarme el xpx, jcarloscgl@gmail.com

    ResponderEliminar
  111. Estimado Sr. Mancilla. No se si has hacho alguna modificacion en la rutina.
    Igualmente estoy tratando de comprender algunas cosas de la carga del DP.
    order MenuOrder
    where MenuParentId = &MenuParentId or (&MenuParentId=0 and MenuParentId.IsNull() )
    Where GAMRepository.CheckPermission(MenuGAMObject)
    {
    Id = str(MenuId)
    Title = MenuName
    Description = MenuDescription

    //Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject+'.aspx') //generador C#
    Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject) //generar java

    Items = SmoothNavMenuDP.udp(MenuId)
    }

    En el mismo se envia como parametro un variable. Que es un subtipo del MenuId... y no veo la relacion entre esta parametro y el sistema de permisos GAM. No veo por ejemplo donde se verifica el rol del usuario para hacer el chequeo de si tiene o no permiso. Me podrias ayudar a comprender
    Gustavo Horno
    gustavohorno@gmail.com

    ResponderEliminar
  112. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  113. genial podrias pasarme el proyecto ??? jjfilipovich@gmail.com
    mil gracias

    ResponderEliminar

Si te ha servido de algo mi aportación, deja tu comentario, gracias