Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Connecter des applications 4D au travers de SOAP

Date de publication : Mai 2004

Par Jean-Yves FOCK-HOON (Manager assurance qualité, 4D Inc.)
 


I. Résumé
II. Introduction
III. Le concept
La méthode s44D_NewProcess
Installation du composant
Améliorations possibles
Fonctionnalités
Base exemple
IV. En résumé
V. Bases exemples


I. Résumé

L'une des fonctionnalités les plus intéressantes introduites par 4D 2003 consiste dans la prise en charge du protocole de service Web SOAP. Il vous est maintenant facile d'interroger ou de publier un service Web depuis 4D. Cette note technique présente les avantages apportés par SOAP dans le cadre des services Web, et décrit la réalisation d'un service Web fondé sur SOAP.


II. Introduction

SOAP permet à un client d'exécuter un script, faisant partie du service Web, sur le serveur SOAP. Ce service peut recevoir des paramètres et retourner des résultats. L'exemple classique consiste à proposer la conversion d'un montant d'une monnaie dans une autre. Notre document décrira l'utilisation d'un service Web permettant à une application 4D de retrouver ou mettre à jour des enregistrements dans une autre base 4D.

NdT : Généralement cependant les services Web ne travailleront pas au niveau physique, celui des tables et des enregistrements, mais proposeront une couche d'abstraction les situant au niveau métier. Ainsi, permettre d'effectuer une recherche sur la table [CLIENT] pour connaître le montant du champ [CLIENT]Solde impose de connaître le modèle physique des données, ce qui limite l'évolutivité de la solution. Un service Web publiera en général plutôt une fonction Lire Solde Client (identifiant du client).

Il existe plusieurs approches pour la tâche désirée. La plus simple consiste à mettre en oeuvre une solution d'import/Export utilisant des échanges de fichiers par email, FTP,... Dans ce cas, l'application cible utilise un process en tâche de fond pour récupérer les données.

Une autre approche consiste à exécuter une méthode sur le serveur au moyen d'une requête Web (véhiculée par le protocole HTTP). La balise semi-dynamique 4DACTION ou l'emploi de 4DCGI vous permettent de déclencher l'exécution de code côté serveur HTTP. Mais l'échange de paramètres est limité et vous devez documenter manuellement vos points d'entrée. Il vous revient également de convertir vos types de données en texte pour les insérer dans les requêtes http, puis de les décoder côté serveur.
L'avantage de cette solution est de passer au travers des firewalls sur un port standard, en général le port 80.

Une troisième possibilité repose sur le driver ODBC pour 4D Server ou sur 4D Open pour 4D. Avec 4D Open pour 4D, vous pouvez créer un process, gérer des sélections, et faire à peu près ce que vous voulez. Inconvénients de cette technologie :

  • Elle est propriétaire, seul un moteur 4D peut se connecter au serveur ;

  • Seule la connexion à un 4D Server est possible ;

  • Le port 19813 doit être ouvert sur les firewalls ce qui n'est pas toujours facile à obtenir ;

  • Il s'agit d'un fonctionnement en mode connecté, sensible au time-out ou aux aléas du réseau. Lorsqu'une connexion est interrompue pour l'une de ces raisons, 4D Server tue le process et pert évidemment le contexte courant ;

  • Il n'est pas facile d'exécuter des traitements sur le serveur et de récupérer de l'information. Cela vous oblige généralement à re-développer de la logique applicative côté client 4D Open, ce qui est évidemment regrettable, tant du point de vue du développement, que de la maintenance.


La solution 4D Open pour 4D représente l'approche la plus commune. Cependant, pour que l'application 4D Open puisse mettre à jour un enregistrement, elle doit effectuer les tâches suivantes :

  • Se connecter à 4D Server ;

  • Rechercher l'enregistrement ;

  • Transférer les valeurs mises à jour ;

  • Demander le stockage de l'enregistrement.


Une autre solution consiste à concevoir une méthode SOAP à laquelle vous pouvez passer des paramètres : pour identifier l'enregistrement et définir les valeurs à mettre à jour. Dans ce cas, l'exécution de code s'effectue côté serveur, contrairement à l'implémentation 4D Open.

Quelle est la différence entre l'approche SOAP et l'appel d'une méthode au travers d'une requête http ? En effet, dans ce dernier cas vous pouvez également passer des paramètres nommés en utilisant un POST ; le process Web reçoit ces paramètres et peut mettre à jour l'enregistrement, puis il peut ou non retourner comme résultat une page HTML, ou bien mieux une structure XML.

