D 5.1.2 Implementación del Marketplace para PYMES
De MorfeoWiki
PROFIT
Morfeo-EzWeb
Área Temática: 350405 Strategic Action on Open Source Software
FIT-340503-2007-02 EzWeb
Entregable:
D 5.1.2 Implementación del Marketplace para PYMES
| Versión: | 1.0 |
| Fecha de preparación: | 23/11/07 |
| Editores: | CTIC, Treelogic |
| Revisores: | Alimerka, Gesimde |
Tabla de contenidos |
Elección de las tecnologías
Un requisito indispensable para realizar una implementación de un marketplace de resoluciones ERP para PYMES es un exhaustivo análisis de las plataformas mashup existentes en la actualidad. Puntos claves en la evaluación de las mismas serán: la capacidad de utilización de gadgets creados en otras plataformas, representación conjunta de gadgets, catalogación, comunicación entre gadgets y mecanismos de seguridad existentes. A continuación se describen distintas plataformas evaluadas:
NetVibes
Se trata de una plataforma mashup de tipo presentacional, con un funcionamiento a través de 'Gadgets' (tipo GoogleIG). Permite el uso de gadgets de tipo sindicación (feeds RSS), calendario y podcast, así como la creación de gadgets propios utilizando una API dispuesta para ello. Los gadgets pueden ser recolocados y dispuestos en pestañas. Adicionalmente se permite su búsqueda y catalogación. Entre sus características principales se puede distinguir:
Características
- Funcionamiento a través de Gadgets
- Tipos de gadget:
- Feed RSS para sindicación de contenidos.
- iCal para compartición de calendarios.
- Podcast para sindicación de audio y vídeo.
- Creación de gadgets propios.
- Características técnicas:
- Creación mediante el uso de XHTML + CSS + JavaScript
- Utilización del API UWA que permite compatibilidad con Google IG, Apple Dashboard y Opera Widgets.
- Funcionalidades para comunicación con orígenes de datos Web vía asíncrona (AJAX)
- Obtención directa de feeds RSS
- Obtención de datos en texto plano
- Obtención de datos en formato XML
- Obtención de datos en formato JSON
- Permite la ejecución de los gadgets en solitario (sin necesidad de plataforma NetVibes) a efectos de pruebas.
- Utilización de Javascript limitada.
- Permite la especificación de preferencias para cada gadget
- Necesario el uso de navegador web salvo en el caso de Apple Dashboard
- Funcionalidades para comunicación con orígenes de datos Web vía asíncrona (AJAX)
- Tipos de gadget:
- Presentación de gadgets en pantalla
- Necesario uso de navegador Web
- Distribución en pestañas
- Recolocación en pantalla en rejilla con número configurable de columnas
- Permite el uso de atajos de teclado
- Funcionalidades de búsqueda y catalogado de gadgets
- Catalogado de gadgets mediante 'ecosistemas'
- Búsqueda de gadgets
- Distribución en categorías (fijas, establecidas por NetVibes)
- Agrupación de gadgets tipo feed RSS con información común en 'Universos'.
- Catalogado de gadgets mediante 'ecosistemas'
Valoración
Teniendo en cuenta las características descritas para la plataforma NetVibes se puede concluir lo siguiente:
La plataforma NetVibes permite la creación de gadgets mediante una infraestructura propia basada en el API UWA, permitiendo la reutilización de dichos gadgets en otras plataformas. El API ofrece una forma estructurada de crear gadgets que funcionan individualmente. La plataforma provee de la capacidad de representación conjunta de los gadgets, colocación y catalogación.
Sin embargo las capacidades de uso de JavaScript están reducidas y no se permite la comunicación entre gadgets. Además no se ofrece ningún tipo de información o implementación que sirva de referencia de los servicios de back-end con los que se comunicarían los gadgets. Esto implica que en el caso particular de la creación de gadgets con el propósito de la creación de un TPV haya que diseñar cómo serán los servicios que se consuman, requiriendo un esfuerzo adicional y limitando la posible reutilización.
Las limitaciones anteriormente mencionadas hacen necesario que toda la lógica de comunicación y estado deba de ser almacenada en servidores web propios, de forma que dicha información pueda ser accedida mediante los gadgets. Además, la plataforma no ofrece mecanismos de seguridad ni de aislamiento del entorno de ejecución (el navegador), que permitan cumplir algunos de los requisitos de los casos de uso descritos para PYME y Gran Empresa.
Por lo tanto, la plataforma NetVibes proporciona al menos unas funcionalidades mínimas que pueden ser aprovechadas para la creación de los gadgets en el caso de uso de PYME, si bien existirán algunas limitaciones que deberían de ser cubiertas por la plataforma final. La implementación inicial de los gadgets servirá además para pulir el conjunto de requisitos que deberá soportar la plataforma EzWeb.
MyYahoo
Se trata de una plataforma mashup de tipo presentacional con un funcionamiento a través de 'Módulos' (tipo GoogleIG). Permite el uso de módulos de tipo sindicación (feeds RSS) y de módulos de servicios ligeramente más avanzados creados por Yahoo. Permite la personalización de la página principal mediante la colocación de los diferentes módulos. Entre sus características principales se puede distinguir:
Características
- Funcionamiento a través de Módulos
- Tipos de Módulos
- Feed RSS para sindicación de contenidos
- Módulos con otro tipo de servicios creados por Yahoo (horóscopo, tiempo, etc)
- Características técnicas
- Agregación de feeds RSS
- Tipos de Módulos
- Presentación de gadgets en pantalla
- Necesario uso de navegador Web
- Distribución en pestañas
- Recolocación en pantalla en rejilla con número configurable de columnas
- Funcionalidades de búsqueda y catalogado de Módulos
- Catalogado de Módulos
- Búsqueda
- Distribución en categorías (fijas, establecidas por Yahoo)
- Posibilidad de agregación de feeds RSS externos
- Catalogado de Módulos
Valoración
Teniendo en cuenta las características descritas para la plataforma My Yahoo se puede concluir lo siguiente: La plataforma MyYahoo sólo permite el uso de servicios desarrollados por la propia Yahoo y la agregación y sindicación de feeds RSS propios. Carece de la posibilidad de integrar módulos propios con funcionalidades más allá de la sindicación de contenidos, con lo que no cumple los requisitos mínimos para el desarrollo de un TPV sobre la plataforma. Dentro de la plataforma Yahoo existen también tecnologías de gadgets pero orientadas a su uso en escritorio y no a su utilización mediante mashup Web.
PageFlakes
Se trata de una plataforma mashups, basada en Ajax, similar a NetVibes en funcionamiento y en aspecto, sin embargo más avanzada en lo que a funcionalidades y diseño se refiere.
PageFlakes está organizada en solapas o pestañas (tabs), permitiendo crear escritorios múltiples a los que podemos acceder a través de dichas tabs, cada tab contiene a modo de agregador diversos servicios (flakes) previamente definidos por el usuario. Además de la opción obligada de consultar los feeds, pone a disposición de los desarrolladores, APIS para que hagan nuevos módulos (JSP).
Características
- Funcionamiento a través de Flakes
- Tipos de flakes:
- Feed RSS para sindicación de contenidos.
- Creación de flakes propios.
- Podcast para sindicación de audio y vídeo.
- Características técnicas:
- Creación mediante el uso de XHTML + CSS + JavaScript
- Funcionalidades para comunicación con orígenes de datos Web vía asíncrona (AJAX)
- Agregación de feeds RSS
- Ejecución de los flakes en solitario.
- Especificación de preferencias para cada flakes.
- Presentación de flakes en pantalla
- Necesario uso de navegador Web
- Distribución en pestañas
- Recolocación en rejilla con número configurable de columnas
- Tipos de flakes:
- Funcionalidades de búsqueda y catalogado de flakes
- Búsqueda de flakes
- Agrupación de flakes tipo feed RSS
Valoración
Teniendo en cuenta las características descritas para la plataforma PageFlakes se puede concluir lo siguiente:
La plataforma PageFlakes permite la creación estructurada de flakes que funcionan individualmente, mediante una infraestructura propia basada en el API, permitiendo la reutilización de dichos flakes en otras plataformas. PageFlakes provee de la capacidad de representación conjunta de los flakes, colocación,...
Sin embargo no se ofrece ningún tipo de información acerca de los servicios back-end con los que se comunicarán los flakes. Lo que implica un esfuerzo adicional con el propósito de la creación de flakes para un TPV.
Esta plataforma proporciona funcionalidades suficientes aprovechables para la creación inicial de flakes en el caso de uso de PYME, con la finalidad de cumplir más adelante los requisitos que deberá soportar la plataforma EzWEb.
POSH de Portaneo
La plataforma POSH es un portal personalizable al estilo de Netvibes e IGoogle, creado mediante HTML, AJAX y MySQL. Permite el uso de módulos (gadgets) previamente creados, o bien, crear nuestros propios gadgets mediante su correspondiente API. Se pueden distribuir los gadgets por pestañas y ubicar éstos dentro de la página de forma libre. Otra funcionalidad es la capacidad de añadir funcionalidades al sistema mediante addons, como por ejemplo un reproductor mp3 en flash. Es un software libre distribuido bajo la licencia GNU General Public License Entre sus características principales se puede distinguir:
Características
- Funcionamiento a través de Módulos
- Tipos de módulos:
- Sindicación RSS.
- Creación de módulos propios.
- Características técnicas:
- Uso de Javascrip + XHTML + CSS para los módulos.
- Uso de PHP, AJAX y MySQL para el portal.
- Tipos de módulos:
- Presentación de gadgets en pantalla
- Necesidad de un navegador web.
- Uso de pestañas.
- Distribución flexible por la pantalla.
- Posibilidad de configurar el número de columnas
- Funcionalidades de catalogado y búsqueda de módulos
- Los módulos están ordenados por categorías.
- Se permite la realización de búsquedas
Valoración
Aunque la plataforma está en una fase de desarrollo preliminar a las anteriormente comentadas, con distintos detalles por mejorar (por ejemplo, una mejor documentación sobre cómo crear módulos y un mejor sistema de clasificación de los mismos), resulta muy interesante el hecho de poder disponer del código. La plataforma está creada con PHP, AJAX y MySQL. El código está disponible en la siguiente URL: http://www.portaneo.com/solutions/en/opensource_development.php
El único requisito necesario para instalarlo es disponer de un servidor MySQL y un servidor web debidamente configurado.
Implementación
Para la plataforma NetVibes se han desarrollado los gadgets de ‘Búsqueda de Artículos’ y ‘Gestión de artículos’ especificados en el apartado D.5.1.2 intentando cumplir al máximo los requisitos establecidos con las posibilidades que aporta esta plataforma. El contenido de los gadgets de NetVibes se encuentra en ficheros HTML. Se ha utilizado PHP en el servidor para el manejo de la base de datos
Implementación del gadget "Búsqueda de artículos" en NetVibes
La funcionalidad del gadget está desarrollada en: http://ezweb.treelogic.com/widgets/buscaProd.html
- Se proporciona una lista de artículos basándose en el criterio de búsqueda.
- El mismo criterio se utiliza para buscar en todos los campos más representativos del artículo.
- La modificación del criterio de búsqueda genera una búsqueda instantánea.
- La búsqueda se realiza sin ser necesario pulsar ninguna tecla ni botón.
- El criterio de búsqueda esta formado por la conjunción copulativa de todas las palabras introducidas.
- Al realizar una búsqueda de artículos se permite exportar los datos de cada artículo a un fichero XML.
Inconvenientes: El tiempo de respuesta depende de la ubicación del servidor con la BBDD. Además la API UWA de NetVibes sólo proporciona funciones asíncronas, por lo que los tiempos de respuesta al mostrar los resultados pueden variar.
Implementación del gadget "Gestión de artículos" en NetVibes
La funcionalidad del gadget está desarrollada en: http://ezweb.treelogic.com/widgets/gestionArticulos.html
- Alta de artículo
- Para realizar un alta deberemos pulsar en la pestaña “Alta”.
- El identificador del artículo a dar de alta puede ser creado de forma manual, siempre y cuando no esté ocupado ya, o automática. En este último caso bastará con dejar en blanco el campo “Producto” del formulario.
- Todos los campos del formulario deberán ser rellenados, excepto el identificador de producto, para que el alta sea correcto.
- Se podrá dar de alta un artículo que anteriormente haya sido dado de baja.
- Baja de artículo
- Para realizar una baja deberemos pulsar en la pestaña “Baja”.
- Se podrá dar de baja un artículo sin que sea eliminado del sistema.
- Se podrá eliminar un artículo definitivamente del sistema, una vez haya sido dado de baja.
- Modificación de artículo
- Para realizar una modificación en un artículo deberemos pulsar la pestaña “Modificación”.
- En primer lugar habrá de buscar el artículo que se quiera modificar.
- Los datos del artículo a modificar se mostrarán en el formulario pero no se podrán editar.
- Para editar los datos del artículo primero se deberá pulsar en la casilla “Bloquear para modificación” con el fin de bloquear el artículo y que ningún otro usuario pueda modificarlo.
- Una vez realizados los cambios se pulsará el botón “Modificar” que automáticamente desbloqueará el artículo una vez modificado.
- Si no se desease aplicar los cambios realizados, bastará con desmarcar la casilla “Bloquear para modificación” antes de pulsar “Modificar”.
- General en todas las pestañas
- Se podrán realizar búsquedas de artículos a partir de su identificador con el fin de comprobar si un artículo existe ya en el sistema. Para ello se deberá pulsar el botón situado a continuación del campo “Producto”.
- Cuando se realiza una búsqueda a partir de un identificador de artículo, si éste existe se rellenarán automáticamente todos los campos del formulario.
- Existe la opción de buscar también un identificador de Familia o Sección, del mismo modo que con un artículo.
Se permite la exportación de los datos de un artículo a un fichero XML simplemente con pulsar el botón “XML”.
Instrucciones de uso
"Búsqueda de artículos" en la plataforma NetVibes
El interfaz de usuario es lo más simple posible y consta de:
- Campo de texto donde se introduce el criterio de búsqueda.
- Parrilla de datos donde se muestran los resultados.
Debido a las limitaciones de esta plataforma no se pueden cumplir todos los requisitos establecidos:
- No es posible definir opciones de teclado para realizar el movimiento por la parrilla y seleccionar registros.
"Gestión de artículos" en la plataforma NetVibes
El interfaz de usuario dispone de los siguientes elementos para proporcionar las funcionalidades comentadas en el apartado "Implementación":
- Etiquetas con el nombre de los campos a rellenar
- Campos de texto donde introducir los datos.
- Botones de búsqueda de Productos, Familias y Secciones.
- Distintas pestañas de navegación, una para cada acción sobre los artículos:
- Alta
- Baja
- Modificación
Debido a las limitaciones de esta plataforma no se pueden cumplir todos los requisitos establecidos:
- No es posible definir opciones de teclado para moverse a través de las pestañas y los diferentes campos y botones del formulario.
- No es posible la importación de datos a partir de ficheros dado que Javascript no permite el manejo de los mismos.
Implementación sobre iGoogle
|
NOTA - A día 19 de diciembre de 2007 Google ha pasado los gadgets de tipo html-inline a estado deprecated (es decir, los ha marcado como a abandonar) aduciendo dificultad en su mantenimiento a causa de potenciales riesgos en la seguridad. Esto ha provocado que muchos gadgets a nivel mundial dejen de ser operativos. El cambio ha afectado a los gadgets desarrollados dentro de la Actividad 5, que incluyen requisitos de inter-comunicación (tal y como queda explicado dentro de este mismo documento)y que necesitan ser declarados como html-inline para poder funcionar correctamente. |
|---|
Valoración de la plataforma
Para el desarrollo final de los gadgets de PYME se ha escogido iGoogle[1] por ser la plataforma de gadgets que menos restricciones impone en el uso de Javascript, etc. Sin embargo, cuenta con importantes limitaciones que reducen la funcionalidad final de los gadgets y que deberán ser solventadas en la plataforma EzWeb:
- No permite realizar ni peticiones POST, PUT ni DELETE.
- No permite negociar el tipo de contenido que debe devolver el servidor cuando se realiza una petición AJAX (siempre se realizan peticiones con Accept HTML).
- No provee controles avanzados que permitan una interacción rica (es necesario realizar integración con librerías JavaScript como Dojo, Ext o YUI.
- Capacidades de login sólo a través de Cookies
- Imposibilidad de conectividad local (salvo que el servidor local se exponga a través de Web o que se utilicen servidores intermedios)
- Las funcionalidades de intercomunicación entre gadgets aún estan en base Beta y tienen errores (por esta razón se ha utilizado un sistema de intercomunicación basado en una pizarra en la que se publican datos)
- No tiene API de acceso por teclado para seleccionar widgets.
Muchos de los problemas pueden ser solventados si se amplía el API AJAX que realiza peticiones para que incluya todos los verbos y que además permita indicar el tipo de contenido a servir.
Entorno de servidor
Para el desarrollo de los prototipos de widgets se ha implementado una aplicación prototipo REST[2] sobre la plataforma Java CETIA4[3]. Esta plataforma permite un mapeo y manejo sencillo de los verbos[4] y URIs que son utilizados en REST, de forma que supone una aproximación válida a la solución que podría implantarse en el servidor en un caso real.
Desde CETIA4 se distinguen las representaciones de cliente en función de la cabecera 'Accept' de HTTP, sirviendo HTML o XML en función del valor de la cabecera en la petición. Sin embargo, para el prototipo de widgets sólo se han especificado las representaciones en XML[5] ya que son las más propicias para su uso dentro de una plataforma de mashup como iGoogle.
Dentro de las infraestructuras REST todas las operaciones son realizadas mediante los verbos GET, PUT, POST y DELETE. En la siguiente sección se describen los mapeos actualmente utilizados.
Operaciones permitidas
| operacion | direccion |
| Articulos | |
| Listar articulos | GET /articulos |
| Listar articulos
(inf. extendida) | GET /articulos?extended |
| Buscar articulos | GET /articulos?filter=cadena |
| Filtrar articulos | GET /articulos?campo=cadena (ej id=1 ó descripcion=cerveza) |
| Listar articulo | GET /articulos/{idArticulo} |
| Insertar articulo | PUT /articulos |
| Modificar articulo | POST /articulos/{idArticulo} |
| Borrar articulo | DELETE /articulos/{idArticulo} |
| Familias | |
| Listar familias | GET /familias |
| Listar familias
(inf. extendida) | GET /familias?extended |
| Buscar familias | GET /familias?filter=cadena |
| Filtrar familias | GET /familias?campo=cadena (ej id=1 ó descripcion=cerveza) |
| Listar familia | GET /familias/{idFamilia} |
| Secciones | |
| Listar secciones | GET /secciones |
| Listar secciones
(inf. extendida) | GET /secciones?extended |
| Buscar secciones | GET /secciones?filter=cadena |
| Filtrar secciones | GET /secciones?campo=cadena (ej id=1 ó descripcion=cerveza) |
| Listar seccion | GET /secciones/{idSeccion} |
| TiposIVA | |
| Listar tiposIVA | GET /tiposIVA |
| Listar tiposIVA
(inf. extendida) | GET /tiposIVA?extended |
| Buscar tiposIVA | GET /tiposIVA?filter=cadena |
| Filtrar tiposIVA | GET /tiposIVA?campo=cadena (ej id=1 ó descripcion=cerveza) |
| Listar tipo IVA | GET /tiposIVA/{idTipoIva} |
| Tickets | |
| Listar tickets | GET /tickets |
| Listar tickets
(inf. extendida) | GET /tickets?extended |
| Buscar tickets | GET /tickets?filter=cadena |
| Filtrar tickets | GET /tickets?campo=cadena (ej ticketFinalizado=false) |
| Listar un ticket | GET /tickets/{idTicket} |
| Borrar un ticket | DELETE /tickets/{idTicket} |
| Insertar un ticket | PUT /tickets |
| Modificar un ticket (sólo para el estado) | POST /ticket/{idTicket}?ticketFinalizado=true |
| Líneas de ticket | |
| Listar líneas de un ticket | GET /tickets/{idTicket}/lineas_ticket |
| Listar líneas de un ticket
(inf. extendida) | GET /tickets/{idTicket}/lineas_ticket?extended |
| Obtener una linea en particular | GET /tickets/{idTicket}/lineas_ticket/{linea} |
| Insertar una linea | PUT /tickets/{idTicket}/lineas_ticket?articulo={idArticulo}&cantidad={cantidad} |
| Borrar una linea | DELETE /tickets/{idTicket}/lineas_ticket/{linea} |
| Modificar una linea (sólo la cantidad} | POST /tickets/{idTicket}/lineas_ticket/{linea}?cantidad={cantidad} |
| Cobros | |
| Listar cobros de un ticket | GET /tickets/{idTicket}/cobros |
| Listar cobros de un ticket
(inf. extendida) | GET /tickets/{idTicket}/cobros?extended |
| Obtener un cobro para una modalidad de pago en particular | GET /tickets/{idTicket}/cobros/{modalidadPago} |
| Insertar un cobro | PUT /tickets/{idTicket}/cobros?articulo={idArticulo}&cantidad={cantidad} |
| Borrar un cobro | DELETE /tickets/{idTicket}/cobros/{modalidadPago} |
| Modificar un cobro (sólo el importe} | POST /tickets/{idTicket}/cobros/{modalidadPago}?importe={importe} |
| Modalidades Pago | |
| Listar modalidades | GET /modalidadesPago |
| Listar modalidades
(inf. extendida) | GET /modalidadesPago?extended |
| Buscar modalidades | GET /modalidadesPago?filter=cadena |
| Listar una modalidad | GET /modalidadesPago/{idModalidad} |
Para el caso de modificación e inserción de artículos podrían llegar a cambiarse los verbos, de esta forma insertar pasaría a ser con POST (ya que no es idempotente) y modificar con PUT (que sí es idempotente)
Para forzar la negociación de contenidos y que se devuelva XML, la petición puede llevar el parámetro _type=ws (p.ej. GET /articulos?_type=ws)
Para forzar una inserción, modificación o borrado a través de GET (por ejemplo por que exista la imposibilidad de utilizar PUT, POST o DELETE como en el caso de iGoogle) estos se pueden lograr utilizando _method=insert, _method=update o _method=delete.
Representaciones de cliente
Para las representaciones de cliente se muestran tan sólo aquellas en XML
| GET /articulos (opcionalmente se puede usar busqueda o filtrado) | |
<articulos href="http://idi.fundacionctic.org/EzWeb/articulos"> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/1">1</articulo> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/2">2</articulo> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/3">3</articulo> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/4">4</articulo> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/5">5</articulo> </articulos> | |
| GET /articulos?extended (opcionalmente se puede usar busqueda o filtrado) | |
<articulos href="http://idi.fundacionctic.org/EzWeb/articulos"> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/1"> <id>1</id> <descripcion>Chorizo</descripcion> <seccion href="http://idi.fundacionctic.org/EzWeb/secciones/2">2</seccion> <familia href="http://idi.fundacionctic.org/EzWeb/familias/1">1</familia> <pvp>1.5</pvp> <iva href="http://idi.fundacionctic.org/EzWeb/tiposIVA/1">1</iva> <rutaImagen href="http://idi.fundacionctic.org/EzWeb/static/images/800021601_arena_de_gatos.jpg"> 800021601_arena_de_gatos.jpg </rutaImagen > <bloqueado>false</bloqueado> <enBaja>false</enBaja> <eans> <ean>800021601</ean> </eans> </articulo> <articulo href="http://idi.fundacionctic.org/EzWeb/articulos/2"> <id>2</id> <descripcion>Filete</descripcion> <seccion href="http://idi.fundacionctic.org/EzWeb/secciones/1">1</seccion> <familia href="http://idi.fundacionctic.org/EzWeb/familias/1">1</familia> <pvp>2.0</pvp> <iva href="http://idi.fundacionctic.org/EzWeb/tiposIVA/1">1</iva> <rutaImagen href="http://idi.fundacionctic.org/EzWeb/static/images/800021601_arena_de_gatos.jpg"> 800021601_arena_de_gatos.jpg </rutaImagen > <bloqueado>false</bloqueado> <enBaja>true</enBaja> <eans> <ean>800021601</ean> </eans> </articulo> <...> </articulos> | |
| GET /articulos/{idArticulo} | |
<articulo href="http://idi.fundacionctic.org/EzWeb/articulos/{idArticulo}">
<id>{idArticulo}</id>
<descripcion>Chorizo</descripcion>
<seccion href="http://idi.fundacionctic.org/EzWeb/secciones/2">2</seccion>
<familia href="http://idi.fundacionctic.org/EzWeb/familias/1">1</familia>
<pvp>1.5</pvp>
<iva href="http://idi.fundacionctic.org/EzWeb/tiposIVA/1">1</iva>
<rutaImagen href="http://idi.fundacionctic.org/EzWeb/static/images/800021601_arena_de_gatos.jpg">
800021601_arena_de_gatos.jpg
</rutaImagen >
<bloqueado>false</bloqueado>
<enBaja>true</enBaja>
<eans>
<ean>800021601</ean>
</eans>
</articulo>
| |
| PUT /articulos | |
<response>
<status>OK</status>
<articulo
href="http://idi.fundacionctic.org/EzWeb/articulos/{newId}">
{newId}
</articulo>
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| POST /articulos/{idArticulo} | |
<response>
<status>OK</status>
<articulo
href="http://idi.fundacionctic.org/EzWeb/articulos/{idArticulo}">
{idArticulo}
</articulo>
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| DELETE /articulos/{idArticulo} | |
<response> <status>OK</status> </response> | <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| GET /familias (opcionalmente se puede usar busqueda o filtrado) |
<familias href="http://idi.fundacionctic.org/EzWeb/familias"> <familia href="http://idi.fundacionctic.org/EzWeb/familias/1">1</familia> <familia href="http://idi.fundacionctic.org/EzWeb/familias/2">2</familia> </articulos> |
| GET /familias?extended (opcionalmente se puede usar busqueda o filtrado) |
<familias href="http://idi.fundacionctic.org/EzWeb/familias"> < familia href="http://idi.fundacionctic.org/EzWeb/familias/1"> <id>1</id> <descripcion>Ternera</descripcion> </familia> <...> </familias> |
| GET /familias/{idFamilia} |
<familia href="http://idi.fundacionctic.org/EzWeb/familias/{idFamilia}">
<id>{idFamilia}</id>
<descripcion>Ternera</descripcion>
</familia>
|
| GET /secciones (opcionalmente se puede usar busqueda o filtrado) |
<secciones href="http://idi.fundacionctic.org/EzWeb/secciones"> <seccion href="http://idi.fundacionctic.org/EzWeb/secciones/1">1</seccion> < seccion href="http://idi.fundacionctic.org/EzWeb/secciones/2">2</seccion> </articulos> |
| GET /secciones?extended (opcionalmente se puede usar busqueda o filtrado) |
<secciones href="http://idi.fundacionctic.org/EzWeb/secciones"> < seccion href="http://idi.fundacionctic.org/EzWeb/secciones/1"> <id>1</id> <descripcion>Carnicería</descripcion> </seccion> <...> </secciones> |
| GET /secciones/{idseccion} |
<seccion href="http://idi.fundacionctic.org/EzWeb/secciones/{idseccion}">
<id>{idseccion}</id>
<descripcion>Carnicería</descripcion>
</seccion>
|
| GET /tiposIVA (opcionalmente se puede usar busqueda o filtrado) |
<tiposIVA href="http://idi.fundacionctic.org/EzWeb/tiposIVA"> <tipoIVA href="http://idi.fundacionctic.org/EzWeb/tiposIVA/1">1</tipoIVA> < tipoIVA href="http://idi.fundacionctic.org/EzWeb/tiposIVA/2">2</tipoIVA> </tiposIVA> |
| GET /tiposIVA?extended (opcionalmente se puede usar busqueda o filtrado) |
< tiposIVA href="http://idi.fundacionctic.org/EzWeb/tiposIVA"> < tipoIVA href="http://idi.fundacionctic.org/EzWeb/tiposIVA/1"> <id>1</id> <valor>0.16</valor> <re>1</re> </tipoIVA> <...> </tiposIVA> |
| GET /tiposIVA/{idtipoIVA} |
<tipoIVA href="http://idi.fundacionctic.org/EzWeb/tiposIVA/{idtipoIVA}">
<id>{idtipoIVA}</id>
<valor>0.16</valor>
<re>1</re>
</tipoIVA>
|
| GET /tickets (opcionalmente se puede usar busqueda o filtrado) | |
<tickets href="http://idi.fundacionctic.org/EzWeb/tickets"> <ticket href="http://idi.fundacionctic.org/EzWeb/tickets/1">1</ticket> <ticket href="http://idi.fundacionctic.org/EzWeb/tickets/2">2</ticket> <ticket href="http://idi.fundacionctic.org/EzWeb/tickets/3">3</ticket> <ticket href="http://idi.fundacionctic.org/EzWeb/tickets/4">4</ticket> </tickets> | |
| GET /tickets?extended (opcionalmente se puede usar busqueda o filtrado) | |
<tickets href="http://idi.fundacionctic.org/EzWeb/tickets"> <ticket href="http://idi.fundacionctic.org/EzWeb/tickets/1"> <supermercado>Gijon</supermercado> <caja>Caja1</caja> <numeroTicket>1</numeroTicket> <cliente>Cliente1</cliente> <fecha>2007-12-13</fecha> <hora>10:38:17</hora> <importe>10.52</importe> <ticketFinalizado>false</ticketFinalizado> <lineasTicket href="http://idi.fundacionctic.org/EzWeb/tickets/1/lineas_ticket">lineas_ticket</lineasTicket> <cobros href="http://idi.fundacionctic.org/EzWeb/tickets/1/cobros">cobros</cobros> </ticket> <ticket href="http://idi.fundacionctic.org/EzWeb/tickets/2"> <supermercado>Gijon</supermercado> <caja>Caja1</caja> <numeroTicket>2</numeroTicket> <cliente>Cliente1</cliente> <fecha>2007-12-15</fecha> <hora>16:34:23</hora> <importe>0.0</importe> <ticketFinalizado>false</ticketFinalizado> <lineasTicket href="http://idi.fundacionctic.org/EzWeb/tickets/2/lineas_ticket">lineas_ticket</lineasTicket> <cobros href="http://idi.fundacionctic.org/EzWeb/tickets/2/cobros">cobros</cobros> </ticket> <...> </tickets> | |
| GET /tickets/{idTicket} | |
<ticket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}">
<supermercado>Gijon</supermercado>
<caja>Caja1</caja>
<numeroTicket>{idTicket}</numeroTicket>
<cliente>Cliente1</cliente>
<fecha>2007-12-13</fecha>
<hora>10:38:17</hora>
<importe>10.52</importe>
<ticketFinalizado>false</ticketFinalizado>
<lineasTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket">lineas_ticket</lineasTicket>
<cobros href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros">cobros</cobros>
</ticket>
| |
| PUT /tickets | |
<response>
<status>OK</status>
<ticket href="http://idi.fundacionctic.org/EzWeb/tickets/{newIdTicket}">{idTicket}</ticket>
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| POST /tickets/{idTicket} | |
<response>
<status>OK</status>
<ticket
href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}">
{idTicket}
</ticket>
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| DELETE /tickets/{idTicket} | |
<response> <status>OK</status> </response> | <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| GET /tickets/{idTicket}/lineas_ticket | |
<lineasTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket">
<lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket/1">1</lineaTicket>
<lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket/2">2</lineaTicket>
</lineasTicket>
| |
| GET /tickets/{idTicket}/lineas_ticket?extended | |
<lineasTicket href="http://idi.fundacionctic.org/EzWeb/tickets/1/lineas_ticket">
<lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket/1">
<supermercado>Gijon</supermercado>
<caja>Caja1</caja>
<numeroTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}">{idTicket}</numeroTicket>
<linea>1</linea>
<pvp>1.45</pvp>
<cantidad>4</cantidad>
<importe>5.8</importe>
<articulo href="http://idi.fundacionctic.org/EzWeb/articulos/1">
<id>1</id>
<descripcion>Arena de gatos ALIMERKA bolsas 5kg</descripcion>
<pvp>1.45</pvp>
<eans>
<ean>800021601</ean>
</eans>
</articulo>
</lineaTicket>
<lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket/2">
<supermercado>Gijon</supermercado>
<caja>Caja1</caja>
<numeroTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}">{idTicket}</numeroTicket>
<linea>2</linea>
<pvp>1.18</pvp>
<cantidad>4</cantidad>
<importe>4.72</importe>
<articulo href="http://idi.fundacionctic.org/EzWeb/articulos/4">
<id>4</id>
<descripcion>Croquetas de jamon artesanas ALIMERKA bolsa 500gr</descripcion>
<pvp>1.18</pvp>
<eans>
<ean>800031401</ean>
</eans>
</articulo>
</lineaTicket>
<...>
</lineasticket>
| |
| GET /tickets/{idTicket}/lineas_ticket/{linea} | |
<lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket/{linea}">
<supermercado>Gijon</supermercado>
<caja>Caja1</caja>
<numeroTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}">{idTicket}</numeroTicket>
<linea>{linea}</linea>
<pvp>1.18</pvp>
<cantidad>4</cantidad>
<importe>4.72</importe>
<articulo href="http://idi.fundacionctic.org/EzWeb/articulos/4">
<id>4</id>
<descripcion>Croquetas de jamon artesanas ALIMERKA bolsa 500gr</descripcion>
<pvp>1.18</pvp>
<eans>
<ean>800031401</ean>
</eans>
</articulo>
</lineaTicket>
| |
| PUT /tickets/{idTicket}/lineas_ticket | |
<response>
<status>OK</status>
<lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/lineas_ticket/{newLinea}">
<linea>{newLinea}</linea>
<importe>2.3</importe>
<cantidad>2</cantidad>
<articulo href="http://idi.fundacionctic.org/EzWeb/articulos/3">
<id>3</id>
<descripcion>Jamon cocido extra en lochas ALIMERKA 80gr</descripcion>
<pvp>1.15</pvp>
<eans>
<ean>28100801</ean>
</eans>
</articulo>
</lineaTicket>
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| POST /tickets/{idTicket}/lineas_ticket/{linea} | |
<response> <status>OK</status> <lineaTicket href="http://idi.fundacionctic.org/EzWeb/tickets/1/lineas_ticket/1">1</lineaTicket> </response> | <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| DELETE /tickets/{idTicket}/lineas_ticket/{linea} | |
<response> <status>OK</status> </response> | <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| GET /tickets/{idTicket}/cobros | |
<cobros href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros">
<cobro href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/1">Contado</cobro>
<cobro href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/2">Tarjeta</cobro>
</cobros>
| |
| GET /tickets/{idTicket}/cobros?extended | |
<cobros href="http://idi.fundacionctic.org/EzWeb/tickets/66/cobros">
<cobro href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/1">
<fecha>2007-12-21</fecha>
<hora>10:06:02</hora>
<importe>10.0</importe>
<modalidadPago href="http://idi.fundacionctic.org/EzWeb/modalidadespago/1">Contado</modalidadPago>
</cobro>
<cobro href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/2">
<fecha>2007-12-21</fecha>
<hora>10:06:02</hora>
<importe>8.4</importe>
<modalidadPago href="http://idi.fundacionctic.org/EzWeb/modalidadespago/2">Tarjeta</modalidadPago>
</cobro>
<...>
</cobros>
| |
| GET /tickets/{idTicket}/cobros/{idModalidadPago} | |
<cobro href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/{idModalidadPago}">
<fecha>2007-12-21</fecha>
<hora>10:06:02</hora>
<importe>10.0</importe>
<modalidadPago href="http://idi.fundacionctic.org/EzWeb/modalidadespago/{idModalidadPago}">Contado</modalidadPago>
</cobro>
| |
| PUT /tickets/{idTicket}/cobros | |
<response>
<status>OK</status>
<cobrohref="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/{idModalidadPago}" />
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| POST /tickets/{idTicket}/cobros/{idModalidadPago} | |
<response>
<status>OK</status>
<cobro href="http://idi.fundacionctic.org/EzWeb/tickets/{idTicket}/cobros/{idModalidadPago}">{idModalidadPago}</cobro>
</response>
| <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
| DELETE /tickets/{idTicket}/cobros/{idModalidadPago} | |
<response> <status>OK</status> </response> | <response> <status>ERROR</status> <message>Mensaje error</message> </response> |
Gadgets
Para la plataforma de IGoogle se han desarrollado los gadgets dispuestos en el apartado búsqueda de artículos de D.5.1.2 , lista de compra de D.5.1.2, gestión de cobros de D.5.1.2 y gestión de tickets de D.5.1.2.
Gadget Visualización de imagen de artículo
- Este gadget muestra la imagen del artículo que se haya seleccionado a través del gadget de Listado de artículos.
- El gadget esta a la escucha de datos de un artículo para mostrar su imagen.
- Podría ser conectado con cualquier otro gadget que publicase datos de artículo.
Gadget Gestión de datos de artículo
- Este gadget permite gestionar los datos de los artículos, admitiendo operaciones de inserción, modificación y borrado.
- El gadget se puede comunicar con gadgets que reciban datos de un artículo, como por ejemplo el de búsquedas y listados.
- El gadget está a la escucha de datos de artículos también, de forma que pueda presentar los datos que se le envíen, como pudiesen ser los de un artículo seleccionado dentro del gadget de búsquedas.
- El gadget permite la inserción de un artículo a través del boton 'Nuevo', que inicializa el gadget y desbloquea los campos para permitir la edición y guardar posteriormente sus datos a través del botón 'Grabar'.
- Para modificar un artículo primero hay que obtener sus datos, los cuales provendrán de otros gadgets. Una vez seleccionado se deberá desbloquear y editar para guardar posteriormente sus datos a través del botón 'Grabar'.
Gadget Listado y búsqueda de artículos
- Este gadget permite realizar búsquedas sobre los artículos de la base de datos.
- El gadget está a la escucha de restricciones sobre los criterios de búsqueda. Estas restricciones pueden ser enviadas desde otros gadgets y pueden ser borradas a través del botón 'Borrar restricciones'.
- El gadget puede filtrar los resultados de búsqueda a través de un campo de entrada. La modificación de ese campo provocará que se realice una búsqueda entre los campos más representativos de los artículos (dicha búsqueda podrá estar ya pre-filtrada a través de las restricciones anteriormente comentadas).
- Los resultados de la búsqueda pueden ser navegados con el teclado a través del control de rejilla.
- Los resultados de la búsqueda pueden ser paginados mediante un desplegable de forma que su navegación sea más sencilla.
- La rejilla puede ser ordenada mediante un 'clic' en la cabecera de cualquiera de sus columnas.
- Una vez encontrado el artículo adecuado, habrá que seleccionarlo y pulsar 'Intro' para que sus datos se envíen a los gadgets que estén suscritos.
Gadget Gestión de tickets
- Este gadget permite realizar búsquedas sobre los tickets de la base de datos que estén marcados como 'No Finalizados'.
- El gadget puede filtrar los resultados de búsqueda a través de un campo de entrada. La modificación de ese campo provocará que se realice una búsqueda entre los campos más representativos de los artículos.
- Los resultados de la búsqueda pueden ser navegados con el teclado a través del control de rejilla.
- Los resultados de la búsqueda pueden ser paginados mediante un desplegable de forma que su navegación sea más sencilla.
- La rejilla puede ser ordenada mediante un 'clic' en la cabecera de cualquiera de sus columnas.
- Una vez encontrado el ticket adecuado, habrá que seleccionarlo y pulsar 'Intro' para que sus datos se envíen a los gadgets que estén suscritos (por ejemplo el gadget de gestión de tickets).
Gadget Lista de la compra
- Este gadget permite gestionar los datos de los tickets, admitiendo operaciones de inserción y modificación.
- El gadget está a la escucha de datos de tickets , de forma que pueda presentar los datos que se le envíen, como pudiesen ser los de un ticket seleccionado dentro del gadget de gestión de tickets.
- El gadget permite la inserción de un ticket a través del boton 'Nuevo', que inicializa el gadget y desbloquea los campos para permitir la edición y guardar posteriormente sus datos a través del botón 'Fin Venta'.
- Al finalizar un ticket este será anunciado para que otros gadgets, como el de gestión de cobros, puedan trabajar con él.
- En cualquier momento se pueden utilizar los botones de 'Repetir Linea' y 'Eliminar Linea' para hacer más ágil la generación del ticket.
- Para crear una nueva línea sólo habrá que introducir el número de unidades y el ean del producto.
- Este gadget podría beneficiarse de la comunicación con hardware, por ejemplo conectándolo a un escáner de productos.
Gadget Gestión de cobros
- Este gadget permite finalizar un ticket.
- El gadget está a la escucha de datos de un ticket, como pueden ser los que le envíe el gadget de gestión de cobros.
- En el gadget habrá que introducir la cantidad que se desea pagar al contado y automtáticamente se inicializará la que haya que cobrar con tarjeta, introduciendo los cobros correspondientes en la base de datos al pulsar 'Listo' .
Videos de los gadgets
Aquí se muestran videos de algunos de los gadgets en funcionamiento.
Referencias
- ↑ Google gadgets (http://www.google.com/webmasters/gadgets/)
- ↑ R. T. Fielding, Architectural styles and the design of network-based software architectures, Ph.D. thesis, University of California, Irvine, 2000
- ↑ CETIA4 ( https://cetia4.dev.java.net/)
- ↑ R. T. Fielding et al., Hypertext Transfer Protocol -- HTTP/1.1, RFC 2626, 1999
- ↑ Extensible Markup Language (XML) 1.1 (Second Edition) , E. Maler, C. M. Sperberg-McQueen, J. Cowan, J. Paoli, T. Bray, F. Yergeau, Editors, W3C Recommendation, 16 August 2006, http://www.w3.org/TR/2006/REC-xml11-20060816 . Latest version available at http://www.w3.org/TR/xml11/ .











