Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Interopérabilité et communication entre applications 4D grâce aux Web Services

Date de publication : Mai 2006

Par Chiheb Nasr (Ingénieur Contrôle Qualité)
 

Cette note technique s'adresse aux développeurs 4D débutants dans l'utilisation des Services Web et qui ont des besoins d'interopérabilités et de communication entre applications 4D. Nous proposons des méthodes SOAP permettant à une application 4D (Cliente) d'ajouter, supprimer, mettre à jour, ou rechercher des enregistrements dans une autre base 4D distante (Serveur). Ce sont des méthodes alternatives à une solution basée sur le plugin 4D Open ou 4D ODBC.

Les différentes solutions de communication entre applications 4D
Choix de la technologie des Web Services
Les paramétrages du serveur web
Configuration de la base exemple
Fonctionnement de la base exemple
L'application serveur
SOAP_RECHERCHER
SOAP_AJOUTER_ENREG
SOAP_MODIFIER_ENREG
SOAP_SUPPRIMER_ENREG
SOAP_SUPPRIMER_SELECTION
L'application Cliente
Exemple 1 : Recherche
Exemple 2 : Recherche
Exemple 3 : Recherche
Exemple 4 : Ajouter_Enreg
Exemple 5 : Modifier_Enreg
Exemple 6 : supprimer_Enreg
Exemple 7 : supprimer_Selection
Quelques méthodes génériques
Gen_util_QueryBuildLine et Gen_util_QueryDefineValue
Gen_Gestion_Erreurs
Gen_TableNom_Vers_TableID
Conclusion
Télécharger l'exemple


Les différentes solutions de communication entre applications 4D


Il existe plusieurs solutions pour faire communiquer des bases 4D entre elles en fonction des besoins de chacune des applications. La première consiste à mettre en œuvre une solution d'import-export en utilisant des transferts de fichiers par E-mail ou par FTP.

La deuxième solution repose sur l'utilisation du plugin 4D Open pour 4D. Il s'agit d'un fonctionnement en mode connecté donc seule la connexion à un 4D Server est possible. Chaque connexion se comporte comme une connexion d'un 4D Client et utilise ainsi une licence 4D Client.

Une autre solution consiste à concevoir des méthodes SOAP appelées aussi Web Services à laquelle on passe les paramètres adéquats et on récupére un éventuel résultat. Un serveur SOAP permet de recevoir des paramètres et de retourner des résultats à un client SOAP. Avec cette solution, l'exécution de code s'effectue côté serveur, contrairement à l'implémentation avec 4D Open. L'avantage majeur de cette solution est de ne pas avoir à dialoguer uniquement avec un 4D Server mais à tout autre moteur 4D ayant son serveur Web actif. La seule contrainte de cette solution c'est qu'elle nécessite une licence 4D Web Services pour l'application serveur des Web Services.

En revanche, la solution 4D Open pour 4D présente l'avantage de disposer d'un contexte sur le serveur, dans lequel une connexion reste active, et conserve ainsi une sélection courante, un enregistrement courant et des variables. En revanche, avec une requête SOAP une fois que le serveur a renvoyé sa réponse, le contexte est perdu.


Choix de la technologie des Web Services


Les services Web fournissent un lien entre applications, services et machines. Des applications utilisant des technologies différentes peuvent ainsi envoyer et recevoir des données au travers d'un protocole compréhensible par tout le monde. Les services Web sont normalisés car ils utilisent XML et HTTP pour transférer des données et ils sont compatibles avec de nombreux autres environnements de développement. Ils sont donc indépendants de plateforme. Ils peuvent être publiés et utilisés depuis n'importe quelle plateforme. L'information qui est envoyée et reçue par l'application est structurée et transmise sous forme de document XML. Les services web représentent donc la façon la plus efficace de partager des méthodes et des fonctionnalités. De plus, ils réduisent le temps de réalisation en permettant de tirer directement parti de services existants.

Les méthodes publiées comme Services Web présentent beaucoup de souplesse et flexibilité dans leur retour d'arguments. En effet, 4D propose deux manières de spécifier les données retournées par une réponse SOAP. D'abord, les variables et tableaux peuvent être liés aux paramètres de sortie en utilisant la commande DECLARATION SOAP. Un nombre indéfini de valeurs peuvent être incluses dans la requête ou une réponse SOAP bien sûr dans la limite des ressources disponibles. Ensuite, le paramètre $0 de n'importe quelle méthode offerte comme Web service peut être inclus automatiquement comme sortie. Dans ce dernier cas, aucune programmation spécifique n'est nécessaire.