Une différence fondamentale est qu'il vous revient d'ouvrir une connexion TCP, construire et envoyer la requête en sérialisant les paramètres, puis attendre le résultat afin de le traiter, désérialiser le résultat et de signaler une éventuelle erreur. Cela demande pas mal de code propriétaire. A l'opposé, la solution SOAP se charge de tout cela au travers d'un protocole standardisé.

Il vous revient simplement d'appeler le service Web avec les paramètres adéquats et de récupérer un éventuel résultat. Tout comme vous le faites avec une méthode locale. Cependant, la solution 4D Open pour 4D présente un avantage. Elle permet de disposer d'un process sur le serveur, avec lequel une connexion reste active, et autorise ainsi à conserver un contexte : sélection, enregistrement courant, variables process. Que ce soit pour une requête SOAP ou HTTP, une fois que le serveur a renvoyé sa réponse, le contexte est perdu. On parle alors de mode déconnecté.

A tout problème sa solution. Les services Web sont pratiques pour envoyer des paramètres et recevoir des résultats. Alors, pourquoi ne pas disposer d'un jeu de méthodes qui se comportent comme 4D Open pour 4D ? L'objectif, bien évidemment, n'étant pas de remplacer 4D Open pour 4D, mais de procurer une alternative crédible.

Nous pouvons déclencher la connexion. Cela crée à l'intérieur de l'application cible un process disposant d'un identifiant unique. Chaque requête SOAP ultérieure devra fournir cet identifiant unique. Chaque méthode du service Web devra vérifier l'identifiant reçu, et retrouver le process avec lequel elle doit communiquer. Comme il s'agit d'un process normal, il demeure toujours actif sur le serveur et peut conserver un contexte, tout comme un process 4D Open. Un autre avantage de cette solution est de vous affranchir de 4D Server. Vous pouvez maintenant vous connecter à tout moteur 4D capable de publier un service Web, c'est-à-dire ayant son serveur Web activé.


III. Le concept

Résumons le concept : la base cible servie par 4D ou 4D Server joue le rôle de serveur SOAP (désignée par le nom Serveur). L'application client (également 4D ou 4D Server) joue le rôle de client SOAP (désigné par le nom Client).
Le client désire ouvrir une connexion et exécuter un TOUT SELECTIONNER, puis refermer la connexion.
Voici le code que le Client devra exécuter :

   s44D_vTableiD:=1

   proxy_s44D_NewConnection (s44d_userName;s44d_password;s44d_taskName)
   proxy_s44D_AllRecords (s44D_vConnectionID;s44D_vTableID)

   proxy_s44D_CloseConnection (s44D_vConnectionID)

  • s44D_vTableiD est la variable qui contient le n° séquentiel de la table sur laquelle nous désirons exécuter le TOUT SELECTIONNER.

  • Le Client demande une connexion au Serveur. Il exécute la méthode proxy_s44D_NewConnection. Il s'agit d'une méthode proxy qui appelle le service Web s44D_NewConnection. Cette méthode a été générée par l'assistant de service Web après analyse du WSDL généré par le Serveur.

  • Le Serveur reçoit la requête et le service Web s44D_NewConnection est exécuté. Le service Web crée le nouveau process et lui affecte un ID de session. La méthode utilisée pour ce process est s44D_NewProcess.

La méthode s44D_NewProcess

Cette méthode n'est rien de plus qu'un grand Au cas ou inclus dans une boucle, le tout accompagné de quelques déclarations de variables. Une fois entré dans la boucle, le code est mis en pause pour éviter de consommer du temps CPU. Si un service Web a besoin d'exécuter une action, il met à jour certaines variables du process, non seulement les paramètres, mais également la variable CodeAction traitée dans le Au cas ou.

Ensuite le service Web réveille le process ; le process vérifie la variable CodeAction qui détermine l'action à exécuter. Une fois exécutée, et si l'action demandée n'a pas mis fin au process, celui-ci boucle à nouveau et se met en pause jusqu'à ce que le traitement d'une nouvelle action soit demandé.

Chaque process est créé avec un ID de session qui est stocké dans un tableau inter-process de manière synchronisée avec le numéro du process. L'ID de session est retourné au Client.

  • Le Client veut réaliser un TOUT SELECTIONNER. Il appelle la méthode proxy_s44D_AllRecords qui va appeler le service Web s44D_AllRecords. L'ID de session et le n° de table sont passés en paramètres.

  • le service Web vérifie l'ID, puis transmet la requête au process approprié en utilisant ECRIRE VARIABLE PROCESS ou VARIABLE VERS VARIABLE, et réveille le process approprié.

  • le process se réveille et vérifie la variable CodeAction. Au travers du grand Au cas ou, l'action souhaitée est trouvée et la commande est exécutée. Un résultat est retourné au service Web. Le process se remet en pause.

  • le service Web reçoit le résultat du process, puis retourne le résultat (ou/et un code d'erreur) au Client.

  • le Client veut refermer la connexion. Il appelle la méthode proxy_s44D_CloseConnection qui va appeler le service Web s44D_CloseConnection. L'ID de session est fournie en paramètre.

  • le service Web vérifie l'ID, et transmet la requête au process approprié, puis réveille ce process.

  • le process se réveille et vérifie la variable CodeAction. En suivant le grand Au cas ou, l'action correspondante est trouvée et exécutée. Les résultats sont retournés au service Web et le process meurt.

  • le service web reçoit le résultat du process, l'ID de session est retiré de la liste des Ids de session, et le résultat (ou le code d'erreur) est renvoyé au Client.

Installation du composant

La base exemple comprend deux composants différents. Le premier contient tout ce qui est relatif au côté serveur. Ce composant doit s'installer dans l'application cible. Un appel à la méthode Compiler_Arrays_Inter est nécessaire à l'ouverture de l'application. Cette méthode contient la déclaration des tableaux synchronisés qui nous permettent de savoir quel process est lié à un identifiant de session.

Le second composant prend en charge le côté Client. Il contient les méthodes proxy d'appel des méthodes publiées par le service Web. La déclaration de chaque variable est également obligatoire : méthodes COMPILER. Vous pouvez également appeler la méthode proxy_InitVariables et changer les valeurs par défaut afin par exemple de définir l'URL du serveur SOAP ou le numéro de port de publication.


Améliorations possibles

Ces composants sont fournis en l'état. Comme le code est générique, vous pouvez avoir affaire à des problèmes de performance. Ce code peut ne pas satisfaire complétement vos besoins et vous serez peut-être conduits à le modifier ou à l'optimiser pour votre propre application. L'ajout de nouvelles fonctionnalités est très simple car tout part de la méthode d'aiguillage s44d_NewProcess.

Par exemple, si vous souhaitez ajouter la commande DEBUT TRANSACTION, il vous suffit d'insérer un nouvel item dans le grand Au cas ou de cette méthode, par exemple entre le cas SELECTION VERS TABLEAU et le cas REUNION. Le code de déclenchement pourrait être "DebutTransaction". Ensuite, vous devrez créer une nouvelle méthode s44d_DebutTransaction qui communiquera avec le nouveau process. La méthode s44D_AllRecords peut servir de modèle. L'étape finale consistera à créer la méthode proxy qui appellera ce nouveau point d'entrée du service Web.


Fonctionnalités

Tous les services Web sont fournis avec leurs méthodes proxy. Ces méthodes proxy sont des méthodes génériques qui vous faciliteront l'appel des fonctions.

