|
introduction get started articles manual tutorials reference docs case studies knowledge base goodies screenshots demos echoes Carousel zone home forums downloads bugs mailing list |
XUI Zone - articles
XUI rencontre eBay Créer une application de gestion de magasin eBay avec XUI par Guillaume Montel 18-10-2005 Aujourd'hui eBay est un des plus grands fournisseurs de service web avec autant d'utilisateurs actifs. Accrochant un wagon sur cette locomotive d'e-commerce, nous allons démontrer comment le frameworks de XUI peut être employé pour développer des applications puissantes. L'article détaillera également les avantages qu'un framework riche apportent à une plateforme de service web et nous montrerons comment XUI peut aider à résoudre certains les problèmes d'utilisation les plus ennuyants liés aux applications web. Cet article étudie l'eBay Java SDK et le framework XUI. Il discutera sur la manière dont XUI peut aider à réduire la quantité de code nécessaire pour établir une application de gestion de magasin eBay. Introduction L'eBay SDK est une bibliothèque libre et open source pour la construction d'application pour eBay. Le SDK fournit des outils pour les gros vendeurs et utilisateurs d'eBay pour contrôler leur compte et leurs transactions sans employer le site web. En utilisant le SDK il est possible d'établir une grande variété d'applications faites sur commande ou de l'intégrer avec d'autres systèmes. XUI, d'autre part, est également un framework open source pour la construction d'interfaces utilisateurs en Java et XML. C'est à dire, XUI fournit une plateforme pour les applications client qui complète bien les services fournis par le SDK. Parfois les services web sont employés avec une architecture de client léger mais employer ces deux bibliothèque pour développer une application de gestion de magasin eBay, il sera possible d'offrir les outils eBay au vendeur qui seront plus rapides et plus faciles à employer que le site web d'eBay. Objectifs D'abord nous ne nous voulons pas à tout prix construire une application juste pour présenter XUI. Par contre,ce que nous avons voulu c'est une application qui serait vraiment utile seule. Nous avons également voulu une application qui soit extensible de sorte que ses composants puissent être intégrés avec un socle commun à beaucoup d'entreprises. En bref nous avons voulu un cadre pour travailler avec eBay. À un moindre degré nous avons également voulu un cadre qui réduirait une partie de la difficulté de travailler avec les services de l'API d'eBay, une manière de réduire la disparité entre le monde d'eBay et le monde de Java dans lequel XUI réside. D'autres conditions plus faibles ont inclus un désir d'éviter d'être attaché trop étroitement aux nombreuses constantes définies dans l'eBay SDK qui peuvent mener à une sorte de codage en dur. Nous avons estimé que cette sorte de dépendance rendrait l'entretien très difficile que tout ce qui pourrait alléger de tels problèmes serait bon. En termes de fonctionnalité nous avons voulu fournir des dispositifs pour les utilisateurs professionnels d'eBay , par exemple des dispositifs qui les aideraient à installer et administrer des magasins eBay “business to business” plutôt que de faire des ventes uniques . Nous avons également voulu faciliter certains types d'opérations comme rechercher les meilleurs prix d'une gamme des articles. Finalement nous avons voulu construire un moteur pour construire des applications clients d'e-commerce pour eBay, quelque chose qu'un utilisateur d'XUI ou Carousel puissent intègrer un magasin eBay dans un contexte d'e-commerce. La Solution L'eBay store manager a été développé en utilisant la version de XUI 2,0 béta et NetBeans IDE. Grace à XUI, un framworks a été créé qui donne une navigation facile et rapide entre chacune des parties de l'application. En effet, comme que les frame de XUI sont basés sur Java, aucun temps de chargement n'est nécessaire pour la navigation et ainsi le seul retard résulte des appels à eBay. Par exemple, le processus pour vendre un article sous eBay nécessite seulement deux pages de XUI tandis que le même processus a besoin d'au moins de cinq pages sous le site web. Le processus de travailler avec eBay est encore amélioré par la nature même de XUI comme le stockage d'information local. Les aides de stockage local éliminent des appels recursifs aux serveur eBay pour des mises à jour faisant la demande bien plus vive que son ensemble équivalent de pages web. L' eBay Store Manager se compose de deux composants principaux, un pour vendre et l'autre acheter des objets. La seconde appoche s'est rendue nécessaire par le manque d'une api dans l' eBay SDK pour encherir, toutefois en dépit de cette particularité la division n'est pas évident à l'utilisateur de l'eBay store manager. Que XUI fournit-il? Ainsi, le cadre de XUI est une trousse à outils pour réduire la quantité de code nécessaire pour développer une application Swing ou Awt. Il aide à créer les composantes clés dans l'interface graphique, y compris les widgets, le gestionnaire d'événement, les liaisons de données et les règles de validation. Un système basé sur l'XML est employé pour la création de l'interface utilisateur et des divers modèles qui peuvent être appliqués à l'interface utilisateur (UI). D'ailleurs, un éditeur visuel est disponible et fonctionne suivant le principe du Glisser déposer, cet éditeur est un module de Netbeans, ainsi tout le développement d'application avec XUI peut être effectué sur une seule plateforme. Et l'eBay SDK? La plateforme mondialement connu d'e-commerce eBay offre à la communauté pen source une gamme d' API pour développer des application pour eBay. L'api est basé sur le SOAP et les interfaces en Java avec les objets de XML permettent d'isoler le programmeur en Java des détails du bas niveau du SOAP. Des méthodes et appels à eBay sont fournis en grand nombre et vous permettent d'établir une application spécifique avec votre propre interface utilisateur et quelques fonctions pour obtenir des détails non disponibles sous le site Web eBay. D'ailleurs, un environnement de sandbox est donné pour que les déaveloppeur puissent tester leur application avant de se déployer dans l'environnement de production. L'environnement de sandbox est semblable à l'original sauf que les transactions et les articles sont factices. Bien que le SDK soit une bibliothèque open source, vous devez vous inscrire au developer's program d'eBay pour obtenir des clefs d'activation. Sans ces clefs pour la sandbox vous ne pourrez pas faire des appels à eBay. Les clefs sont gratuites et vous avez besoin payez seulement une fois que votre application est finie et travaillante sous l'environnement de production. Néanmoins si votre application est destiné à votre seul usage, vous pourrez effectuer 10000 appels gratuitement à ebay par mois. Un exemple de l'eBay SDK et de XUI L'interface utilisateur pour eBay store manager se construit en utilisant une feuille de style en XML et en lui associant une classe en Java. Le XML pour la page d'acceuil est décrit ci-dessous:
Listing 1 - Welcome.xml
Comme vous pouvez voir la feuille de style en XML est divisée dans trois parties:
La disposition a été indiquée en utilisant des coordonnées absolues dues aux contraintes de temps mais des layout managers sont disponibles dans XUI et seraient probablement une meilleure option en particulier en localisant l'application. La classe associée de Java fournit le code pour l'execution des événements. Ce code pour cette classe Welcome peut être vu ci-dessous:
Listing 2 - Welcome.java
package xui.xoetrope.ebayExample;
import com.ebay.soap.eBLBaseComponents.SiteCodeType;
import net.xoetrope.builder.NavigationHelper;
import net.xoetrope.xui.data.XModel;
import net.xoetrope.xui.data.XBaseModel;
public class Welcome extends NavigationHelper
{
// The XModel are used to organize and transfer your data between each windows
private XModel userModel,siteModel;
/**
* This method when the page associated to this class is created
*/
public void pageCreated()
{
// Initialize the model used
userModel = ( XModel ) rootModel.get("eBay");
siteModel = ( XModel ) rootModel.get("site");
// Initialize the list of value in the siteCombo from the list available in
// the eBay Java SDK
StaticData staticData = new StaticData(SiteCodeType.class, siteModel);
updateBindings();
}
/**
* This method is called when the button “btnConnect” is clicked
*/
public void connect()
{
// Save the different value in the components
saveBoundComponentValues();
// Call eBay
GetEbayTime getTime = new GetEbayTime(userModel);
String time = getTime.getTime();
// Add the date value in the model
XBaseModel timeBaseModel = new XBaseModel( userModel,"officialTime", time );
// Update all the value of the graphic components from the model defined in
// the data block
updateBindings();
}
}
Une grande partie du codage de l'application est typique d'une application de XUI ainsi nous ne demeurerons pas sur ce point plus loin en cet article. La valeur réelle de l'eBay store manger vient, évidemment de l'intégration avec eBay et pour démontrer ceci regardons l'appel à eBay pour obtenir le temps officiel. Pour cette question deux des classes ont été faites:
L'EbayConnection est montré ci-dessous:
Listing 3 - EbayConnection.java
package xui.xoetrope.ebayExample;
import com.ebay.sdk.ApiAccount;
import com.ebay.sdk.ApiContext;
import com.ebay.sdk.ApiCredential;
import com.ebay.sdk.ApiLogging;
import com.ebay.sdk.eBayAccount;
import com.ebay.soap.eBLBaseComponents.SiteCodeType;
import net.xoetrope.xui.data.XModel;
public class EbayConnection
{
/**
* where all the information about the connection are stored
*/
protected ApiContext apiContext=new ApiContext();
/**
* The constructor which build the connection with eBay
* @param connectionModel This is the model where all the information needed for
* the connection are stored
*/
public EbayConnection(XModel connectionModel)
{
ApiCredential cred=apiContext.getApiCredential();
ApiAccount ac=cred.getApiAccount() ;
// Retrieve all the value from the model
ac.setDeveloper( connectionModel.getValueAsString( "devID" ));
ac.setApplication( connectionModel.getValueAsString( "appID" ));
ac.setCertificate( connectionModel.getValueAsString( "certID" ));
apiContext.setApiServerUrl( connectionModel.getValueAsString( "url" ));
cred.seteBayToken( connectionModel.getValueAsString( "token" ));
apiContext.setSite( SiteCodeType.fromString(
connectionModel.getValueAsString( "site" )));
apiContext.setWSDLVersion( "417" ); // the current version of WSDL services
}
/**
* method used to retrieve the ApiContext
* @return the parameters necessary to make a call to eBay
*/
public ApiContext getTheApiContext()
{
return this.apiContext;
}
}
La classe illustre plusieurs des techniques utilisées dans l'application. D'abord l'application intègre ses données dans le modèle de données XUI de sorte que soit non seulement la gestion des données simplifiée mais elle aide également à enlever le codage en dur dans l'application. En exemple ci-dessus les divers paramètres de configuration sont obtenus à partir du modèle et ceci donne la possibilité d'obtenir ces arrangements à partir des dossiers externes ou d'autres parties de l'application (d'autres pages) sans présenter liason en dur. La construction de la classe pour obtenir le temps officiel est alors retrouvée par l'intermédiaire de la connexion à eBay:
Listing 4 - GetEbayTime.java
package xui.xoetrope.ebayExample;
import com.ebay.sdk.call.GeteBayOfficialTimeCall;
import com.ebay.sdk.util.eBayUtil;
import com.ebay.soap.eBLBaseComponents.DetailLevelCodeType;
import java.util.Calendar;
import java.util.Date;
import net.xoetrope.xui.data.XModel;
public class GetEbayTime extends EbayConnection
{
String dateString = "";
/**
* Setup a call to get the eBay time
* @param userModel the connection model
*/
public GetEbayTime( XModel userModel )
{
//set the connection from EbayConnection
super( userModel );
}
/**
* Return the time. Call eBay and build a string corresponding to the eBay
* official time
* @return the string value of the date or an zero length string if an error
* occurs.
*/
public String getTime()
{
try {
DetailLevelCodeType[] detailLevels = new DetailLevelCodeType[]
{DetailLevelCodeType.ReturnAll};
// Set the call with the APIContext
GeteBayOfficialTimeCall api = new GeteBayOfficialTimeCall(
super.getTheApiContext());
api.setDetailLevel( detailLevels );
// Execute the call to eBay
Calendar offTime = api.geteBayOfficialTime();
Date dt = offTime.getTime();
// Transform the date into a string with the Java eBay SDK API
dateString = eBayUtil.toAPITimeString( dt );
}
catch( Exception ex ){
System.out.println(ex.getMessage());
dateString = "";
}
return dateString;
}
}
Regardons de nouveau à la classe de Java pour la page d'accueil, Nous pouvons voir la classe GetEbayTime est utilisée. Les données retrouvées sont ajoutées au modèle de données et les composants de l'interface sont mis à jour. Une grande partie de l'eBay SDK est construite de cette façon cachant les détails de bas niveau et rendant de ce fait l'api plus commode pour l'usage avec XUI comme nous avions projeté. C'était correct pour l'appel simple, mais comme mentionné au-dessus l'eBay SDK utilise de facon significative des types spécifiques, des types presque énumérés et qu'elle n'était pas très commode pour employer ces types. Soit ce type sont codés en dur soit ils doivent être énumérés dans des fichiers externes de configuration et aucune de ces approche simplifie l'utilisation avec des listes ou d'autres widgets que vous compteriez voir dans une interface utilisateur. L'eBay SDK énumère un grand nombre de constantes diverses et variées saisit dans des classes séparées et heureusement, la structure de tous ces types est la meme. Pour surmonter les problèmes avec le système des types eBay, nous avons établi quelques classes de service. Une telle classe de service est la classe StaticData qui emploie la réflexion pour déterminer les constantes employées par eBay et puis stocke les valeurs dans le modèle de données de XUI. Une fois que les données sont dans le modèle elles peuvent être liées aux composants de l'interface facilement. Utiliser la réflexion signifie également que la liste de constantes sera toujours à jour. Un exemple de cette utilisation des constantes est la liste des sites eBay. Il serait difficile de maintenir la liste à la main et ainsi l'avantage de cette classe est important. Voici le code de cette classe:
Listing 5 - StaticData.java
public class StaticData
{
private Collection listFields = new ArrayList();
/**
* Load the value of a class into a model
* @param className the class where the value will be loaded
* @param outputModel the model where value are stored
*/
public StaticData( Class className, XModel outputModel ) {
Field[] fields = className.getFields();
for ( int i = 0 ; i < fields.length ; i++ ){
if ( !fields[ i ].getType().equals( org.apache.axis.types.Token.class ))
listFields.add( fields[ i ].getName());
}
Object[] list = listFields.toArray();
for ( int i = 0; i < list.length; i++ )
XBaseModel listModel = new XBaseModel( outputModel, "row"+i,
list[ i ].toString());
}
}
Comment Ainsi le cadre XUI a de nombreux avantages par rapport à employer Swing seul pour développer votre interface Java:
Tous les appels à eBay ont le même fonctionnement de base. Vous devez définir un APIContext (l'objet eBay où vos paramètres de connexion sont placés) et puis employer le constructeur de votre appel. L'utilisation du XModel simplifie le processus pour initialiser la connexion à eBay. Le XModel est également une manière rapide et efficace de communiquer des données entre chaque page ou entre le code source de l'application et l'interface. Plus que juste sauver de l'écriture de code, la combinaison de l'eBay SDK et XUI a comme conséquence une application eBay entièrement compatible avec beaucoup d'avantages.
Apercu de l'eBay Store Manager Voici quelques screenshots pour illustrer ce qui est dans l'application complète: Conclusion Pour établir une application eBay entièrement compatible adaptée à votre besoin, XUI vous fournit une manière facile et rapide de concevoir et crée votre interface. Vous pouvez développer votre application module par module, l'intégrer à votre base de données et employer les avantages de l'eBay SDK plutôt que le site Web pour vendre plus efficacements. Guillaume Montel est un étudiant en informatique à l'École des Mines de Nantes, France. Guillaume a travaillé chez Xoetrope pour son stage pendant l'été 2005. Il peut être contacté à
The eBay developer program: http://www.developer.ebay.com/ The eBay sandbox: http://www.sandbox.ebay.com/ The XUI project: http://sourceforge.net/projects/xui XUI tutorial: http://prdownloads.sourceforge.net/xui/IntroTutorial.zip?download Full description of XUI: To run the full application it is necessary to obtain eBay sand box keys. The application also set up a backing database to store history and to facilitate integration with other system (e.g. ERP, MRP or CRM Systems) and this requires that an odbc system DSN be setup as well (the system was developed using the jdbc-odbc bridge for convenience). Once the downloaded file has been unzipped it can be started by executing the run.bat file. Details of the eBay sandbox and database configuration can then be entered on the configuration page. Please note that the application is provided AS IS and without warranty and is only intended as technology demonstration. The software remains copyright of Xoetrope Ltd. The application and source code associated with this article is available to registered users... Click here to logon or register. comments If you were logged in you could rate this article or add a comment. |