Dans cette note technique, nous vous proposons des méthodes alternatives très simples qui reproduisent les fonctionnalités les plus basiques de 4D Open pour 4D au travers du protocole SOAP qui sont l'ajout, la modification, la suppression et la recherche des enregistrements dans une base 4D distante. Le client envoie les informations nécessaires pour exécuter une action particulière et le serveur, après avoir traité l'action demandée, retourne un code d'erreur  (un code égal à 0 si l'opération s'est bien déroulée ou un code d'erreur différent de 0 en cas de problème) et éventuellement des résultats. Tous ces aspects seront détaillés plus tard dans la partie consacrée à la base exemple.


Les paramétrages du serveur web

Afin de publier des méthodes comme Services Web, il faut d'abord que le serveur Web de l'application serveur soit démarré et accessible. L'application 4D cliente n'a pas besoin d'avoir un serveur web actif. Ensuite, la préférence suivante de la base de données doit être activée  (Préférences -> Web ->Web Services -> Autoriser requêtes Web Services). Enfin, la propriété de méthode suivante doit être activée pour chaque méthode publiée  (Propriétés de la méthode -> Offert comme Web Service).


Configuration de la base exemple

Pour avoir un environnement de déploiement de Service Web typique et par souci de clarté, les méthodes Client et les méthodes de Service web sont fournies dans deux bases distinctes accompagnant cette note : "Serveur" et "Client". Les méthodes Clientes sont exécutées dans une copie de 4D ou 4D Server et les méthodes de Service Web dans une autre copie (également 4D ou 4D Server).

La base "Serveur" est configurée par défaut pour écouter les requêtes Web ainsi que les requêtes Web service sur le port 8080. Vous pouvez fixer ce numéro de port sur n'importe quel port disponible et autorisé par votre OS.

Les méthodes proxy SOAP de l'application cliente "Client". précisent directement l'URL d'appel du Web service par l'intermédiaire de la variable <>SoapURL. Dans le cas de cet exemple, les méthodes font des appels à la machine en local c'est à dire à l'adresse http://127.0.0.1/. Pour indiquer aux méthodes Clientes d'utiliser une adresse différente de serveur, il suffit de modifier la méthode projet PROXY_INITIALISATION et de mettre l'adresse IP de la machine hébergeant l'application serveur. En pratique, l'URL du serveur SOAP pourrait être stockée dans un enregistrement ou une ressource de la base afin de faciliter la maintenance.


Fonctionnement de la base exemple

La base exemple contient une série de méthodes simples illustrant la manière d'exécuter une action sur l'application serveur distante ainsi que la façon de recevoir le code d'erreur retournée et des résultats éventuels. Tous les services Web sont fournis avec leurs méthodes SOAP clientes dites aussi méthodes proxy. Ces méthodes proxy sont des méthodes génériques qui vous faciliteront l'appel des services Web. Le tableau suivant présente la liste des noms de méthodes de Service Web qui exécutent une action et retournent des données et les noms des méthodes proxy correspondantes qui récupèrent ces données.

Méthode de Service Web Méthode de Client proxy Action
SOAP_AJOUTER_ENREG PROXY_AJOUTER_ENREG Ajouter d'un enregistrement
SOAP_MODIFIER_ENREG PROXY_MODIFIER_ENREG Modifier un enregistrement
SOAP_SUPPRIMER_ENREG PROXY_SUPPRIMER_ENREG Chercher et supprimer un enregistrement
SOAP_SUPPRIMER_SELECTION PROXY_SUPPRIMER_SELECTION Chercher et supprimer une sélection d'enregistrements
SOAP_RECHERCHER PROXY_RECHERCHER Chercher et récupération de la sélection résultante

L'application serveur

L'application serveur contient une seule table et dispose d'un jeu de données indispensable pour le bon déroulement du scénario des exemples, détaillé plus bas. Ce jeu de données est constitué de 5 enregistrements créés à l'ouverture de la base par la méthode projet CREATION_5_Enregistrements.

Si vous voulez recommencer le scénario, vous devez réinitialiser ce jeu de données, et ceci en lançant de nouveau cette méthode projet en mode Utilisation ou bien en redémarrant l'application. La table 4D utilisée dans ce scénario contient tous les types de champs disponibles dans 4D, comme le montre la copie d'écran ci-dessous.


Voici la liste de tous les services Web disponibles dans cette application serveur :


SOAP_RECHERCHER

Cette méthode reçoit 2 paramètres :
· Le nom de la table cible ;
· Un Blob contenant les critères de recherche.

