Advertisement
Guest User

Untitled

a guest
Sep 25th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.93 KB | None | 0 0
  1. datastore ds_datastore_padre, ds_datastore_hijo, ds_datastore_nieto
  2. integer numrows_padre, numrows_hijo, ll_counter_padre, id_padre, id_hijo, ll_counter_hijo, li_next_index_nieto, li_next_index_hijo,id_nieto,numrows_nieto, ll_counter_nieto
  3. string texto_padre, texto_hijo, ventana_hijo, nombre_aplicativo,texto_nieto,ventana_nieto,imagen_hijo,imagen_nieto
  4. nombre_aplicativo = "prestamos";
  5. ds_datastore_padre = create datastore
  6. ds_datastore_padre.dataobject = "d_datos_armado_menu_dinamico"
  7. ds_datastore_padre.SetTransObject (SQLCA)
  8. /*
  9. Obtengo todos los items del menu con padre = 0 and activo = true; para el usuario logueado.
  10. El aplicativo utilizado es prestamos (tabla pb_aplicativo)
  11. */
  12. ds_datastore_padre.Retrieve(SQLCA.logid, nombre_aplicativo,0)
  13. numrows_padre = ds_datastore_padre.RowCount()
  14. for ll_counter_padre = 1 to numrows_padre
  15. /* Obtenemos las propiedades */
  16. id_padre = ds_datastore_padre.GetItemNumber(ll_counter_padre, "pb_menu_pm_id");
  17. texto_padre = ds_datastore_padre.GetItemString(ll_counter_padre, "pb_menu_pm_texto");
  18. /* Armo elemento padre */
  19. m_dinamico_vacio lm_elemento_padre[]
  20. lm_elemento_padre[1] = create m_dinamico_vacio
  21. lm_elemento_padre[1].fm_SetTexto( texto_padre)
  22. lm_elemento_padre[1].fm_SetID( id_padre )
  23. /* La posicion es la del contador incremental */
  24. m_principal.item[ll_counter_padre] = lm_elemento_padre[1].item[1]
  25. /* Obtenemos informacion de los hijos del padre */
  26. ds_datastore_hijo = create datastore
  27. ds_datastore_hijo.dataobject = "d_datos_armado_menu_dinamico"
  28. ds_datastore_hijo.SetTransObject (SQLCA)
  29. //Obtengo todos los items con padre = "id". Donde "id" es la id del padre actual. Ordenado por orden.
  30. ds_datastore_hijo.Retrieve(SQLCA.logid, nombre_aplicativo,id_padre)
  31. numrows_hijo = ds_datastore_hijo.RowCount()
  32. for ll_counter_hijo = 1 to numrows_hijo
  33. id_hijo = ds_datastore_hijo.GetItemNumber(ll_counter_hijo, "pb_menu_pm_id");
  34. texto_hijo = ds_datastore_hijo.GetItemString(ll_counter_hijo, "pb_menu_pm_texto");
  35. ventana_hijo = ds_datastore_hijo.GetItemString(ll_counter_hijo, "pb_menu_pm_ventana");
  36. imagen_hijo = ds_datastore_hijo.GetItemString(ll_counter_hijo, "pb_menu_pm_imagen");
  37. if(not isnull(ventana_hijo)) then
  38. m_dinamico_contenido lm_elemento_contenido_hijo[]
  39. lm_elemento_contenido_hijo[1] = create m_dinamico_contenido
  40. lm_elemento_contenido_hijo[1].fm_SetTexto( texto_hijo)
  41. lm_elemento_contenido_hijo[1].fm_SetID( id_hijo )
  42. lm_elemento_contenido_hijo[1].fm_SetVentana( ventana_hijo )
  43. lm_elemento_contenido_hijo[1].fm_setimagen( imagen_hijo )
  44. /* La posicion es la del contador incremental actual */
  45. li_next_index_hijo = upperbound(m_principal.item[ll_counter_padre].item )
  46. /* Agregamos el item al menu */
  47. m_principal.item[ll_counter_padre].item[li_next_index_hijo+1] = lm_elemento_contenido_hijo[1].item[1]
  48. else
  49. /* si el texto de la ventana es nulo, quiere decir que el item actual tendrá una coleccion de hijos */
  50. m_dinamico_vacio lm_elemento_vacio_hijo[]
  51. lm_elemento_vacio_hijo[1] = create m_dinamico_vacio
  52. lm_elemento_vacio_hijo[1].fm_SetTexto( texto_hijo)
  53. lm_elemento_vacio_hijo[1].fm_SetID( id_hijo )
  54. lm_elemento_vacio_hijo[1].fm_setimagen( imagen_hijo )
  55. /*
  56. Ahora vamos en busca de todos los "Hijos" del item "Sin Ventana"
  57. */
  58. ds_datastore_nieto = create datastore
  59. ds_datastore_nieto.dataobject = "d_datos_armado_menu_dinamico"
  60. ds_datastore_nieto.SetTransObject (SQLCA)
  61. ds_datastore_nieto.Retrieve(SQLCA.logid, nombre_aplicativo,id_hijo)
  62. numrows_nieto = ds_datastore_nieto.RowCount()
  63. /* Es necesario primero setear el elemento "vacio" con dato dummy, porque debe estar inicializado.*/
  64. if(numrows_nieto>0)then
  65. /* Agregamos los hijos al padre */
  66. /* La posicion es la del contador incremental actual */
  67. li_next_index_hijo = upperbound(m_principal.item[ll_counter_padre].item )
  68. /* Agregamos el item al menu */
  69. m_principal.item[ll_counter_padre].item[li_next_index_hijo+1] = lm_elemento_vacio_hijo[1].item[1]
  70. for ll_counter_nieto = 1 to numrows_nieto
  71. id_nieto = ds_datastore_nieto.GetItemNumber(ll_counter_nieto, "pb_menu_pm_id");
  72. texto_nieto = ds_datastore_nieto.GetItemString(ll_counter_nieto, "pb_menu_pm_texto");
  73. ventana_nieto = ds_datastore_nieto.GetItemString(ll_counter_nieto, "pb_menu_pm_ventana");
  74. imagen_nieto = ds_datastore_nieto.GetItemString(ll_counter_nieto, "pb_menu_pm_imagen");
  75. /* Tengo que armar un elementos nieto con contenido */
  76. m_dinamico_contenido lm_elemento_contenido_nieto[]
  77. lm_elemento_contenido_nieto[1] = create m_dinamico_contenido
  78. lm_elemento_contenido_nieto[1].fm_SetTexto( texto_nieto)
  79. lm_elemento_contenido_nieto[1].fm_SetID( id_nieto )
  80. lm_elemento_contenido_nieto[1].fm_SetVentana( ventana_nieto )
  81. lm_elemento_contenido_nieto[1].fm_setimagen( imagen_nieto )
  82. /*Agregamos los nietos al hijo */
  83. /* La posicion es la del contador incremental actual */
  84. li_next_index_nieto = upperbound(m_principal.item[ll_counter_padre].item[li_next_index_hijo+1].item )
  85. /* Agregamos el item al menu */
  86. m_principal.item[ll_counter_padre].item[li_next_index_hijo+1].item[li_next_index_nieto+1] = lm_elemento_contenido_nieto[1].item[1]
  87. next
  88. else
  89. /*Caso especial para elementos de items especiales como Cascada. No se visualizan los hijos*/
  90. /* La posicion es la del contador incremental actual */
  91. li_next_index_hijo = upperbound(m_principal.item[ll_counter_padre].item )
  92. /* Agregamos el item al menu */
  93. m_principal.item[ll_counter_padre].item[li_next_index_hijo+1] = lm_elemento_vacio_hijo[1].item[1]
  94. end if
  95. end if
  96. next
  97. destroy ds_datastore_hijo
  98. next
  99. destroy ds_datastore_padre
  100. //Es necesario mostrar el m_archivo. No solamente m_principal.
  101. m_principal.m_0.hide()
  102. m_principal.m_0.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement