Entradas

Mostrando las entradas de marzo, 2015

Documentación, ejemplos y Genexus Server

Imagen
Una queja generalizada de los usuarios GeneXus es que no es fácil encontrar como se usan determinadas funcionalidades. Si bien la documentación ha mejorado muchísimo en los  últimos años y tenemos un WIKI que tiene mucha documentación, hay muchos usuarios que recién comienzan que no encuentran ejemplos de como usar determinados comandos.

El problema que he visto, es que si bien saben que existe determinada funcionalidad, no tienen ejemplos completos que muestren como usarla.

Cuando me llega este tipo de consulta, trato de refererirlo a KB de ejemplo (People and Organizations, WIKI del servidor público de GXServer.
Para poder extraer el ejemplo que quieren, el usuario deber bajarse toda la KB y empezar a buscar donde esta la funcionalidad buscada, lo cual es bastante engorroso y generalmente no hacen.

Para subsanar esto, se me ocure que seria bueno contar con 3 cosas bastante sencillas.

Poder linkear el fuente u objetos desde un WIKI a GeneXus Server. 
Me gustaría que en el Wiki de la c…

Comparador de Objetos GeneXus

Imagen
GeneXus provee varias funcionalidades de comparación entre objetos. Se puede comparar diferentes revisiones del mismo objeto, el mismo objeto en dos versiones dentro de la misma KB y también se puede comparar un objeto que voy a importar con el objeto que tengo en la KB.

Sin embargo, hay varios casos de uso que no se pueden resolver aun con estas herramientas, por ejemplo: * Un modulo común, instalado en dos KB diferentes y quiero comparar las diferencias entre los módulos. * KB en dos versiones de GeneXus diferentes (por ej, Evo2 y Evo3)* Comparar versiones, en KB grande, donde el comparador entre versiones de GeneXus demora tanto que se hace muy poco practico. 
Para esto, programé una nueva opción en el KBDoctor (version 11, que aun no publiqué) que permite seleccionar un conjunto de objetos y generar un archivo de texto con el contenido de cada uno de dichos objetos. Luego utilizo un comparador de archivos, para ver cuales son las diferencias.

Traté de hacerlo lo mas sencillo posib…

Como eliminar referencias a objetos "To Be Defined"

Imagen
Es bastante común que en las KB queden referencias a objetos "To Be Defined".  Esto es una situación normal, cuando se importan objetos que llaman a otros que no existen en la KB en la cual estamos importando. Cuando se crean o se importan estos objetos, las referencias se borran y todos contentos.

También es común, que queden objetos en la categoría/carpeta "To Be Defined", pero que no tienen ningún objeto que lo referencien, por lo que la solución anterior, no puede ser usada.

Un ejemplo de esto:
No es posible borrar estos objetos, por lo que para solucionar esto, lo que hago es crear un procedure con el texto


Call("POrgest")
Call("PRgAcBitácoras")

.....



con todos los objetos que están en To Be Defined, que quiero borrar.


Hay que salvar el objeto y luego, conviene comentar todas las llamadas y volver a salvar dicho objeto.

De esta forma, como la referencia que se está eliminando es la última, se borran dichos objetos fantasma.

UPDATE: Me pregunt…

Comprimir una KB GeneXus.

Imagen
Guscarr proponía utilizar la tarea CheckKnowledgeBase, para desfragmentar los índices y corregir errores internos de la KB.

Viendo la dll de la tarea msbuild, encontré una opción para comprimir la KB en la tarea OpenKnowledgeBase, que no está documentada y creo que puede ser útil para KB que tengan varios años de funcionamiento. 
NOTA: El OpenKnowledgeBase tiene otra opcion EventSuspend que tampoco esta documentada y no se bien para que sirva. Si logro descubrirlo, actualizo este post. 
Para lograrlo hice un archivo "CheckKnowledgeBase.msbuild" cuyo contenido es:
<Project DefaultTargets="UpdateFromServerAndBuildAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  <Import Project="$(GXDir)\Genexus.Tasks.targets" />  <Target Name="OpenKnowledgeBase">    <OpenKnowledgeBase Directory="$(KBDir)" CompressData="True"  EventsSuspended="True" />  </Target>  <Target Name=&qu…