Ce service Web effectue la recherche demandée et renvoie 3 informations :
· Le nombre d'enregistrements trouvés ;
· Un Blob contenant la sélection des enregistrements sous forme d'un ensemble de tableaux correspondant à la sélection trouvées ;
· Un code d'erreur.


SOAP_AJOUTER_ENREG

Cette méthode reçoit 2 paramètres :
· Le nom de la table cible ;
· Un Blob dans lequel est stocké le contenu du nouvel enregistrement.

Ce service Web ajoute un enregistrement dans la table cible et renvoie 1 information :
· Un code d'erreur.


SOAP_MODIFIER_ENREG

Cette méthode reçoit 3 paramètres :
· Le nom de la table cible ;
· Un Blob dans lequel est stocké le nouveau contenu de l'enregistrement à modifier ;
· Un Blob contenant les critères de recherche de l'enregistrement.

Ce service Web recherche l'enregistrement cible et le modifie puis renvoie 1 information :
· Un code d'erreur.


SOAP_SUPPRIMER_ENREG

Cette méthode attend 2 paramètres :
· Le nom de la table cible ;
· Un Blob contenant les critères de recherche de l'enregistrement à supprimer.

Ce service Web recherche l'enregistrement cible et le supprime puis renvoie 1 information :
· Un code d'erreur


SOAP_SUPPRIMER_SELECTION

Cette méthode attend 2 paramètres :
· Le nom de la table cible ;
· Un Blob contenant les critères de recherche de la sélection à supprimer.

Ce service Web recherche les enregistrements cibles et les supprime puis renvoie 1 information :
· Un code d'erreur : ce service renvoie une erreur si l'opération n'a pas pu être réalisée ou bien, lorsqu'après la suppression, l'ensemble "LockedSet" n'est pas vide.


L'application Cliente

L'objectif de l'interface proposée dans la base 4D Cliente est d'illustrer les principes utilisées pour faire communiquer deux bases 4D via les Services Web. A l'ouverture de la base cliente, un dialogue constitué de sept pages est affiché. Chaque page correspondant à un seul exemple. Les sept exemples constituent un scénario complet de test et doivent donc être exécutés dans l'ordre. Des explications techniques des exemples sont rapportées sur leur page respective du formulaire.

Voici la liste de tous les exemples disponibles dans l'application cliente :


Exemple 1 : Recherche

Dans cet exemple, on exécute une recherche équivalente à la ligne de code suivante :
code 4D

CHERCHER([Table 1];[Table 1]Champ_Entier>2)
Le résultat de cette recherche est une sélection de 3 Enregistrements qui sera affichée dans une liste box en bas de la page du formulaire.


Exemple 2 : Recherche

Dans cet exemple, on exécute une recherche équivalente à la ligne de code suivante:
code 4D

CHERCHER([Table 1];[Table 1]Champ_Entier>=2;*)
CHERCHER([Table 1]; & ;[Table 1]Champ_Date>20/7/2006)
Le résultat de cette recherche est une sélection de 2 enregistrements qui sera affichée dans une liste box en bas de la page du formulaire.


Exemple 3 : Recherche

Dans cet exemple, on exécute une recherche équivalente à la ligne de code suivante :
code 4D

CHERCHER([Table 1];[Table 1]Champ_Booleen=Vrai;*)
CHERCHER([Table 1]; | ;[Table 1]Champ_Heure<=?02:00:00?)
Le résultat de cette recherche est une sélection de 4 enregistrements qui sera affichée dans une liste box en bas de la page du formulaire.


Exemple 4 : Ajouter_Enreg

Cet exemple ajoute un enregistrement dans la table [Table 1] dont le contenu est renseigné par le code suivant :
code 4D

[Table 1]Champ_Alpha80_ID:="W"*80
[Table 1]Champ_Texte:=512*"W"
[Table 1]Champ_Numerique:=88888
[Table 1]Champ_Entier:=-20
[Table 1]Champ_EntierLong:=1000000
[Table 1]Champ_Date:=Date du jour
[Table 1]Champ_Heure:=Heure courante
[Table 1]Champ_Booleen:=Vrai
LIRE IMAGE DANS BIBLIOTHEQUE(2026;[Table 1]Champ_Image)
FIXER TAILLE BLOB([Table 1]Champ_Blob;1024;Code ascii("W"))
Après exécution de l'exemple, vous pouvez vérifier que l'enregistrement a bien été ajouté dans l'application serveur.


Exemple 5 : Modifier_Enreg

