Exporter (0) Imprimer
Développer tout

Données mobiles ViaXML

Larry Roof
Tonked.com

Ce mois-ci, la rubrique Two for the Road (Deux pour la route) nous emmène dans la ville d'Atlanta où se déroule Microsoft Tech-Ed 2001. La bonne nouvelle est qu'il fait assez chaud ici pour évaporer l'eau salée restée dans mon iPAQ après quelques plongeons californiens. La mauvaise nouvelle est que les rues de cette ville ne sont pas équipées d'un réseau Ethernet 11 Mo sans fil. Oui, une capitale sans couverture Ethernet sans fil, ça existe ! Mais où sont passées les rues de ma vallée ?

Cependant, mon indignation n'a pas duré. En effet, Doug Boling, auteur de "Programming Microsoft Windows CE" chez Microsoft Press (ISBN 0735614431), m'a trouvé égaré, mon iPAQ vers les cieux, espérant en vain un signal. Il m'a fait découvrir Fat Matt's Rib Shack, où le barbecue et le jazz se rencontrent pour créer une expérience unique, surtout si vous avez la chance d'écouter les Electromatics et Sean Costello. Une performance à ne pas manquer pour les fans de blues !

Retournons à notre conférence Tech-Ed qui s'intéresse cette année en priorité à .NET, ce qui ne surprendra personne. Beaucoup d'entre vous, développeurs eVB et tous ceux qui m'ont abordé pendant la conférence, se demandent si une version sans fil de Visual Basic® .NET est à l'ordre du jour. Microsoft n'a pas encore fait d'annonce formelle à ce sujet. Peut-être devrions-nous organiser une manifestation et préparer des banderoles sur lesquelles on pourrait lire "N'oubliez pas les développeurs mobiles !". Enfin, je ne suis pas sûr que ça marche.

Je me suis baladé parmi les stands des exposants, à la recherche de t-shirts et de Heinekens (qui a dit que Deux pour la route vous menait la vie dure ? Pas moi.). D'ailleurs, saviez-vous que le correcteur orthographique anglais de Microsoft Word acceptait le mot "Heineken" ? Bon revenons à ma croisade qui m'a amené dans un oasis technique, le stand Odyssey Software. J'y ai découvert ViaXML, un produit qui vous enivre immédiatement. J'ai donc décidé de vous en parler dans la rubrique de ce mois.

ViaXML : Qu'est-ce que c'est ?

ViaXML d'Odyssey vient de simplifier le développement d'applications sans fil communiquant avec des serveurs ou d'autres périphériques. Cette technologie utilise les standards ouverts XML et les protocoles Internet HTTP/HTTPS. Pour un développeur eVB, cela signifie qu'il peut créer des applications qui s'attaquent aux plates-formes exécutant Windows, Unix et Linux avec un simple jeu d'objets.

Types d'applications créées avec ViaXML :

  • Applications serveur qui extraient ou transfèrent des informations des appareils Windows CE
  • Applications exécutées sur appareil et qui intègrent facilement les fonctionnalités offertes par les serveurs
  • Applications exécutées sur appareil et qui facilite la communication entre appareils

Vous pouvez facilement profiter de ces fonctionnalités en intégrant un jeu d'objets à vos applications eVB. Tout ce dont vous avez besoin pour compiler des applications mobiles vraiment incroyables est un peu de code.

L'application du mois : ViaXML Northwind

L'application ViaXML Northwind est une version améliorée de Mobile Sales dont je vous ai parlé le mois dernier. À la différence de Mobile Sales, ViaXML Northwind n'utilise pas de stock de données local. Toute opération de données s'effectue côté serveur.

ViaXML Northwind met en pratique des services serveur écrits dans des pages ASP (Active Server Pages) exécutées sous Internet Information Server (IIS) pour récupérer et stocker des données d'une base de données Microsoft Access, SQL Server ou Oracle.

Configuration requise

