viernes, 15 de septiembre de 2006

XML y Velneo

Últimamente me he encontrado con la necesidad de comunicar mis aplicaciones Velneo con terceros a través de ficheros de intercambio en XML.

Un fichero XML en principio no es más que un fichero de texto plano con una estructura jerárquica estricta definida por etiquetas con apertura y cierre, dentro de cada etiqueta van los datos.

Un ejemplo sencillo puede ser;

[?xml version=" 1.0 " encoding=" UTF-8 " standalone= " yes "?]
[ficha]
[nombre] Angel [/nombre]
[apellido] Barbero [/apellido]
[direccion] c/Ulises, 36 [/direccion]
[/ficha]

Lleva una cabecera que define la versión de xml del documento, la forma en que se ha codificado el documento y si el documento va acompañado de un DTD (Declaración de Tipo de Documento ) o no. Un DTD define la estructura y semántica del XML, pero en eso no vamos a entrar ahora.

Veamos otro ejemplo un poquito más complejo;

[?xml version=" 1.0 " encoding=" UTF-8 " standalone= " yes "?]
[movies]
[movie]
[title]Raising Arizona[/title]
[writer]Ethan Coen[/writer]
[writer]Joel Coen[/writer]
[producer]Ethan Coen[/producer]
[director]Joel Coen[/director]
[actor]Nicolas Cage[/actor]
[actor]Holly Hunter[/actor]
[actor]John Goodman[/actor]
[comments]A classic one-of-a-kind screwball love story.[/comments]
[/movie]
[movie]
[title]Midnight Run[/title]
[writer]George Gallo[/writer]
[producer]Martin Brest[/producer]
[director]Martin Brest[/director]
[actor]Robert De Niro[/actor]
[actor]Charles Grodin[/actor]
[comments]The quintessential road comedy.[/comments]
[/movie]
[/movies]

La cabecera, un elemento padre "" englobando a todo lo demás, y una serie de tags anidados de forma correcta que contienen información. Si lo analizamos un poco podemos ver cierto parecido con la manera que tenemos de tratar la información en Velneo, una tabla maestra de películas y por ejemplo las tablas escritores, productores, directores y actores relacionadas con esta mediante históricas ( escritores-películas, productores-películas, etc... ).

Generar este XML desde Velneo es algo tan fácil como:

Fichero: Abrir -] xml, d + "\\xml\\nombre_fichero.xml", Lectura/escritura. Crea o Limpia
Fichero: Grabar línea -] xml, "[?xml version=\c1.0\c encoding=\cUTF-8\c standalone=\cyes\c?]"
Fichero: Grabar línea -] xml, "[movies]"
Búsqueda -] PELICULAS if -] n ! 0
Ordenar Lista -] %TITULO%
Recorrer lista sólo lectura
Fichero: Grabar línea -] xml, "[movie]"
Fichero: Grabar línea -] xml, "[title]" + %TITULO% + "[/title]"
Cargar histórico -] ESCRITORES-PELICULAS, CODPELI
Recorrer lista sólo lectura
Fichero: Grabar línea -] xml, "[writer]" + %NOMBRE% + "[/writer]"
etc...

Hay que ser estricto a la hora de cerrar todos los tags que abrimos y que la anidación sea correcta y ya está. Esto puede complicarse mucho más pero, básicamente, cargando lista, recorriendola, multipartiendola, cargando históricos, tenemos solucionado en cuatro pasos la generación de ficheros XML bién formados, que en la gran mayoría de los casos satisfacen la demanda de datos de terceros.

Como complemento a esto os diré que en el almacén de objetos hay una utilidad lista para su uso llamada parseador XML que con pocas modificaciones sirve para almacenar ficheros XML en tablas nativas Velneo. Yo además la he utilizado para comprobar que el documento XML almacenado está bién formado y que los datos almacenados son consistentes. Todo ello en un par de horas, utilizando las plantillas y el amacén de objetos.

Ahora sigo preguntándome; qué problema de tratamiento de información se me puede plantear que no pueda resolver con Velneo?

2 comentarios:

  1. Muy bueno tu Blog.

    Cuando dices:

    "Ahora sigo preguntándome; qué problema de tratamiento de información se me puede plantear que no pueda resolver con Velneo?"

    Creo que hay una:

    Como puedes acceder a un WebService en plataforma .NET e interactuar con una base de datos con altas, bajas, consultas y modificaciones.

    Y por si fuera poco:
    y en uno de esos campos introducir un objeto dibujo de una tabla de Velneo ?

    Saludos,

    Mariano Ramiro

    ResponderEliminar
  2. Hola Ramiro,

    Pues al webservice .NET lo atacaría como a cualquier otro; mandando xml y siguiendo el protocolo para consultas, altas, bajas o modificaciones.

    Y si tuviese que insertar un objeto dibujo en uno de esos campos seguramente mandaría el objeto codificado en base64.

    Un saludo,

    ResponderEliminar