La empresa Zetasoftware necesitaba para uno de sus sistemas desarrollado en Genexus X un grid web que permitiera presentar filas de manera jerarquizada. Analizando las posibilidades optamos por implementar un user control usando Adobe Flex 3. El siguiente es un ejemplo del “look and feel” del control:
Hace unos meses me contactó Rogelio Arosemena de Inalambrik para desarrollar un user control que le permitiera usar los servicios de Google Maps desde Genexus. Había visto el Map Control pero necesitaba funcionalidades mas específicas.
Acordamos la metodología de trabajo y en pocas semanas ya teníamos el user control funcional. Quedamos ambos muy conformes con el resultado obtenido y nos demostró que la distancia (Ecuador-Uruguay) no impide que se pueda trabajar de manera fluida.
El Google Map Control soporta:
Markers (con eventos click, drag)
Polilíneas
Polígonos
KML
LocalSearch
UPDATE: Si alguien quiere más información o le interesa usar el control contactarse conmigo.
A la hora de desarrollar user controls son muy útiles (diría necesarias) algunas herramientas que faciliten el desarrollo javascript. Yo he utilizado las siguientes extensiones para Firefox e IE:
Le agregué categorías a las tareas, nuevos estados y le hice algunos cambios estéticos. Empezó a tomar forma de bug tracker.
A partir de una idea de Enrique Almeida y luego de José Lamas, hice una pequeña API para que otras extensions puedan administrar tareas. La API es bastante simple, consta de 4 métodos (AddTask, GetTaskData, UpdateTask y RemoveTask). Para poder usarla lo único que hay que hacer es agregar como referencia al proyecto el assemby TaskList.dll.
Ejemplo de uso
AddTask
GetTaskData
UpdateTask
RemoveTask
PD.: Ya me bajé algunas de las extensions del gxchallenge, en cuanto pueda las voy a ir probando…
Siguiendo con la misma idea de extender Genexus y sacando un poco de ideas de eclipse hice una extensión task list (ToDo list).
¿En que consiste?
Básicamente es una tool window donde se agendan tareas a hacer.
Cada tarea puede tener prioridad, estado, fecha, notas, etc…
Pendientes:
- Ordenes en la lista de tareas, actualmente es siempre por orden de creación.
- Filtros y alarmas por fecha de agendado (scheduled date).
- Ver algún nombre menos llamativo para los objetos Task y que no se repita (actualmente esta usando el HashCode de los objetos, se repite?).
- Un tema que está muy interesante es el concepto de “contexto” de las tareas de la task list de eclipse. Cada tarea tiene un “contexto” (clases, métodos y atributos relacionados). Creo que haciendo algo similar y aprovechando el versionado de objetos de la rocha se podría llegar a implementar un bug/issue tracker interesante e integrado al DE.
- Render de diseño
- Se crean las variables y se asocia la variable de databinding con “Actions”.
- Se agregó una propiedad para elegir el tipo de distribución (lineal, logarítmica) para el tamaño de las fuentes.
Distribución del tamaño de las fuentes
Un tag cloud es una especie de histograma con la diferencia que permite representar información de manera mucho mas densa. Lo equivalente a una barra sería un tag y lo equivalente al tamaño de la barra es el tamaño de la fuente.
Hay veces que por la naturaleza de los datos y por la alta densidad de información si se hace una distribución lineal del tamaño de la fuente se pierde la capacidad de identificar a golpe de vista que tag es mas relevante que otro (se agrupan muchos tags en la misma categoría). Por ejemplo usando 8 diferentes tamaños de fuentes y con el siguiente juego de datos:
Haciendo una distribución lineal del tamaño de las fuentes el resultado es el siguiente:
Sin embargo, si utilizamos una distribución logarítmica obtenemos:
Con la distribución logarítmica se pierde un poco el “cuánto” mas relevante es un tag pero para algunos casos es útil para representar mejor el “cuál” es mas relevante.
En esta versión se le agregó al control una propiedad para poder elegir el tipo de distribución.
Experimentando con los nuevos user controls de Genexus Rocha me surgió la idea de hacer un control Tag Cloud. Una primera versión (beta o CTP1 ) está disponible para bajar acá.
¿Cómo lo uso?
Instalación
- Crear la carpeta TagCloud bajo la carpeta de User Controls. Ej.:
- Copiar el contenido del archivo TagCloud.zip a la carpeta creada.
Uso
- Arrastro el control a un web panel.
- Creo una variable del tipo TagCloud y otra del tipo TagCloudItem.
- Asocio a la propiedad “Data” del control la variable de tipo TagCloud.
- Cargo los tags. Ej.:
Resultado
¿Qué arreglos tiene pendiente?
- Que no sea necesario ni crear las variables ni asociar la variable databinding, que esto se haga solo al insertar el control.
- Hacer que la cantidad de diferentes tamaños de tags sean una propiedad del control, actualmente son 10 y son fijos.
- Poder asociar una clase de un theme al control.
- Hacerle un render de diseño.
- Etc…