Agregar imagenes de Grafos a aplicaciones GeneXus.



Trabajando en el KBModule, estaba necesitando hacer graficos sencillos entre los modulos.
No busqué demasiado, pero encontre Graphviz, que cumple con lo que necesito en esta etapa.
Lo que queria lograr era mostrar este tipo de graficos.

La sintaxis es sencilla:

"Graphviz2.20\bin\circo.exe" -Tjpg -o"grafico.jpg" -Kcirco grafico.dot

-T
donde jpg es el formato de la imagen que quiero salvar (soporta unos cuantos, algunos que ni conozco, estan jpg, gif, png, etc)
-o
Imagen de salida
-K
Forma de organizar los nodos. Circo es en un circulo

grafico.dot, es el archivo que contiene la definición del grafico.
Tiene muchisimas opciones para usar, para personalizar el formato de los nodos, el formato de las lineas, colores, anchos, tamaños y demas.

Estoy usando las forma mas sencillas, y es muy facil de generalo, pues es un archivo de texto.

El grafico.dot del ejemplo es:

digraph Grafico
{
node[shape=folder,style=filled,colorscheme="blues9",color=3];
GeneralWeb->Generated[color="red" penwidth=3];
GeneralWeb->MT[color="red" penwidth=3];
GeneralWeb->Security[color="red" penwidth=3];
Generated->Generated2[color="red" penwidth=3];
Generated->GeneratedValidaciones[color="red" penwidth=3];
Generated->MT[color="red" penwidth=3];
Generated->Security[color="red" penwidth=3];
Generated2->GeneralWeb[color="red" penwidth=3];
Generated2->MT[color="red" penwidth=3];
Generated2->Security[color="red" penwidth=3];
GeneratedValidaciones->GeneralWeb[color="red" penwidth=3];
GeneratedValidaciones->MT[color="red" penwidth=3];
GeneratedValidaciones->Security[color="red" penwidth=3];
GL->MT[color="red" penwidth=3];
MT->Security[color="red" penwidth=3];
MT->SummarizedBy[color="red" penwidth=3];
}


Para graficos de tamaños razonables, es muy rapido para usar, y se puede generar la imagen en el momento.

Los pasos a seguir:

1) Instalar el GraphViz en alguna maquina.
2) Se se quiere distribuir este generador de graficos con la aplicacion web, copiar el directorio donde se instala, y ponerlo bajo el directorio web de la aplicacion.
3) En la aplicacion Genexus hacer

...
//Genero archivo txt Grafico.dot, que tenga la informacion del grafo.
....

//Llamo al programa para generar el archivo de la imagen, generando el grafico.jpg.
&err=shell('Grafico.bat',1)

//Muestro imagen

//Si es necesario borrar la imagen generada.


En la galeria se ven varios ejemplos de grafos que se pueden realizar, sin demasiado esfuerzo.
No lei en detalle la licencia, pero entendí que se puede distribuir sin problemas.