Cet exemple modifie l' enregistrement qu'on vient d'ajouter dans l'exemple précédent. L'ancien contenu est remplacé via le code 4D suivant :
code 4D

[Table 1]Champ_Alpha80_ID:="Q"*80
[Table 1]Champ_Texte:=512*"Q"
[Table 1]Champ_Numerique:=-5
[Table 1]Champ_Entier:=-99
[Table 1]Champ_EntierLong:=-3
[Table 1]Champ_Date:=!10/10/10!
[Table 1]Champ_Heure:=?20:20:20?
[Table 1]Champ_Booleen:=Vrai
LIRE IMAGE DANS BIBLIOTHEQUE(2025;[Table 1]Champ_Image)
FIXER TAILLE BLOB([Table 1]Champ_Blob;68;Code ascii("Q"))
Après exécution de cet exemple, vous pouvez vérifier que l'enregistrement a bien été modifié dans l'application serveur.


Exemple 6 : supprimer_Enreg

Dans cet exemple, on supprime l' enregistrement qu'on vient d'ajouter et de modifier dans les deux exemples précédents. L'action exécutée est équivalente au code 4D suivant :
code 4D

CHERCHER([Table 1];[Table 1]Champ_EntierLong=-3)
SUPPRIMER ENREGISTREMENT([Table 1])
Après exécution de cet exemple, notez que l'enregistrement a bien été supprimé dans l'application serveur.


Exemple 7 : supprimer_Selection

Cet exemple supprime 4 enregistrements sur 5 de la table [Table 1]. Ici on exécute l'équivalent du code suivant :
code 4D

CHERCHER([Table 1];[Table 1]Champ_Numerique<=10,04)
SUPPRIMER SELECTION([Table 1])
Après exécution de cet exemple, une sélection de 4 enregistrements sera supprimée. Notez qu'il ne reste qu'un seul enregistrement dans la table [Table 1] de l'application serveur.


Quelques méthodes génériques


Voici quelques méthodes génériques que vous trouverez également dans la base cliente :


Gen_util_QueryBuildLine et Gen_util_QueryDefineValue

Ces deux méthodes génériques de recherche ont été extraites de la note technique 4D-200405-15-FR de Jean-Yves FOCK-HOON. Elles permettent d'effectuer tous types de recherche quelque soit l'opérateur utilisé et le nombre de lignes qui composent les critères de recherche. Toutefois, nous y avons apporté quelques corrections.

L'algorithme de recherche mis en œuvre par ces méthodes attend quatre paramètres de type tableaux :

1 - TABLEAU ENTIER LONG : WS_4D_ChampIDs, ce paramètre contient les ID des champs sur lesquels porte la recherche.

2 - TABLEAU ENTIER LONG : WS_4D_Operateurs, ce tableaux renseigne sur les opérateurs de comparaison (=, #, >, >=, < et <= ) à utiliser.

Voici le tableau de correspondance entre ces opérateurs et les entiers long à insérer dans le tableau :

Opérateur Valeur correspondante
= 1
# 2
> 3
>= 4
< 5
<= 6
3 - TABLEAU TEXTE LONG : WS_4D_Valeurs : ce tableau contient les valeurs recherchées des champs

4 - TABLEAU TEXTE LONG : WS_4D_Combinaison : ce tableau renseigne sur les combinaisons (ET/OU) à utiliser entre les lignes composant la clause de la recherche Voici un tableau de correspondance entre les combinaisons à utiliser et les entiers long à insérer dans le tableau :


Combinaison Valeur correspondante
ET 1
OU 2

Gen_Gestion_Erreurs

Cette méthode associe un texte à un code d'erreur. Elle reçoit un code d'erreur en paramètre d'entrée et modifie la valeur de la variable texte <>_texte_erreur qui sera affichée dans chaque page du formulaire à la fin de l'exécution de chaque exemple.


Gen_TableNom_Vers_TableID

Cette méthode reçoit le nom d'une table 4D en paramètre d'entrée et retourne son numéro. Elle gère le nom des tables aussi bien avec que sans crochets ("[Table 1]" ou "Table 1").


Conclusion


Les communications entre applications sont souvent des accès aux données, vous trouverez ici des méthodes 4D basées sur les services web permettant à des différentes applications 4D de communiquer entre elles. Toutefois, chaque environnement possède ses propres spécificités et ces méthodes pourront être ajustées aux différentes contraintes ou contextes, notamment dans des environnements existants auxquels il faudra bien sûr s'adapter.


Télécharger l'exemple


Télécharger la base exemple.

__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
__________________________________________________
 



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique 4D