Unofficial Content

Esta página sale por una sugerencia de Gustavo Olmos de tener el List all last navigations publicada en Genexus Wish List .
 

Introducción

Si voy especificando objetos se van creando los SPCs y los XMLs de las navegaciones.
Esos XMLs, que se graban en directorio_de_la_kb\GXSPCxxx\GENxx\NVG son la navegaciones.

Por otra parte, tengo en GeneXus la opción Tools/List Last Navigation
Ahora, esa opción lo que hace es listar la navegación de la ultima especificación que se hizo.
Es decir, si se especificaron 10 objetos muestra la navegación de esos 10 objetos, si se especificó uno, la navegación de ese objeto, de modo que voy "perdiendo" las otras navegaciones.

El planteo es: teniendo todos los XML de las navegaciones ¿porqué el List Last Navigation trae solamente los ultimos especificados y no todos los que tiene el XML?
 

Explicación (técnica)

El tema es que el List Last Navigation tiene dos partes, la columna izquierda que tiene el nombre del objeto, si especificó bien o con error, etc) y la derecha que muestra un HTML (XML/XSL).

La columna izquierda se obtiene de un archivo de resumen (gxnavig.xxx) que el especificador graba en el directorio del USER.
En la medida que el usuario clickea en un objeto de la columna izquierda se aplica el XSL al XML guardado previamente de ese objeto y ahi aparece la navegación en HTML.

¿Podria hacerse de otro modo para implementar lo que Gustavo Olmos comenta?
Si, seguro.
Por ejemplo, el List Last Navigation podría parsear los XML que hay en el \GXSPCxxx\GENxx\NVG para armar la columna de la izquierda. No me gusta mucho, procesar miles de XMLs, no hay una diferencia por usuario como lo hay hoy (hoy es el List My Last Navigation por llamarlo de algun modo).

Otra posibilidad es ir haciendo "append" al gxnavig.xxx a medida que se especifica. No me gusta mucho, si bien el uso de ese archivo es "mono usuario" (no tendría el problema de hacer "append" a un txt en modo multiusuario que siempre es un dolor de cabeza), tampoco veo que resuelva lo que vos querés porque si un objeto no lo especificaste vos entonces no aparecería.

Otra posibilidad es tener algo como el "list objects" que le permite al desarrollador armar la columna izquierda. Es decir, ir eligiendo que objetos pone en la columna izquierda.

Conclusión lo que a priori parece "tenés los XML, es solo mostrarlos" tiene un punto técnico acerca de como se resuelve la columna izquierda y por otro lado los XMLs son por modelo y lo que se muestra en "List Last Navigation" es por usuario.
 

La solución hoy

El problema en si es que de algún modo yo quiero ver la navegación de un grupo de objetos, eventualmente de todos los objetos de la KB.

Ahora, eso se puede hacer usando la opción de especificar haciendo un "view last navigation" (build/specify, elegir los objetos y marcar el "view last navigation") que en definitiva lo que hace es armar la columna izquierda. Eso creo que es una buena solución y cumple el objetivo de ver la navegación de N (los que quiera) objetos.

También está la posibilidad con el botón derecho sobre el nombre del objeto de ver la ultima navegación de ese, etc.

Nota un detalle que a mi me resultó extraño (no se si es bueno o malo) es que cuando especifico con "view last navigation" me crea un gxnavigL.xxx y no usa el mismo gxnavig.xxx por lo cual si luego de especificar con "view last navigation" hago un "List Last navigation" no aparece esa lista de objetos sino los ultimos que especifique "realmente" (los del gxnavig.xxx).
 

Mi sugerencia de mejora

Talvez lo que si se podría implementar es que cuando veo el listado de navegación de uno o N objetos tener un botón de ADD que agregue N objetos a ese listado (internamente creo que sería especificar con view last navigation los N objetos seleccionados y hacer un append al gxnavigL.xxx).

El motivo de la misma es que una vez que especifique con View Last Navigation no tengo modo de agregar uno a la lista sin mandarlos todos 1 de nuevo.

Comentario (Gustavo Olmos)

Para lo que pedía me alcanza con la opción de especificar con 'view last navigation' que sugerís como solución hoy.
De todos modos la diferencia de tiempos entre esta opción y el List Last Navigation es grande (probé en una KB con 2.500 objetos), pero me quedan claras las complicaciones de modificar el List Last Navigation.

Comentario Guscarr
Si, entiendo el punto y comparto que spec con View Last Navigation es más lento que simplemente List Last Navigation.
Hay dos temas: por un lado "armar/mantener la lista de objetos que quiero ver" y por otro lado "para cada objeto obtener la info que se muestra a la izquierda".
Lo de "armar la lista" es fácil, lo hacemos en mil lados, incluso en la spec, etc.
Lo de "obtener la info para cada uno de esos objetos" es lo "pesado"

Hay 3 opciones:
a. mantener la info redundante - no me convence mucho la redundancia, no veo claro cuando "agrego" a la lista y cuando saco de la lista. Podría ser en un archivo (parecido a como es hoy) o en la base de conocimientos (otro precio!)
b. armar la lista "on the fly" - lento si proceso los XML, hoy es lo que se hace con la spec con "view last nav" procesando los SPCs (creo).

Para mi la única que puede funcionar es la de mantenerla redundante.

Comentario (ealmeida)
A mi me alcanzaria con tener un "Build all/List Last Navigation" que funcionara rapido, sin llamar al generador.
Si se mantiene la informacion redundante en una archivo separado, puede hacerse.

Lo mas prolijo seria tener una tabla en la KB que tenga

MdlId* //Id del Modelo
ObjId* //Id del Objeto
GenId* //Generador
NumId* //Correlativo
MsgId //El codigo del mensaje
MsgDsc //El texto del mensaje
MsgGrv //Gravedad del mensaje (warning/error/aviso)
Last update: April 2024 | © GeneXus. All rights reserved. GeneXus Powered by Globant