Comentarios

  1. Hola Enrique.

    Comentario de alguien que hace años ya utiliza Graphviz con GeneXus.

    Utilizando Graphiz y algunos trucos es posible lograr muy buenos resultados (Interactividad y calidad visual)

    Para interactividad, Graphviz soporta la generación de Area MAP (HTML) puedes crear puntos interactivos en el diagrama, yo lo uso para invocar llamadas a funciones javascript que luego son los que realizan la iteración con el aplicativo GX, puede usarse como un link tradicional para ir hacia alguna página en particular.

    Otro detalle muy importante es la parte Visual, soporta la inclusión de imágenes para los nodos, con lo que se puede lograr nodos de buen aspecto (con algunos trucos en el lenguaje).

    Lo único que se lamenta es que cada diagramador contiene un conjunto de propiedades soportadas, por lo que lo que puedes lograr en dot, no lo puedes lograr en neato o en los otros diagramadores.

    Te adjunto en el link un ejemplo simple en donde muestra un diagrama generado con íconos, imágenes particulares para los nodos
    http://s473.photobucket.com/albums/rr92/3dgiordano/?action=view&current=Ejemplo_GX_Graphviz.png

    ResponderEliminar
  2. David:
    Es bueno saber que alguien mas ya lo esta usando.
    Vi que se pueden hacer cosas muy buenas con el Graphviz, por lo que voy a investigar un poco mas el tema.
    Es muy sencillo de usar y agrega valor a nuestras aplicaciones.
    Gracias por el comentario.

    Enrique

    PD: Probe algo con Vrml y con MAP, y vi que pueden hacerse cosas buenas...

    ResponderEliminar
  3. Estimado Enrique,
    He estado rabajando con la herramienta Graphviz con GeneXus X, pero por algun motivo al probar el comando &err=Sehll('crearGrafo.bat',1), no funciona, ni siquiera lo ejecuta. Alguna idea de porque? Gracias

    Michell

    ResponderEliminar
  4. Michell:
    Como sabes que no se esta ejecutando el comando con la instruccion shell?.

    Lo primero es asegurarse de tener el *.bat correspondiente en el directorio correcto, para que el comando shell lo pueda ejecutar sin problemas.

    Despues, ponerle al comando, algo que permita ver si esta ejecutando, como por ejemplo, que en la primera linea grabe un archivo en disco..

    Despues, asegurate que ejecutar el comando desde el directorio donde esta la aplicacion web, y con el usuario que ejecuta dicha aplicacion, no tenga ningun inconveniente de seguridad o que le falte algun componente.

    Con esos pasos, no deberias tener mayor problema en ejecutarlo.

    Enrique

    ResponderEliminar
  5. estimado,
    buscando llegue acá con una consulta sobre las ejecución de shell,
    necesito que al ejecutar la shell no aparezca la consola esto lo logro especificando el parámetro 0 en el llamado a la shell, el tema es que necesito que el sistema realicé cierta acción después que se ejecute el shell, es por eso que le doy la opción 1 la cual me deja el sistema a la espera que termine el shell. esto causa que se levante el entorno de comando de windows y muestra todo lo que esta realizando .. hay alguna forma de ejecutar el shell con [Modal] 1 sin que aparezca la pantalla de comando..

    toy trabajando con Genexus 9 java Sun, como nota te comento que en genexus 8 no levanta el dicha pantalla

    Atento a tus comentarios

    Atte

    Esteban

    ResponderEliminar
  6. Hola amigos, soy nuevo en el tema de genexus, he estado leyendo los comentarios de lo muchachos y son muy interesantes, con respecto a la pregunta de Esteban, conozco un programita que se llama QuickBatch, que hace que los *.bat, *.exe, etc trabajen en segundo plano, lo puedes bajar y probar. funciona de esta manera: el quickbatch compila el *.bat con un nombre distinto o con el mismo(queda a tu criterio), y desde la shell llamas al archivo compilado por el quickbatch y lo ejecuta en segundo plano. Ojala pueda servirte de ayuda. Davicho

    ResponderEliminar
  7. Davicho:
    Gracias por el comentario, voy a probar QuickBatch.

    Enrique

    ResponderEliminar
  8. Hola Enrique, lei que programa en Gx ... tengo una duda yo estoy trabajando con un programa hecho en gx8.0 cn visual basic y access... lo tengo que hacer que trabaje en red hago el ejecutable pero no me sale la opcion que se instale para red... no se porque sera... si me ayudas seria estupendo! gracias!

    Estefania

    ResponderEliminar
    Respuestas
    1. Estefania:
      Hace mucho que no programo con GeneXus 8.0 y Visual Basic, pero por lo que recuerdo, alcanzaba con copiar el directorio donde estaba el ejecutable con la base access a la red. No se necesitaba nada mas para que pudieran funcionar con varios usuarios.

      Eliminar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

El Sordo

StackOverflow Documentation

Paleta de colores en GeneXus