Voici la liste de tous les services Web opérationnels dans ces composants :

  • S44D_AddToSet : Cette méthode attend 3 paramètres, l'ID de connexion, l'ID de la table, et le nom de l'ensemble. Ce service Web ajoute l'enregistrement courant de la table désignée à l'ensemble cible au moyen de la commande ADJOINDRE ELEMENT. Le code action correspondant est "AddToSet".

  • S44D_AllRecords : Cette méthode attend 2 paramètres, l'ID de connexion et l'ID de la table. Elle exécute un TOUT SELECTIONNER sur la table désignée. Le code action correspondant est "AllRecords".

  • S44D_ArrayToSelection : Cette méthode attend 3 paramètres, l'ID de connexion, l'ID de la table, et le BLOB qui contient tous les tableaux. Le service Web décode les tableaux stockés dans le BLOB, puis effectue un TABLEAU VERS SELECTION pour chaque tableau. La limitation de cette fonctionnalité provient du fait que 4D ne supporte pas tous les types de tableau, par conséquent cette commande ne fonctionne pas pour tous les types de champs. Le code défini dans la méthode s44D_NewProcess pour gérer cette commande peut nécessiter des modifications pour s'adapter à votre structure de données. Le code action correspondant est "ArrayToSelection".

  • S44D_ClearNamedSelection : Cette méthode attend 2 paramètres, l'ID de connexion et le nom de la sélection temporaire à effacer. Ce service Web exécute la commande EFFACER SELECTION. Le code action correspondant est "ClearNamedSelection".

  • S44D_ClearSet : Cette méthode attend 2 paramètres, l'ID de connexion et le nom de l'ensemble à effacer. Elle utilise la commande EFFACER ENSEMBLE. Le code action correspondant est "ClearSet".

  • S44D_CloseConnection : cette méthode attend un paramètre, l'ID de connexion. Elle positionne la variable locale $closeProcess à Vrai. Le process courant vérifie si la variable est à Vrai et se termine. Le code action correspondant est "CloseConnection".

  • S44D_CopyNamedSelection : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de table et le nom la nouvelle sélection temporaire à créer. Elle crée une sélection temporaire en utilisant la commande COPIER SELECTION. Le code action correspondant est "CopyNamedSelection".

  • S44D_CopySet : Cette méthode attend 3 paramètres, l'ID de connexion, le nom de l'ensemble source et le nom de l'ensemble cible. Elle utilise la commande COPIER ENSEMBLE. Le code action correspondant est "CopySet".

  • S44D_CountTables : Cette méthode attend un paramètre, l'ID de connexion. Elle retourne le nombre de tables en appelant la fonction Nombre de tables. Cette méthode n'interagit pas avec le process désigné. C'est pourquoi il n'y a pas de code action correspondant.

  • S44D_CreateSet : Cette méthode attend 3 paramètres, l'ID de connexion, l'ID de table et le nom du nouvel ensemble. Elle crée un nouvel ensemble en appelant la commande CREER ENSEMBLE sur la sélection courante. Le code action correspondant est "CreateSet".

  • S44D_CutNamedSelection : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de table et le nom de la nouvelle sélection temporaire à créer. Elle déplace la sélection courante vers une nouvelle sélection temporaire en utilisant la commande DEPLACER SELECTION. Le code action correspondant est "CutNamedSelection".
  • S44D_DeleteRecord : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Elle supprime l'enregistrement courant de la table cible en appelant la commande SUPPRIMER ENREGISTREMENT. Le code action correspondant est "DeleteRecord".

  • S44D_DeleteSelection : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Ce service Web supprime la sélection courante de la table cible en appelant la commande SUPPRIMER SELECTION. Le code action correspondant est "DeleteSelection".

  • S44D_Difference : cette méthode attend 4 paramètres, l'ID de connexion et 3 noms d'ensembles. Le service Web créé un nouvel ensemble à partir des deux premiers ensembles passés en appelant la commande DIFFERENCE. Le code action correspondant est "Difference".

  • s44D_FirstRecord : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Elle exécute la commande DEBUT SELECTION sur la table cible. Le code action correspondant est "FirstRecord".

  • S44D_FlusBuffers : cette méthode attend un paramètre, l'ID de connexion. Elle exécute ECRIRE CACHE. Cette méthode n'interagit pas avec le process désigné. C'est pourquoi il n'existe pas de code correspondant.

  • S44D_GetAllTableNames : cette méthode attend un paramètre, l'ID de connexion. Elle retourne un tableau de tous les noms de table obtenus par la fonction Nom de la table. Cette méthode n'interagit pas avec le process désigné. C'est pourquoi il n'existe pas de code correspondant.

  • S44D_GetTableProperties : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de la table. Elle retourne différents tableaux et variables qui décrivent la table et la liste des champs. Elle utilise les commandes LIRE PROPRIETES CHAMP, LIRE PROPRIETES SAISIE CHAMP. Cette méthode n'interagit pas avec le process désigné. C'est pourquoi il n'existe pas de code correspondant.

  • S44D_GoToSelectedRecord : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de la table et le numéro de l'enregistrement à atteindre. Elle exécute la commande ALLER DANS SELECTION sur la table désignée. Le code action correspondant est "GotoSelectedRecord".

  • S44D_Intersection : cette méthode attend 4 paramètres, l'ID de connexion et les 3 noms d'ensembles requis par la commande. Elle crée un nouvel ensemble à partir des deux premiers ensembles passés en paramètre en appelant la commande INTERSECTION. Le code action correspondant est "Intersection".

  • S44D_IsInSet : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de table et le nom de l'ensemble. Elle retourne un booléen indiquant si l'enregistrement courant de la table désignée est membre de l'ensemble cible. Elle utilise la fonction Appartient a ensemble. Le code correspondant est "IsInSet".

  • S44D_LastRecord : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de la table. Elle exécute la commande ALLER A DERNIER ENREGISTREMENT sur la table cible. Le code action correspondant est "LastRecord".

  • s44D_LoadRecord : cette méthode SOAP attend 2 paramètres, l'ID de connexion et l'ID de table cible. Elle exécute la commande CHARGER ENREGISTREMENT sur la table désignée. Une fois l'enregistrement chargé, le contenu de l'enregistrement est stocké dans une variable BLOB en utilisant la commande VARIABLE VERS BLOB. Le code action correspondant est "LoadRecord".

  • S44D_NewConnection : cette méthode SOAP attend 3 paramètres, un nom d'utilisateur, un mot de passe et un nom de tâche. C'est dans cette méthode que vous pouvez authentifier l'utilisateur courant. Vous pouvez accepter ou refuser de créer une nouvelle connexion. Dans le cas d'un refus, vous pouvez retourner l'un des codes d'erreur proposés. En cas d'acceptation, vous pouvez créer le process et mettre à jour les tableaux inter-process qui listent les IDs de connexions valides et les ID de leur process. Le code action correspondant est "NewConnexion".

  • S44D_NewRecord : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de table et l'enregistrement stocké dans une variable BLOB. Elle relit toutes les valeurs depuis le BLOB et crée un nouvel enregistrement contenant ces valeurs pour la table désignée. Le code action correspondant est "NewRecord".

  • S44D_NextRecord : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de la table cible. Elle exécute la commande ENREGISTREMENT SUIVANT sur la table désignée. Le code correspondant est "NextRecord".

  • S44D_OrderBy : cette méthode attend 5 paramètres, l'ID de connexion, l'ID de table devant être triée, les IDS des champs à trier et les ID de leur table d'appartenance, plus le sens du tri. Elle exécute la commande TRIER sur la table cible. Les trois derniers paramètres sont des tableaux. Le tableau des sens de tri doit contenir le caractère '<' ou '>'. Le code action correspondant est "OrderBy".

  • S44D_PreviousRecord : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Elle exécute la commande ENREGISTREMENT PRECEDENT sur la table désignée. Le code action correspondant est "PreviousRecord".

  • S44D_Query : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de la table cible et un BLOB qui contient les champs et les valeurs à rechercher. Elle ne requiert aucun tableau car ceux-ci sont contenus dans le BLOB passé en paramètre. Ceci afin de montrer que le BLOB peut servir dans les deux sens. La variable BLOB contient deux tableaux d'entiers longs et un tableau texte. Le tableau d'ID de champs définit les champs à utiliser, le tableau des opérateurs définit les conditions (1 pour =, 2 pour #, 3 pour >, 4 pour >=, 5 pour <, 6 pour <=) et le tableau texte détermine les valeurs à rechercher. Cette méthode construit une requête exécutée par la commande CHERCHER sur la table cible. Le code action correspondant est "Query".

  • S44D_RecordsInSelection : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Elle retourne le nombre d'enregistrements de la sélection courante de la table désignée en appelant la fonction Enregistrements trouves. Le code action correspondant est "RecordsInSelection".

  • s44D_RecordsInSet : cette méthode attend 2 paramètres, l'ID de connexion et le nom de l'ensemble. Elle retourne le nombre d'enregistrements de l'ensemble cible en appelant la fonction Enregistrements dans ensemble. Le code action correspondant est "RecordsInSet".

  • S44D_RecordsinTable : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Elle retourne le nombre total d'enregistrements de la table cible en appelant la fonction Enregistrements dans table. Le code action correspondant est "RecordsInTable".

  • S44D_ReduceSelection : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de la table et le nombre d'enregistrements de la sélection. Elle réduit la sélection courante de la table désignée au nombre spécifié en paramètre en appliquant la commande REDUIRE SELECTION. Le code action correspondant est "ReduceSelection".

  • S44D_RemoveFromSet : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de table et le nom de l'ensemble. Elle retire l'enregistrement courant de la table désignée de l'ensemble cible en appliquant la commande ENLEVER ELEMENT. Le code action correspondant est "RemoveFromSet".

  • S44D_SelectionToArray : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de la table. Elle créé un tableau pour chaque champ utilisable et sauve ces tableaux dans une variable BLOB. Cette variable BLOB est retournée au client proxy qui relit les tableaux. La commande principale utilisée est SELECTION VERS TABLEAU. Le code action correspondant est "SelectionToArray".

  • S44D_Union : cette méthode attend 3 paramètres, l'ID de connexion et les 3 noms d'ensemble requis pour l'exécution. Elle crée un nouvel ensemble à partir des deux premiers passés en paramètre en utilisant la commande REUNION. Le code action correspondant est "Union".

  • S44D_UnloadRecord : cette méthode attend 2 paramètres, l'ID de connexion et l'ID de table. Elle exécute LIBERER ENREGISTREMENT sur la table désignée. Le code action correspondant est "UnloadRecord".

  • S44D_UpdateRecord : cette méthode attend 3 paramètres, l'ID de connexion, l'ID de la table et l'enregistrement stocké dans un BLOB. Elle relit toutes les valeurs depuis le BLOB, met à jour puis sauvegarde l'enregistrement existant avec ces valeurs en se basant sur l'ID de table. Le code action correspondant est "UpdateRecord".

  • S44D_UsenamedSelection : cette méthode attend 2 paramètres, l'ID de connexion et le nom de la sélection temporaire. Elle exécute la commande UTILISER SELECTION avec le nom passé en paramètre. Le code action correspondant est "UsenamedSelection".

  • s44D_UseSet : cette méthode attend 2 paramètres, l'ID de connexion et le nom de l'ensemble à utiliser. Elle exécute la commande UTILISER ENSEMBLE sur l'ensemble passé en paramètre. Le code action correspondant est "UseSet".

Base exemple

Comme vous pouvez le constater, cette application contient à la fois le code source du côté client et serveur. Elle contient également une interface permettant de tester toutes les fonctions implémentées. Cependant, le seul objectif de cette interface est d'illustrer les principes décrits ici. Lors d'une sélection de l'item Démarrer du menu Démo, un dialogue contenant deux onglets s'affiche. Vous pouvez cliquer sur "Lire information" pour retrouver la liste courante des tables. Depuis la liste des tables, vous pouvez sélectionner une table pour récupérer la liste courante des champs définis pour cette table.

Le second onglet ne fait rien d'autre que créer quelques enregistrements, et les mettre à jour, ou jouer avec des sélections nommées, des ensembles, et ainsi de suite. Vous pouvez regarder le code source de ces scripts pour voir comment chacun de ces services Web peut être invoqué.

L'approche utilisée dans ce composant est identique à celle utilisée pour le plug-in 4D Open pour 4D. Lors de l'utilisation de ce composant, conservez seulement à l'esprit qu'après chaque appel, il est recommandé de vérifier les paramètres retournés ou tout code d'erreur, comme lors de l'utilisation de n'importe quel plug-in 4D. Pensez également qu'aucun de ces process ne se terminera par un time out. Vous aurez peut-être à implémenter votre propre système de time out si vous ne voulez pas de process fonctionnant indéfiniment sur votre serveur.

Le moyen le plus simple pour le mettre en place consiste à assigner un time stamp à une variable juste avant de mettre en pause le process dans la méthode s44D_NewProcess, puis d'utiliser un process en tâche de fond qui vérifiera cette variable pour tous les process et réveillera les process à terminer en leur passant la requête CloseConnection. Les tableaux inter-process sont également à mettre à jour pour refléter ce changement.


IV. En résumé

Ce code générique peut représenter une approche novatrice pour les développeurs qui souhaitent gérer des enregistrements entre des applications 4D. Cependant, conservez à l'esprit que l'objectif de cette note technique n'est pas de remplacer 4D Open pour 4D, mais de proposer une alternative, chaque technologie présentant ses avantages et ses inconvénients...

Gardez également présent à l'esprit, qu'en dépit de l'orientation multi plate forme de SOAP, ce service Web n'est consommable que par des clients 4D, les objets manipulés étant liés au langage propriétaire de 4D.


V. Bases exemples

Téléchargez les bases exemples :

base exemple Mac

base exemple Windows

__________________________________________________
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