jueves, 29 de noviembre de 2007

Exportación genérica a Ms Excel

Las posibilidades que se tiene importando-exportando a Excel en Meta4 PeopleNet son muchísimas...

Me encanta, personalmente, realizar consultas mediante opciones de menú donde obtengas un resultado en pantalla y luego, darle al usuario la posibilidad de exportarlo a Excel o a texto, o incluso yendo más allá permitir planificar una tarea si la exportación va a ser grande [Esto será motivo de otro Post].

Un ejemplo de exportación genérico que me gusta hacer es el siguiente.

En tu Meta4Object créate una Estructura de nodo: llamémosla CXX_AUX_ITEMS con la siguiente sentencia:

Esta estructura te cargará los ítems de tipo campo, concepto y propiedad de una estructura de nodo dada... [Lo veréis más adelante]
Nos falta añadir un par de métodos a la estructura CXX_AUX_ITEMS:
  • DESTROYBLOCK, para destruir el contenido, ámbito bloque.
  • CXX_NORMALIZAR_STRING(argumento ARG_CADENA de tipo long) devuelve LONG, ámbito nodo, que lo que hará es quitar los códigos de retorno que el Ms Excel no controla (sobre todo para el tema de campos comentario o campos de tipo long). El código es: CXX_NORMALIZAR_STRING.txt

y una propiedad para el filtro: ARG_ID_TI de ámbito nodo "No Visible" y de tipo Candena variable de 30 posiciones

En el nodo donde queráis hacer la exportación, crea un alias contra el Meta4Object "EXCEL"

Creáis un método CXX_EXPORT_EXCEL "Exportación a Ms Excel", de ámbito Nodo, que esté en cliente y metéis el siguiente código: CXX_EXPORT_EXCEL.txt

La estructura CXX_AUX_ITEMS la podéis usar donde queráis... por que es genérica siempre que se ejecute el método CXX_EXPORT_EXCEL desde el nodo que queramos exportar... si lo queremos ejecutar desde otro sitio habría que cambiar ligeramente el código.

Esto sería un ejemplo de lo que obtendríamos:


Espero que os sirva...

5 comentarios:

Oscar López dijo...

Parece ser que he descubierto un pequeño problema tras escribir este post. No se comporta igual un Call(Nodo,"ISEOF") que el ENodo.IsEOF() así que hay que modificar el código adjunto sel metod CXX_EXPORT_EXCEL.
Cambiaremos el:
Call(MsThisTIID,"Begin")
While Call(MsThisTIID,"IsEOF") = M4_FALSE

Por:

MnCount = Call(MsThisTIID,"Count") MnPointer = 0
While MnPointer <= MnCount -1
Call(MnPointer,MsThisTIID,"MoveTo")

y al final:

Call(Call(MsThisTIID,"GetCurrent")+1,MsThisTIID,"MoveTo")

por:

MnPointer = MnPointer + 1

Funcionará igual.

Meta4 Parece que no quiere añadirlo como Bug (Error)

Un saludo,

Oscar López dijo...

Siguiendo con este ejemplo teneis la exportación a fichero plano en la entrada, de este mismo blog:

http://m4peoplenet.blogspot.com/2008/01/exportacin-genrica-fichero-de-texto.html

Un saludo!
Oscar L.

Oscar López dijo...

He incluido un ejemplo un poco más detallado de como realizar las exportacione a TXT o a EXCEL:

http://www.box.net/shared/i0updubggo

Quizá ayude!!

Anónimo dijo...

Muchas gracias por los post, son bastante aclarativos y merece la pena mirarlos de vez en cuando.Buen trabajo.

Gracias

Oscar López dijo...

Pues he cambiado la sentencia de la estructura de nodo "CXX_AUX_ITEMS" por una que pueda leer estructuras de nodo con herencia:

Link al post

Un saludo!
Oscar L.