Pour exécuter l'application du mois :

  • ViaXML d'Odyssey Software, dont vous pouvez obtenir une version d'essai à l'adresse www.odysseysoftware.com.
  • Contrôle Easy Ink d'Odyssey Software, un contrôle gratuit qui permet entre autres de capturer des images dessinées par l'utilisateur. Pour l'application ViaXML Northwind, le contrôle nous servira à capturer des signatures.
  • Internet Information Server (IIS), exécuté sur Windows 2000 ou Windows NT. Un serveur ou votre machine de développement fera l'affaire.
Remarque    Pour vivre pleinement l'expérience ViaXML Northwind, vous devez disposer d'une connexion Ethernet ou de téléphone cellulaire entre votre appareil et le serveur IIS. La connexion Ethernet peut être avec ou sans fil. Si vous ne souhaitez pas installer de matériel, vous pouvez également utiliser l'émulateur Pocket PC.

Configuration de ViaXML Northwind

Après avoir installé ViaXML sur la même machine que IIS, copiez les fichiers suivants du répertoire de la base exemple ViaXML Northwind vers le répertoire virtuel de ViaXML :

  • nwind.mdb : version modifiée de la base de données Northwind
  • ViaXMLNorthwind.asp : fichier ASP contenant la méthode qui permet de récupérer et de stocker les données de la base de données Northwind
  • ViewOrders.asp : fichier ASP permettant de visualiser les commandes entrées à partir de votre appareil

L'emplacement par défaut du répertoire virtuel ViaXML est C:\Program Files\Odyssey Software\ViaXML\ASP.

Son emplacement est le même que celui des composants serveur de votre application. Un répertoire virtuel est en fait un simple répertoire dans lequel IIS stocke des données. Il peut se trouver soit sur la machine sur laquelle IIS est installé, soit sur une autre machine de votre réseau.

Base de données ViaXML Northwind

La base de données utilisée avec ViaXML Northwind est une version mutante de la légendaire base de données Northwind de Microsoft Access, livrée avec quasiment tous les produits de développement et de base de données Microsoft. J'ai effectué quelques modifications ici et là en ajoutant quelques tables et leurs relations prises en charge. ViaXML Northwind utilise les tables standard de Northwind :

  • Customers : La table Customers est uniquement utilisée pour renseigner une zone de liste déroulante dans le formulaire de commande avec une liste de clients.
  • Products : La table Products est utilisée pour renseigner une zone de liste déroulante dans le formulaire de commande avec une liste de produits.
  • Orders : La table Orders est utilisée pour renseigner une zone de liste déroulante dans le formulaire de commande avec une liste de numéros de commande pour le client sélectionné.
  • Order Details : La table Order Details est utilisée pour renseigner un contrôle de liste pour la commande sélectionnée.

J'ai ajouté les deux tables suivantes à la base de données Northwind :

  • NewOrders : La table NewOrders est utilisée pour stocker de nouvelles commandes entrées sur l'appareil.
  • NewOrderDetails : La table NewOrderDetails est utilisée pour stocker les éléments comprenant chaque commande.

ViaXML Northwind : Composant serveur

Téléchargement Téléchargez l'exemple de code pour cette section (en anglais).

Les composants serveur de ViaXML Northwind sont livrés sous le format Active Server Pages (ASP). Bien que le concept ASP ne soit pas au coeur du sujet pour cette rubrique, en voici deux mots : ASP permet d'incorporer du script VBScript dans des pages Web. Lorsque celles-ci sont appelées par IIS, le script est exécuté sur le serveur. Le résultat est ensuite renvoyé au client qui a fait la requête. Pour l'application ViaXML Northwind, les scripts ASP permettent la création de fonctions qui deviennent des méthodes pour l'application eVB développée avec ViaXML.

ViaXML Northwind utilise les deux fichiers ASP suivants :

  • ViaXMLNorthwind.asp
  • ViewOrders.asp
Description de ViaXMLNorthwind.asp

Les scripts utilisés dans ce fichier sont utilisés pour récupérer des données de Northwind et y sauvegarder des données. Vous devriez reconnaître le code utilisé par ces routines même si vous n'avez jamais travaillé avec ASP. En effet, ce code est écrit en VBScript, le langage à la base d'eVB.

