Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- datastore ds_datastore_padre, ds_datastore_hijo, ds_datastore_nieto
- 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
- string texto_padre, texto_hijo, ventana_hijo, nombre_aplicativo,texto_nieto,ventana_nieto,imagen_hijo,imagen_nieto
- nombre_aplicativo = "prestamos";
- ds_datastore_padre = create datastore
- ds_datastore_padre.dataobject = "d_datos_armado_menu_dinamico"
- ds_datastore_padre.SetTransObject (SQLCA)
- /*
- Obtengo todos los items del menu con padre = 0 and activo = true; para el usuario logueado.
- El aplicativo utilizado es prestamos (tabla pb_aplicativo)
- */
- ds_datastore_padre.Retrieve(SQLCA.logid, nombre_aplicativo,0)
- numrows_padre = ds_datastore_padre.RowCount()
- for ll_counter_padre = 1 to numrows_padre
- /* Obtenemos las propiedades */
- id_padre = ds_datastore_padre.GetItemNumber(ll_counter_padre, "pb_menu_pm_id");
- texto_padre = ds_datastore_padre.GetItemString(ll_counter_padre, "pb_menu_pm_texto");
- /* Armo elemento padre */
- m_dinamico_vacio lm_elemento_padre[]
- lm_elemento_padre[1] = create m_dinamico_vacio
- lm_elemento_padre[1].fm_SetTexto( texto_padre)
- lm_elemento_padre[1].fm_SetID( id_padre )
- /* La posicion es la del contador incremental */
- m_principal.item[ll_counter_padre] = lm_elemento_padre[1].item[1]
- /* Obtenemos informacion de los hijos del padre */
- ds_datastore_hijo = create datastore
- ds_datastore_hijo.dataobject = "d_datos_armado_menu_dinamico"
- ds_datastore_hijo.SetTransObject (SQLCA)
- //Obtengo todos los items con padre = "id". Donde "id" es la id del padre actual. Ordenado por orden.
- ds_datastore_hijo.Retrieve(SQLCA.logid, nombre_aplicativo,id_padre)
- numrows_hijo = ds_datastore_hijo.RowCount()
- for ll_counter_hijo = 1 to numrows_hijo
- id_hijo = ds_datastore_hijo.GetItemNumber(ll_counter_hijo, "pb_menu_pm_id");
- texto_hijo = ds_datastore_hijo.GetItemString(ll_counter_hijo, "pb_menu_pm_texto");
- ventana_hijo = ds_datastore_hijo.GetItemString(ll_counter_hijo, "pb_menu_pm_ventana");
- imagen_hijo = ds_datastore_hijo.GetItemString(ll_counter_hijo, "pb_menu_pm_imagen");
- if(not isnull(ventana_hijo)) then
- m_dinamico_contenido lm_elemento_contenido_hijo[]
- lm_elemento_contenido_hijo[1] = create m_dinamico_contenido
- lm_elemento_contenido_hijo[1].fm_SetTexto( texto_hijo)
- lm_elemento_contenido_hijo[1].fm_SetID( id_hijo )
- lm_elemento_contenido_hijo[1].fm_SetVentana( ventana_hijo )
- lm_elemento_contenido_hijo[1].fm_setimagen( imagen_hijo )
- /* La posicion es la del contador incremental actual */
- li_next_index_hijo = upperbound(m_principal.item[ll_counter_padre].item )
- /* Agregamos el item al menu */
- m_principal.item[ll_counter_padre].item[li_next_index_hijo+1] = lm_elemento_contenido_hijo[1].item[1]
- else
- /* si el texto de la ventana es nulo, quiere decir que el item actual tendrá una coleccion de hijos */
- m_dinamico_vacio lm_elemento_vacio_hijo[]
- lm_elemento_vacio_hijo[1] = create m_dinamico_vacio
- lm_elemento_vacio_hijo[1].fm_SetTexto( texto_hijo)
- lm_elemento_vacio_hijo[1].fm_SetID( id_hijo )
- lm_elemento_vacio_hijo[1].fm_setimagen( imagen_hijo )
- /*
- Ahora vamos en busca de todos los "Hijos" del item "Sin Ventana"
- */
- ds_datastore_nieto = create datastore
- ds_datastore_nieto.dataobject = "d_datos_armado_menu_dinamico"
- ds_datastore_nieto.SetTransObject (SQLCA)
- ds_datastore_nieto.Retrieve(SQLCA.logid, nombre_aplicativo,id_hijo)
- numrows_nieto = ds_datastore_nieto.RowCount()
- /* Es necesario primero setear el elemento "vacio" con dato dummy, porque debe estar inicializado.*/
- if(numrows_nieto>0)then
- /* Agregamos los hijos al padre */
- /* La posicion es la del contador incremental actual */
- li_next_index_hijo = upperbound(m_principal.item[ll_counter_padre].item )
- /* Agregamos el item al menu */
- m_principal.item[ll_counter_padre].item[li_next_index_hijo+1] = lm_elemento_vacio_hijo[1].item[1]
- for ll_counter_nieto = 1 to numrows_nieto
- id_nieto = ds_datastore_nieto.GetItemNumber(ll_counter_nieto, "pb_menu_pm_id");
- texto_nieto = ds_datastore_nieto.GetItemString(ll_counter_nieto, "pb_menu_pm_texto");
- ventana_nieto = ds_datastore_nieto.GetItemString(ll_counter_nieto, "pb_menu_pm_ventana");
- imagen_nieto = ds_datastore_nieto.GetItemString(ll_counter_nieto, "pb_menu_pm_imagen");
- /* Tengo que armar un elementos nieto con contenido */
- m_dinamico_contenido lm_elemento_contenido_nieto[]
- lm_elemento_contenido_nieto[1] = create m_dinamico_contenido
- lm_elemento_contenido_nieto[1].fm_SetTexto( texto_nieto)
- lm_elemento_contenido_nieto[1].fm_SetID( id_nieto )
- lm_elemento_contenido_nieto[1].fm_SetVentana( ventana_nieto )
- lm_elemento_contenido_nieto[1].fm_setimagen( imagen_nieto )
- /*Agregamos los nietos al hijo */
- /* La posicion es la del contador incremental actual */
- li_next_index_nieto = upperbound(m_principal.item[ll_counter_padre].item[li_next_index_hijo+1].item )
- /* Agregamos el item al menu */
- 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]
- next
- else
- /*Caso especial para elementos de items especiales como Cascada. No se visualizan los hijos*/
- /* La posicion es la del contador incremental actual */
- li_next_index_hijo = upperbound(m_principal.item[ll_counter_padre].item )
- /* Agregamos el item al menu */
- m_principal.item[ll_counter_padre].item[li_next_index_hijo+1] = lm_elemento_vacio_hijo[1].item[1]
- end if
- end if
- next
- destroy ds_datastore_hijo
- next
- destroy ds_datastore_padre
- //Es necesario mostrar el m_archivo. No solamente m_principal.
- m_principal.m_0.hide()
- m_principal.m_0.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement