4D v16.3

URLs et actions de formulaires

Accueil

 
4D v16.3
URLs et actions de formulaires

URLs et actions de formulaires  


 

 

Le serveur Web 4D propose plusieurs URLs et actions de formulaires HTML spéciaux vous permettant d'effectuer différentes actions dans votre base de données.

Ces URLs sont les suivants :

  • 4DACTION/, permettant de lier un objet HTML à une méthode projet de votre base,
  • 4DCGI/, permettant d'appeler la Méthode base Sur connexion Web depuis tout objet HTML,
  • 4DSYNC/, permettant de synchroniser les données des tables.

En outre, le serveur Web 4D accepte plusieurs URLs supplémentaires :

  • /4DSTATS, /4DHTMLSTATS, /4DCACHECLEAR et /4DWEBTEST, vous permettent d’obtenir diverses informations sur le fonctionnement de votre site Web 4D. Ces URLs sont décrits dans la section Informations sur le site Web.
  • /4DWSDL, permettant d'accéder au fichier de déclaration des Web Services publiés sur le serveur. Pour plus d'informations, reportez-vous à la section Commandes du thème Web Services (Serveur) et au manuel Mode Développement.

Syntaxe : 4DACTION/MaMéthode{/Param}

Utilisation : URL ou Action de formulaire.

Cet URL vous permet de lier un objet HTML (texte, image, bouton...) à une méthode projet 4D. Le lien sera du type /4DACTION/MAMETH/PARAMSMAMETH est le nom de la méthode projet 4D à exécuter lorsque l'utilisateur clique sur le lien et PARAMS un paramètre optionnel de type Texte passé à la méthode dans $1 (reportez-vous ci-dessous au paragraphe “Les paramètres Texte passés aux méthodes via des URLs”).
Lorsque 4D reçoit une requête /4DACTION/MAMETH/PARAMS, la Méthode base Sur authentification Web (si elle existe) est appelée. Si elle retourne Vrai, la méthode MAMETH est exécutée.

4DACTION/ peut être associé à un URL dans une page Web statique. La syntaxe de l’URL sera de la forme suivante : 

<A HREF="/4DACTION/MAMETH/PARAMS"> Faire Quelque Chose</A> 

La méthode projet MAMETH doit généralement retourner une “réponse” (envoi de page HTML via WEB ENVOYER FICHIER ou WEB ENVOYER BLOB, etc.). Veillez à effectuer les traitements les plus courts possibles, afin de ne pas bloquer le navigateur.

Note : Une méthode appelée par 4DACTION ne doit pas faire appel à des éléments d’interface (DIALOGUE, ALERTE...).

Attention : Pour qu’une méthode 4D puisse être exécutée via l’URL 4DACTION/, elle doit disposer de l'attribut “Disponible via les balises HTML et les URLs 4D (4DACTION...)” (désélectionné par défaut), défini dans les propriétés de la méthode. Pour plus d'informations sur ce point, reportez-vous à la section Sécurité des connexions.

Cet exemple décrit l'association de l'URL 4DACTION/ à un objet HTML image afin d'afficher dynamiquement une image dans la page. Vous insérez dans une page HTML statique les instructions suivantes :

<IMG SRC="/4DACTION/PICTFROMLIB/1000">

Le code de PICTFROMLIB est le suivant :

 C_TEXTE($1`Ce paramètre doit toujours être déclaré
 C_IMAGE($VarImage)
 C_BLOB($VarBlob)
 C_ENTIER LONG($Numéro)
  //On récupère le numéro d’image dans la chaîne $1
 $Numéro:=Num(Sous chaine($1;2;99))
 LIRE IMAGE DANS BIBLIOTHEQUE($Numéro;$VarImage)
 IMAGE VERS GIF($VarImage;$VarBlob)
 WEB ENVOYER BLOB($VarBlob;"image/gif")

Le serveur Web 4D permet également d'utiliser des formulaires “postés”, c’est-à-dire des pages HTML statiques renvoyant des données au serveur Web, et de récupérer facilement l'ensemble des valeurs. L’action du formulaire doit impérativement débuter par /4DACTION/NomMéthode.

Note : Un formulaire peut être soumis dans deux modes (4D accepte les deux) :

  • POST, généralement utilisé pour envoyer des données vers le serveur Web - dans une base de données.
  • GET, généralement utilisé pour interroger le serveur Web - données en provenance de la base.

Lorsque le serveur Web reçoit un formulaire posté, il appelle la Méthode base Sur authentification Web (si elle existe). Si elle retourne Vrai, la méthode NomMéthode est exécutée. Dans cette méthode, vous devez appeler la commande WEB LIRE VARIABLES afin de récupérer le nom et la valeur de tous les champs inclus dans une page HTML soumise au serveur.

Note de compatibilité : Dans les bases converties, si l'option "Affectation automatique des variables" de la Page Compatibilité est cochée, la méthode projet spéciale COMPILER_WEB (si elle existe) est appelée au préalable ; 4D récupère les valeurs des champs HTML présents dans le formulaire et remplit automatiquement les variables 4D dans la méthode appelée avec leur contenu si elles portent le même nom. Ce fonctionnement est obsolète. Pour plus d'informations, reportez-vous à la section Traiter les données reçues

La syntaxe HTML à appliquer dans le formulaire est du type suivant :

  • pour la définition de l’action du formulaire :
    <FORM ACTION="/4DACTION/NomMéthode" METHOD=POST>
  • pour la définition d’un champ du formulaire :
    <INPUT TYPE=Type de champ NAME=nom du champ VALUE="Valeur par défaut">

Pour chaque champ du formulaire, 4D affecte la valeur du champ à la variable de même nom.

Dans une base Web 4D, nous souhaitons que les navigateurs puissent effectuer des recherches parmi les enregistrements par l’intermédiaire d’une page HTML statique. Cette page s’intitule “search.htm”. La base contient d’autres pages statiques, permettant par exemple d’afficher le résultat de la recherche (“results.htm”). Le type POST a été associé à la page, ainsi que l’action /4DACTION/SEARCH. Voici le code HTML correspondant à cette page :

<FORM ACTION="/4DACTION/PROCESSFORM" METHOD=POST>
<INPUT TYPE=TEXT NAME=VNAME VALUE=""><BR>
<INPUT TYPE=CHECKBOX NAME=vEXACT VALUE="Mot">Mot entier<BR>
<INPUT TYPE=SUBMIT NAME=OK VALUE="Chercher">
</FORM>

En cours d’utilisation, vous tapez “ABCD” dans la zone de saisie, vous cochez l’option "Mot entier" et validez en cliquant sur Chercher.

Dans la requête envoyée au serveur Web :

VNAME="ABCD"
vEXACT="Mot"
OK="Chercher"

4D appelle la Méthode base Sur authentification Web (si elle existe), puis la méthode projet PROCESSFORM, dont voici le contenu :

 C_TEXTE($1//obligatoire pour le mode compilé
 C_ENTIER LONG($vName)
 C_TEXTE(vNAME;vLIST)
 TABLEAU TEXTE($tabNoms;0)
 TABLEAU TEXTE($tabVals;0)
 WEB LIRE VARIABLES($tabNoms;$tabVals//on récupère toutes les variables du formulaire
 $vName:=Chercher dans tableau($tabNoms;"vNAME")
 vNAME:=$tabVals{$vName}
 Si(Chercher dans tableau($tabNoms;"vEXACT")=-1)  //Si l’option n’a pas été cochée
    vNAME:=VNAME+"@"
 Fin de si
 CHERCHER([Jockeys];[Jockeys]Nom=vNAME)
 DEBUT SELECTION([Jockeys])
 Tant que(Non(Fin de selection([Jockeys])))
    vLIST:=vLIST+[Jockeys]Nom+" "+[Jockeys]Tél+"<BR>"
    ENREGISTREMENT SUIVANT([Jockeys])
 Fin tant que
 WEB ENVOYER FICHIER("results.htm") //Envoi de la liste dans le
  //formulaire results.htm, qui contient une référence à la variable vLIST,
  //par exemple <!--4DHTML vLIST-->
  //...
Fin de si

Syntaxe : 4DCGI/<action>

Utilisation : URL.

Lorsque le serveur Web 4D reçoit l’URL /4DCGI/<action>, la Méthode base Sur authentification Web (si elle existe) est appelée. Si elle retourne Vrai, le serveur Web appelle la Méthode base Sur connexion Web en passant l’URL “tel quel” dans $1.

L’URL 4DCGI/ ne correspond à aucun fichier. Il a pour unique rôle d’appeler 4D via la Méthode base Sur connexion Web. Le paramètre “<action>” peut contenir n’importe quel type d’information.

Cet URL vous permet donc d’effectuer tout type de traitement. Il vous suffit de tester la valeur de $1 dans la Méthode base Sur connexion Web ou dans une de ses sous-méthodes et d’effectuer dans 4D le traitement adéquat. Par exemple, vous pouvez construire des pages HTML statiques entièrement personnalisées d’ajout, de recherche ou de tri d’enregistrements, ou encore générer des images GIF à la volée. Des exemples d’utilisation de cet URL sont fournis dans les descriptions des commandes IMAGE VERS GIF et WEB ENVOYER REDIRECTION HTTP.

A l’issue du traitement, une “réponse” doit être retournée, à l’aide d’une des commandes d’envoi de données (WEB ENVOYER FICHIER, WEB ENVOYER BLOB, etc.).

ATTENTION : Veillez à effectuer les traitements les plus courts possibles, afin de ne pas bloquer le navigateur.

4D envoie des paramètres Texte aux méthodes 4D appelées par des URLs spéciaux (4DACTION/ et 4DCGI/). Voici quelques remarques sur ces paramètres :

  • Même si vous n'utilisez pas ces paramètres, vous devez les déclarer explicitement avec la commande C_TEXTE, sinon des erreurs runtime se produiront lorsque vous accèderez par le Web à une base exécutée en mode compilé. Le message est du type
    "Error in dynamic code
    Paramètres incorrects dans une commande EXECUTER
    Method Name:
    Line Number:
    Description: [<date et heure>]"

    Cette erreur runtime est provoquée par l'absence de déclaration du paramètre texte $1 dans la méthode 4D appelée lorsque vous avez cliqué sur le lien HTML. Comme le contexte de l'exécution est la page HTML courante, l'erreur ne référence pas spécifiquement de ligne de méthode. Déclarer explicitement le paramètre texte $1 permet de supprimer ces erreurs :
      //Méthode projet M_SEND_PAGE
     C_TEXTE($1// Ce paramètre DOIT être explicitement déclaré
      //...
     WEB ENVOYER FICHIER($mapage)
  • Le paramètre $1 retourne des données supplémentaires placées à la fin de l'URL, et peut être utilisé pour passer des données de l'environnement HTML vers l'environnement 4D.

Vous devez déclarer différents paramètres en fonction de l'origine et de la nature de l'appel de la méthode 4D.

  ` Méthode base Sur connexion Web
 C_TEXTE($1;$2;$3;$4;$5;$6` Ces paramètres DOIVENT être explicitement déclarés
  • Méthode appelée par l’URL 4DACTION/
    Vous devez déclarer le paramètre $1 :
  ` Méthode appelée par l'URL 4DACTION/
 C_TEXTE($1` Ce paramètre DOIT être explicitement déclaré
  • Méthode appelée par la balise 4DSCRIPT/
    La méthode retourne une valeur dans $0. Vous devez déclarer les paramètres $0 et $1 :
  ` Méthode appelée par 4DSCRIPT/ sous forme de commentaire HTML
 C_TEXTE($0;$1` Ces paramètres DOIVENT être explicitement déclarés

Syntaxe :
4DSYNC/$catalog
{/NomTable}
4DSYNC/NomTable{/NomTable}{/NomChamp1,...,NomChampN}{Params}

Utilisation : URL en méthode POST ou GET

Cet URL permet de synchroniser les données des tables de la base 4D locale avec une base distante via HTTP. Il peut par exemple être utilisé pour synchroniser une base 4D et une application cliente installée sur un Smartphone ou toute application HTTP tierce.

L'URL 4DSYNC/ peut être utilisé en méthode GET afin de récupérer les données de la base 4D ou en méthode POST afin de mettre à jour les données de la base 4D.

Voici les différentes requêtes HTTP utilisables :

  • GET /4DSYNC/$catalog
    Retourne la liste des tables de la base et leur nombre d'enregistrements. Par exemple pour une structure avec deux tables PERSONS (2 enregistrements) et INVOICES (3 enregistrements), la syntaxe : http://localhost/4DSYNC/$catalog/ retourne dans le navigateur: PERSONS 2 INVOICES 3
  • GET /4DSYNC/$catalog/NomTable
    Retourne la description de la structure de NomTable (format XML).
  • GET /4DSYNC/NomTable/NomChamp1{,NomChamp2},...
    Retourne les données des champs NomChamp de la table NomTable.
  • GET /4DSYNC/NomTable/NomChamp1?$stamp=0&$format=json
    Retourne les données du champ NomChamp de la table NomTable à partir du stamp 0 et au format json.
  • POST /4DSYNC/NomTable/NomChamp1{,NomChamp2},...
    Intègre dans la base 4D les modifications effectuées sur le client.

Note : Le format utilisé pour l'échange des données est le JSON (JavaScript Object Notation). La grammaire complète est disponible auprès des services techniques de 4D SAS.

Note : Pour que les mécanismes de synchronisation soient activés, l'option Autoriser l’accès à la base de données via les URLs 4DSYNC doit être cochée dans la page "Web/Configuration" des Propriétés de la base (cf. ci-dessous). Dans le cas contraire, les requêtes contenant l'URL 4DSYNC échoueront.

Vous devez tenir compte des principes suivants lorsque vous utilisez l'URL 4DSYNC/ :

  • 4D travaille avec la structure virtuelle de la base si elle existe. Dans ce cas, les paramètres NomTable et NomChamp correspondent aux noms de tables et champs tels qu'ils ont été définis via les commandes FIXER TITRES CHAMPS et FIXER TITRES TABLES. A noter que la portée de ces commandes est la session, dans le cadre de 4D Server vous devez les appeler en procédure stockée sur le serveur.
  • La réplication des champs de type Blob et Image n'est pas prise en charge.
  • Pour que la synchronisation puisse être effectuée :
    • Le serveur HTTP doit être lancé.
    • L'option Autoriser l’accès à la base de données via les URLs 4DSYNC doit être cochée dans la page "Web/Configuration" des Propriétés de la base (cf. section Sécurité des connexions).
    • La propriété Activer réplication doit être cochée pour chaque table dont vous voulez synchroniser les données. Si une structure virtuelle a été définie, la table doit être incluse dans cette structure virtuelle. Attention, le fait de cocher cette option publie des informations supplémentaires, vous devez veiller à ce que les accès à votre base de données soient protégés (cf. description de l'option dans la section Sécurité des connexions).
  • Lorsque 4D reçoit une requête /4DSYNC, la Méthode base Sur authentification Web est appelée (hormis en cas de mot de passe incorrect, voir le schéma de connexion dans la section Sécurité des connexions). Si elle retourne Vrai, la requête est exécutée, sinon elle est rejetée.



Voir aussi  

Traiter les données reçues
WEB LIRE VARIABLES

 
PROPRIÉTÉS 

Produit : 4D
Thème : Serveur Web
Nom intl. : URLs and Form Actions

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

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