Configuration ViaXML sur le serveur

En plus du fichier ViaXMLNorthwind.asp, quelques lignes de code aident à définir la clé de licence ViaXML, ainsi que la connexion à la base de données et au serveur ViaXML.

Remarque    Avant d'exécuter l'application, vous devrez insérer votre clé de licence d'essai dans ce fichier.
' Remplacez XXXX-XXXX-XXXX-XXXX par votre clé de licence ViaXML.
Const LICENSE_KEY = "XXXX-XXXX-XXXX-XXXX"

' CONNECTION_STRING peut être remplacé par n'importe 
' quelle chaîne de connexion valide.
Dim CONNECTION_STRING
CONNECTION_STRING = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" 
 & Server.MapPath("nwind.mdb")

' Crée l'objet Server ViaXML et répartit l'appel vers la méthode Web.
Dim viaxml
On Error Resume Next
Set viaxml = Server.CreateObject("ViaXML.ViaXMLServer")
viaxml.LicenseKey = LICENSE_KEY
viaxml.Execute Me

Récupération de données du serveur

La fonction ExecuteSQL peut être appelée par une application eVB pour exécuter une instruction SQL contre notre base de données Northwind. Cette fonction peut être utilisée telle quelle avec vos propres bases de données. Il suffit de changer la chaîne de connexion comme indiqué ci-dessus.

La fonction ExecuteSQL utilise la méthode Execute de l'objet Connection pour traiter l'instruction SQL qui a été appelée. Puis elle renvoie une structure contenant soit un jeu d'enregistrements généré par l'instruction SQL, soit le nombre d'enregistrements affectés par l'instruction.

Function ExecuteSQL(ByVal sql)
 Dim cn, rs, count
 
 Set cn = CreateObject("ADODB.Connection")
 cn.open CONNECTION_STRING
 Set rs = cn.Execute(sql, count)
 Set ExecuteSQL = RecordsetToStruct(rs)
 
End Function

Enregistrement de commandes sur le serveur

La fonction StoreOrder est appelée par l'application ViaXML Northwind pour stocker des commandes. Cette opération a besoin de deux arguments : l'ID client et une signature. La signature est stockée comme objet OLE dans la base de données Northwind. Dans cet exemple aussi, le code VBScript ADO est assez simple.

Function StoreOrder (ByVal CustomerID, ByVal Signature)
 Dim cn, rs, count
 
 Set cn = CreateObject("ADODB.Connection")
 cn.Open CONNECTION_STRING
 Set rs = CreateObject("ADODB.Recordset")
 rs.Open "NewOrders",cn, 2, 3
 rs.AddNew
 rs("CustomerID") = CustomerID
 rs("Signature") = Signature
 rs.Update
 rs.movelast
 StoreOrder = rs("OrderID")
 rs.close
 cn.close
 
End Function

Enregistrement des informations de commande sur le serveur

La fonction StoreOrderDetails est appelée par l'application ViaXML Northwind pour stocker des éléments de commandes uniques dans la base de données Northwind. Ici, j'ai choisi d'utiliser l'instruction SQL INSERT au lieu de créer un jeu d'enregistrements.

Function StoreOrderDetails (ByVal OrderID, ByVal ProductID, ByVal Quantity)
 Dim cn, rs, count
 
 On Error Resume Next
 
 Set cn = CreateObject("ADODB.Connection")
 cn.Open CONNECTION_STRING
 cn.Execute "INSERT INTO NewOrderDetails (OrderID, ProductID, Quantity) VALUES _
 (" & OrderID & ", " & ProductID & ", " & Quantity & ")"
 StoreOrderDetails = Err.Number
 
 cn.close
 
End Function

Description de ViewOrders.asp

ViewOrders.asp traite l'affichage des commandes. C'est une page ASP standard avec un peu de code ViaXML au début. Elle lance des requête pour les deux tables NewOrders et NewOrderDetails afin d'afficher la liste des commandes comme dans la figure ci-dessous. Je ne décris pas ce fichier en détail puisqu'il s'agit d'une simple page ASP, sujet que nous n'abordons pas dans cette rubrique.

Figure 1.
Figure 1. Page ASP avec ViaXML affichant une liste de commandes

Remarque    Après avoir entré des commandes, celles-ci peuvent être affichées sur le serveur en appelant la page ViewOrders.asp à partir d'un navigateur comme l'adresse URL l'illustre dans la figure ci-dessus. Vous devez remplacer le nom du serveur ou l'adresse de l'exemple par celui de votre serveur IIS.

ViaXML Northwind : Récapitulatif du composant serveur

Comme vous pouvez le constater, le composant serveur de l'application ViaXML Northwind est constitué d'un simple jeu de scripts ASP. Vous pourriez facilement créer du script qui incorpore des règles, traite les validations de données et exécute d'autres fonctions nécessaires à vos applications mobiles.

ViaXML Northwind : Composant de l'appareil

Téléchargement Téléchargez le code exemple de cette section.

Le composant de l'appareil ViaXML Northwind prouve combien il est facile de créer une solution mobile avec ViaXML. Cette application compte trois fonctions distinctes : affichage des commandes, saisie des commandes et capture des signatures, que j'aborde dans les trois sections ci-dessous.

Affichage des commandes

Avec ViaXML Northwind, un agent commercial peut visualiser les commandes précédentes d'un client. Voici un exemple de formulaire de commandes :

Figure 2.
Figure 2. Interface d'affichage de commandes de l'application ViaXML

L'interface d'affichage de commandes consiste en deux contrôles de zone de liste déroulante, de deux étiquettes, de deux contrôles de zone de texte et d'un contrôle d'affichage de liste. La zone de liste déroulante supérieure affiche une liste de clients. L'autre affiche les numéros de commandes individuels pour chaque client et est rafraîchie à chaque fois qu'un nouveau client est sélectionné.

Analyse du code du formulaire d'affichage de commandes

La première chose à faire lorsque vous travaillez avec ViaXML est d'ajouter une référence à la bibliothèque ViaXML dans votre projet. Suivez les étapes suivantes pour ajouter cette référence :

  1. À partir du menu Project, sélectionnez References.
  2. Dans la boîte de dialogue References, sélectionnez ViaXML Library.

Figure 3.
Figure 3. Boîte de dialogue References

Section General Declarations du formulaire frmMain

Avant d'exécuter l'application ViaXML Northwind, vous devez effectuer deux modifications. Dans la section General Declarations de frmMain, entrez les éléments suivants :

  • votre licence ViaXML
  • l'adresse URL de la page ASP sur votre serveur IIS
' Remplacez XXXX-XXXX-XXXX-XXXX ci-dessous avec votre clé de licence ViaXML.
Const LICENSE_KEY = "XXXX-XXXX-XXXX-XXXX"

' Remplacez "localhost" ci-dessous avec le nom de votre serveur IIS
' ou son adresse IP..
' Remarque : "localhost" fonctionne uniquement si l'exemple est exécuté
' avec l'émulateur et que IIS est exécuté en local.
Const strURL = "http://localhost/viaxml/ViaXMLNorthwind.asp"

Événement Form Load du formulaire frmMain

Je suis désormais prêt à utiliser ViaXML pour accéder aux données du serveur. Dans l'événement Form Load, je crée une instance du client ViaXML, la configure, puis appelle la procédure LoadCustomers pour propager l'information dans la zone de liste déroulante Customers.

Private Sub Form_Load()
 
' Crée l'objet client ViaXML.
 Set vxClient = CreateObject("ViaXML.ViaXMLClient")
 
' Définit la propriété LicenseKey avec votre clé de licence.
 vxClient.LicenseKey = LICENSE_KEY
 
' Définit la propriété NetworkTimeout.
 vxClient.NetworkTimeout = 10
 
' Définit la propriété ServerURL comme adresse URL de la page ASP
' qui indique vos services web.
 vxClient.ServerURL = strURL
 
' Charge la liste de clients.
 LoadCustomers
 
' Configure l'interface.
 FormatListView
 
End Sub

Chargement de la liste des clients

Le chargement de la liste des clients met en application notre première utilisation de ViaXML pour accéder aux données du serveur. Dans la routine LoadCustomers, j'appelle la méthode ExecuteSQL décrite plus haut. Celle-ci accepte l'instruction SQL qui génère puis renvoie un jeu d'enregistrements sous forme de structure XML.

' Appelle la fonction serveur "ExecuteSQL" pour renvoyer un jeu d'enregistrements
' dans un objet ViaXML.ViaXMLStruct. 
 Set vxCall = vxClient.ServerObject.ExecuteSQL("SELECT CompanyName,
 CustomerID FROM Customers")
 Set vxStruct = GetResult(vxCall)

Il ne nous reste plus qu'à répéter cela dans toute la structure pour charger la zone de liste déroulante.

' Passe en revue les résultats renvoyés par la requête distante.
 intRowCount = qryUBound + 1
 For intRow = qryLBound To qryUBound Step intColCount
 
' Charge le nom du client.
 cmbCustomers.AddItem qryResults(intRow)

' Place l'ID client dans le tableau pour une consultation aisée.
 ReDim Preserve strCustomerIDs(UBound(strCustomerIDs) + 1)
 If Err.Number <> 0 Then
 ReDim strCustomerIDs(1)
 Err.Clear
 End If
 strCustomerIDs(UBound(strCustomerIDs)) = qryResults(intRow + 1)

 Next intRow
 End If

Chargement des commandes, des dates de commandes et des informations de commandes

La processus de requête et de chargement de données vers l'interface affichant les commandes utilise des techniques similaires à celles décrites ci-dessus. La seule différence est la chaîne SQL qui appelle les données du serveur. Je ne ferai donc qu'une démonstration de la requête et non de tout le processus.

À partir de la routine LoadOrders
' Appelle la fonction serveur "ExecuteSQL" pour renvoyer un jeu d'enregistrements
' dans un objet ViaXML.ViaXMLStruct.
 strSQL = "SELECT * FROM Orders WHERE CustomerID='" & _
 strCustomerIDs(cmbCustomers.ListIndex + 1) & "'"
 Set vxCall = vxClient.ServerObject.ExecuteSQL(strSQL)
 Set vxStruct = GetResult(vxCall)

À partir de la routine LoadDates :

' Appelle la fonction serveur "ExecuteSQL" pour renvoyer un jeu d'enregistrements
' dans un objet ViaXML.ViaXMLStruct.
 strSQL = "SELECT OrderDate, ShippedDate FROM Orders " & _
 "WHERE OrderID=" & lngOrderID
 Set vxCall = vxClient.ServerObject.ExecuteSQL(strSQL)
 Set vxStruct = GetResult(vxCall)

À partir de la routine LoadDetails :

' Appelle la fonction serveur "ExecuteSQL" pour renvoyer un jeu d'enregistrements
' dans un objet ViaXML.ViaXMLStruct.
 strSQL = "SELECT Products.ProductName, [Order Details].UnitPrice, 
 [Order Details].Quantity, [Order Details].Discount " & _
 "FROM Products INNER JOIN [Order Details] ON Products.ProductID =_
 [Order Details].ProductID " & _
 "WHERE OrderID=" & lngOrderID
 Set vxCall = vxClient.ServerObject.ExecuteSQL(strSQL)
 Set vxStruct = GetResult(vxCall)

Ajout de commandes

Avec ViaXML Northwind, un agent commercial peut saisir de nouvelles commandes pour un client. Voici un exemple de formulaire de saisie de commande :

Figure 4.
Figure 4. Interface de saisie de commandes de l'application ViaXML Northwind

Ce formulaire consiste en une zone de liste déroulante (pour les produits), d'une zone de texte, d'un curseur horizontal, de deux boutons de commande et d'un contrôle d'affichage de liste.

Le code du nouveau formulaire de commande est assez simple. Pour la plupart, il s'agit d'ajouter et de retirer des éléments de la liste avec du code eVB standard, rien de plus. La seule utilisation de code ViaXML se trouve dans la procédure LoadProducts. Une fois de plus, j'ai utilisé la méthode ExecuteSQL du script ASP pour générer puis renvoyer la liste des produits.

' Appelle la fonction serveur "ExecuteSQL" pour renvoyer un jeu d'enregistrements
' dans un objet ViaXML.ViaXMLStruct.
 strSQL = "SELECT ProductName, ProductID FROM Products"
 Set vxCall = vxClient.ServerObject.ExecuteSQL(strSQL)
 Set vxStruct = GetResult(vxCall)

Capture de signatures

ViaXML Northwind utilise le contrôle Easy Ink d'Odyssey, mentionné plus tôt dans la rubrique, pour capturer les signatures. De nombreuses applications mobiles requièrent cette fonctionnalité et ce contrôle simplifie donc le processus. Il suffit de le placer dans l'interface, et le tour est joué !

Le formulaire de capture de signature est représenté ci-dessous.

Figure 5.
Figure 5. Interface de capture de signature de l'application ViaXML Northwind

Ce formulaire consiste en un bouton de commande et du contrôle Easy Ink d'Odyssey.

Enregistrement de commande

Bien que l'opération de capture de signature domine l'interface utilisateur, c'est la routine SaveOrder qui permet la fonctionnalité d'enregistrement de commande, et de la signature, dans la base de données serveur en utilisant ViaXML.

Les commandes sont enregistrées en deux temps. Dans un premier temps, une nouvelle commande est créée et l'ID client et la signature sont stockés. Cette fonctionnalité est traitée sur le serveur en utilisant le code ViaXML pour appeler la méthode StoreOrder dans le script ASP. La fonctionnalité renvoie l'ID de commande correspondant à la nouvelle commande ajoutée.

' Enregistre la commande.
 strCustomerID = frmMain.strCustomerIDs(frmMain.cmbCustomers.ListIndex + 1)
 Set vxCall = vxClient.ServerObject.StoreOrder(strCustomerID, _
 inkSignature.ImageData)
 intOrderID = GetResult(vxCall)

Dans un second temps, l'ID de commande est utilisé comme référence entre les tables NewOrders et NewOrderDetails, puis enregistré avec l'ID de produit et la quantité de chaque article de la commande. La méthode StoreOrderDetails dans le script ASP est appelée pour chaque enregistrement de chaque article.

' Stocke les différents articles de cette commande.
 For intCounter = 1 To frmOrder.lvwOrder.ListItems.Count
 Set vxCall = vxClient.ServerObject.StoreOrderDetails(intOrderID, _
 frmOrder.lvwOrder.ListItems(intCounter).SubItems(2), _
 frmOrder.lvwOrder.ListItems(intCounter).SubItems(1))
 Next intCounter

Récapitulatif

La création d'application serveur mobile sans fil est simplifiée par l'utilisation de ViaXML. Comme notre exemple l'illustre bien, vous pouvez intégrer des données serveur à votre application avec un minimum de code si vous écrivez quelques simples pages ASP exposées comme méthodes.

Et vous n'avez vu que la partie émergée de l'iceberg ViaXML et de ses possibilités. Téléchargez une copie d'essai pour constater par vous-même à quel point il est facile d'incorporer des données serveur dans vos applications mobiles.

De nouveau en route

C'est tout pour ce mois-ci. Prenez le temps de découvrir ViaXML. Je crois sincèrement que plus vous aurez d'outils à votre disposition, plus vos solutions mobiles seront créatives et effectives. Parlez-moi de vos projets ViaXML à l'adresse lroof@tonked.com. Pendant ce temps, je me lance à la recherche de contrôle ActiveX® pour eVB afin de rassembler une trousse d'outils bien fournie pour le développeur mobile. Je vous ferai part des mes découvertes le mois prochain. En attendant, je me remets en route.



Dernière mise à jour le lundi 12 novembre 2001



Afficher:
© 2014 Microsoft