miércoles, julio 19, 2006

OpenDocument Format y GeneXus

Hace unos meses tuve la necesidad de poder leer desde GeneXus archivos de OpenOffice, no me quedo otra que salir a investigar como poder hacerlo ya que no tenia la menor idea. Lo primero que hice fue buscar que significaban las extensiones odt, ods y odp ya que eran los archivos que tenia que leer para extraer el texto y luego procesar ese texto.

Las extensiones pertenecían a:

OpenOffice.org Writer (.odt) - Procesador de Texto
OpenOffice.org Calc (.ods) - Planilla de Calculos
OpenOffice.org Impress (.odp) - Presentaciones

Después de tener esto claro comencé a buscar como hacer para leer estos formatos desde GX y lamentablemente no tenia forma de hacerlo desde GX, por lo menos con los conocimientos que tenia hasta ese momento.

Cuando ya estaba por darme por vencido descubrí que el OpenOffice trabaja con un formato abierto llamado OpenDocument, cuando comprendí que los archivos que yo tenia que leer estaban en un formato abierto no me quedaba otra que estudiar el OpenDocument para poder interpretar ese formato.

OpenDocument es un estándar abierto que pretende ser una alternativa a los formatos cerrados de Microsoft Office. Este formato está basado en un esquema XML. Por mas información consultar el siguiente link:

http://es.wikipedia.org/wiki/OpenDocument

Después que estudie el estándar del OpenDocument Format todo me quedo mas claro ya que alcanza con descomprimir el contenido de los archivos de OpenOffice y acceder a los diferentes XMLS:

content.xml
meta.xml
settings.xml
styles.xml

De esos xml para acceder al contenido de un documento alcanza con leer el content.xml, después que llegue a tener él conocimiento necesario para interpretar el OpenDocument me di cuenta que desde GX alcanzaba con hacer un programa que lea un xml y extraiga el texto.

El procedimiento me quedo de la siguiente manera:

//**********************************************************************************
/*
Autor : Cristhian Gómez (urulinux@adinet.com.uy)
Start Date : 02-03-2006
Last Update: 02-03-2006
Versión : 1.0.01
*/

&NombreArchivo = &NombreArchivoExterno

// El primer parámetro es el nombre del Archivo de OpenOffice o de StarOffice
// El procedimiento me devuelve el nombre del XML que tengo
// que leer (content.xml)

&Archivo.Source = &NombreArchivo

if &Archivo.Exists()
call('unzipjava', &NombreArchivo, &Nombre_Content)
&readfile.open(&Nombre_Content)
&readfile.ReadType(1, 'office:body')
&readfile.read()
do while &readfile.name <> 'office:body'
&Auxiliar = trim(&readfile.value)
if &Auxiliar <> NullValue(&Auxiliar)
&txtBody = &txtBody + newline() + &Auxiliar
endif
&readfile.read()
enddo
&readfile.close()
&OutText = &txtBody
else
&OutText = "No existe un archivo en el servidor para leer...."
endif

//**********************************************************************************

Como pueden ver en el código con muy pocas líneas de código puedo leer desde GX archivos de OpenOffice, lo único externo a GX es el programa que se encarga de descomprimir el archivo de OpenOffice (unzipjava).

Esto me demostró que los problemas en informática van a depender del conocimiento del programador ya que en mi caso alcanzo con dedicarle un tiempo a investigar el OpenDocument como para poder cumplir mi objetivo.

Los que quieran ver un ejemplo de esto funcionando pueden entrar a:

http://www.gxopen.com:8080/gxotf_odf/servlet/hopenofficetest

Está aplicación sube el documento al servidor y lo abre mostrando el texto plano en pantalla extraído del documento de OpenOffice.

lunes, julio 17, 2006

GeneXus Collaborative Projects

En lo personal pienso que los proyectos colaborativos son una muy buena idea y creo que todos los miembros de la comunidad debemos colaborar para que esta iniciativa pueda dar buenos resultados ya que los proyectos colaborativos van a beneficiar a toda la comunidad genexus.

Una de las cosas que se está dejando para decidir por parte de cada grupo que participe en un proyecto es la organización de los participantes.

Siempre tuve la duda de como se organizaban en general los proyectos de open source para recibir las colaboraciones de los participantes, por suerte pude preguntarle a Federico Wagner y a mas de un miembro del UyLug en diferentes reuniones y todos me comentaban lo mismo.....

En síntesis los proyectos de open source cuentan con un grupo que se encargan de actualizar el proyecto y organizar las tareas para que el resto de los miembros puedan colaborar. Los encargados de actualizar el proyecto tienen que revisar y validar los cambios recibidos para luego incluirlos en las nuevas versiones.

En los “Collaborative Projects” creo que debemos seguir el mismo modelo de organización que tienen los proyectos en el mundo del open source.

Continuara...