4D v16.3

Traiter les données reçues

Accueil

 
4D v16.3
Traiter les données reçues

Traiter les données reçues  


 

 

Le serveur Web de 4D vous permet de récupérer les données 'postées', c'est-à-dire les données saisies par les utilisateurs via des formulaires Web et renvoyées au serveur via des boutons ou des éléments d'interface, en mode POST ou en mode GET.

Le serveur Web accepte plusieurs URLs spécifiques pouvant être associées aux boutons afin que l'envoi du formulaire déclenche le traitement côté serveur. Ces URLs sont décrits dans la section URLs et actions de formulaires.

Ce chapitre présente les principes à mettre en oeuvre afin de récupérer les données présentes dans les formulaires ayant été retournés au serveur.

Lorsque le serveur Web reçoit un formulaire "posté", vous pouvez récupérer dans 4D les valeurs des objets HTML qu'il contient. Ce principe peut être mis en oeuvre dans le cas d'un formulaire Web, envoyé par exemple avec WEB SEND FILE ou WEB SEND BLOB, dans lequel l'utilisateur saisit ou modifie des valeurs puis clique sur le bouton de validation. Dans ce cas, 4D peut récupérer les valeurs des objets HTML présents dans la requête de deux manières :

La commande WEB GET VARIABLES permet de récupérer les valeurs sous forme de textes, tandis que les commandes WEB GET BODY PART et WEB Get body part count permettent notamment de récupérer des fichiers postés, via des BLOBs.

Note de compatibilité (4D v13.4) : Dans les versions précédentes, 4D recopiait directement la valeur des variables reçues via un formulaire Web posté ou un URL GET, dans des variables process 4D (en mode compilé, ces variables devaient être déclarées dans la méthode COMPILER_WEB). Ce fonctionnement est supprimé à compter de 4D v13.4 ; il est maintenu par compatibilité dans les bases de données converties mais peut être désactivé à l'aide de l'option de compatibilité Affectation automatique des variables dans la Page Compatibilité des Propriétés de la base (il est recommandé de désélectionner cette option et d'utiliser les commandes WEB GET VARIABLES ou WEB GET BODY PART dans vos bases).

Considérons cette page de code HTML :

<html>
<head>
  <title>Welcome</title>
  <script language="JavaScript"><!--
function GetBrowserInformation(formObj){
formObj.vtNav_appName.value = navigator.appName
formObj.vtNav_appVersion.value = navigator.appVersion
formObj.vtNav_appCodeName.value = navigator.appCodeName
formObj.vtNav_userAgent.value = navigator.userAgent
return true
}
function LogOn(formObj){
if(formObj.vtUserName.value!=""){
return true
} else {
alert("Enter your name, then try again.")
return false
}
}
//--></script>
</head>
<body>
<form action="/4DACTION/WWW_STD_FORM_POST" method="post"
 name="frmWelcome"
 onsubmit="return GetBrowserInformation(frmWelcome)">
  <h1>Welcome to Spiders United</h1>
  <p><b>Please enter your name:</b>
  <input name="vtUserName" value="" size="30" type="text"></p>
  <p> 
<input name="vsbLogOn" value="Log On" onclick="return LogOn(frmWelcome)" type="submit"> 
<input name="vsbRegister" value="Register" type="submit">
<input name="vsbInformation" value="Information" type="submit"></p>
<p> 
<input name="vtNav_appName" value="" type="hidden"> 
<input name="vtNav_appVersion" value="" type="hidden"> 
<input name="vtNav_appCodeName" value="" type="hidden">
<input name="vtNav_userAgent" value="" type="hidden"></p>
</form>
</body>
</html>

Lorsque la page est envoyée au navigateur Web par 4D, elle se présente ainsi :

Voici les caractéristiques de cette page :

  • Elle comporte trois boutons Submit : vsbLogOn, vsbRegister et vsbInformation.
  • Le Submit du formulaire quand vous cliquez sur LogOn est d'abord traité par la fonction JavaScript LogOn. Si aucun nom n'a été saisi, le formulaire n'est pas envoyé à 4D et une alerte JavaScript est affichée.
  • Le formulaire comporte une méthode 4D POST et un script Submit (GetBrowserInformation) qui copie les propriétés du navigateur dans quatre objets cachés dont les noms commencent par vtNav_App.
  • Vous remarquez aussi l'objet vtUserName.

Examinons maintenant la méthode 4D (nommée ici WWW_STD_FORM_POST) qui est appelée lorsque l'utilisateur clique sur l'un des boutons du formulaire HTML :

  // Récupération de la valeur des variables
 ARRAY TEXT($tabNoms;0)
 ARRAY TEXT($tabValeurs;0)
 WEB GET VARIABLES($tabNoms;$tabValeurs)
 C_TEXT($user)
 
 Case of
 
         // Le bouton Log On a été cliqué
    :(Find in array($tabNoms;"vsbLogOn")#-1)
       $user :=Find in array($tabNoms;"vtUserName")
       QUERY([WWW Users];[WWW Users]UserName=$tabValeurs{$user})
       $0:=(Records in selection([WWW Users])>0)
       If($0)
          WWW POST EVENT("Log On";WWW Log information)
            // La méthode WWW POST EVENT sauvegarde l'information dans une table de la base
       Else
 
          $0:=WWW Register
            // La méthode WWW Register permet à un nouvel utilisateur Web de s'enregistrer
       End if
 
         // Le bouton Register a reçu un clic souris
    :(Find in array($tabNoms;"vsbRegister")#-1)
       $0:=WWW Register
 
         // Le bouton Information a reçu un clic souris
    :(Find in array($tabNoms;"vsbInformation")#-1)
       WEB SEND FILE("userinfos.html")
 End case

Voici les caractéristiques de cette méthode :

  • Les valeurs des variables vtNav_appName, vtNav_appVersion, vtNav_appCodeName et vtNav_userAgent (liées aux objets HTML de même nom) sont récupérées via la commande WEB GET VARIABLES à partir des objets HTML créés par le script JavaScript GetBrowserInformation.
  • Parmi les variables vsbLogOn, vsbRegister et vsbInformation liées aux trois boutons Submit, seule celle qui correspond au bouton ayant reçu le clic sera récupérée par la commande WEB GET VARIABLES. Quand le submit est effectué par l'un de ces trois boutons, le navigateur retourne à 4D la valeur du bouton sur lequel on a cliqué. Ce principe vous indique sur quel bouton on a cliqué. Notez que les boutons 4D (dans un formulaire 4D) sont des variables numériques. En revanche, en HTML, tous les objets sont des objets texte.

Si vous utilisez un objet SELECT, c'est la valeur de l'élément sélectionné dans l'objet qui est retournée dans la commande WEB GET VARIABLES, et non la position de l'élément dans le tableau comme dans 4D.

Les valeurs retournées par WEB GET VARIABLES sont toujours de type texte.

A compter de 4D v15 R3, le serveur Web intégré de 4D prend en charge le mécanisme d'encodage de transfert morcelé (chunked transfer encoding) pour les fichiers téléchargés vers le serveur (upload). L'encodage de transfert morcelé est un mécanisme de transmission des données spécifié dans le protocole HTTP/1.1. Il permet de commencer à transférer des données via une série de "chunks" (morceaux) sans qu'il soit nécessaire de connaître la taille finale des données.

Note : Le serveur Web 4D prend également en charge l'encodage de transfert morcelé pour le téléchargement des données du serveur vers les clients Web (cf. WEB SEND RAW DATA).

Pour plus d'informations sur l'implémentation côté client des transferts morcelés, veuillez vous reporter à la RFC7230 ou à la page qui lui est consacrée sur Wikipedia

La méthode COMPILER_WEB, si elle existe, est systématiquement appelée lorsque le serveur HTTP reçoit une requête dynamique et appelle le moteur de 4D. C'est par exemple le cas lorsque le serveur Web 4D reçoit un formulaire posté ou un URL contenant l'action 4DCGI/. Cette méthode est destinée à contenir les directives de typage et/ou d’initialisation de variables utilisées lors des échanges Web. Elle sera utilisée par le compilateur en cas de compilation de la base. La méthode COMPILER_WEB est commune à toutes les pages Web. Par défaut, la méthode COMPILER_WEB n’existe pas. Vous devez la créer explicitement.

Web Services : La méthode projet COMPILER_WEB est également appelée, si elle existe, à chaque requête SOAP acceptée. Vous devez utiliser cette méthode pour déclarer toutes les variables 4D associées à des arguments SOAP entrants et ce, pour toutes les méthodes publiées comme Web Services. En effet, l’utilisation de variables process dans les méthodes Web Services nécessite leur déclaration avant l’appel de la méthode. Pour plus d'informations sur ce point, reportez-vous à la description de la commande SOAP DECLARATION.



Voir aussi  

Balises de transformation 4D
URLs et actions de formulaires
WEB GET BODY PART
WEB SEND BLOB
WEB SEND FILE

 
PROPRIÉTÉS 

Produit : 4D
Thème : Serveur Web

 
HISTORIQUE 

Modifié : 4D v15 R3

 
MOTS-CLÉS 

chunked transfer encoding, COMPILER_WEB

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)