Manuel

Composition d'une page par le serveur web

 

Une page web telle qu'affichée dans un navigateur n'existe jamais telle quelle dans votre application. En effet son contenu est généralement contextuel et dépend de toute une série de paramètres (qui est connecté, quel enregistrement est affiché..). Ces pages sont donc le résultat d'un calcul.

 

Un site web a en général toute une partie qui est commune à l'ensemble des pages qui le composent. Les menus de navigation par exemple se retrouvent sur toutes les pages. Ces parties communes sont isolées au sein de blocs et appelées sur l'ensemble des pages. Les pages web utilisent en général des éléments communs, comme des feuilles de styles en css. Ces éléments sont sous forme de ressources web indépendantes afin qu'elles ne soient envoyées qu'une et une seule fois au navigateur qui les gardera ensuite dans son cache.

 

Avec ou sans le composeur de menu ?

 

Votre logiciel dispose d'un puissant outil de personnalisation de site : le composeur de menu. Cependant, dans certains cas vous pouvez être amenés à redéfinir complètement votre application. Vous devrez alors vous passer des services de cet outil et tout traiter "à la main".

 

L'explication sur la composition d'une page sera donc découpée en deux parties : les principes généraux (ie : sans référence au composeur de menu) et l'architecture du site avec les menus dynamiques.

 

Composition d'une page

 

Les ressources

 

Proposées en préférences de votre logiciel, les ressources du web se divisent en deux grandes catégories : les ressources "File://..." et les ressources "AWEB_...". Citons également les ressources "email_..." qui exploitent les mêmes mécanismes que ce qui est décrit ci-après dans le cadre d'envoi de emails.

 

Ressource "File://..."

 

Lorsqu'une URL est adressée au serveur, ce dernier va chercher une ressource dont le nom correspond à l'URL (exemple : "File://Record.htm" pour une URL du type : "http://monserveur.net/Record.htm?record=..."). Cette ressource contient toute la structure de la page et peut faire appel à des blocs qui peuvent être utilisés pour d'autres pages.

 

Une ressource "File://..." peut contenir différents types d'informations : HTML ; TEXT ; CSS ; JS ; XML ; SRC, le serveur ne tient pas compte de l'extension de la ressource et aucune conversion (autre que celle appliquée aux chaînes de caractères qui la composent) n'est appliquée à son contenu. Le contenu d'une ressource doit pouvoir être exprimée sous forme de caractères. Dans d'autre cas (une image, un flash par exemple), il conviendra de placer le fichier dans le dossier Webfolder (ie : son contenu ne sera pas dynamique).

 

 

NB : par défaut, les ressources "File://..." sont envoyées avec le type mime "text/html". Les ressources se terminant par .css  le sont avec le type "text/css", les ressources contenant .x (xml) le sont avec le type "text/xml".

 

 

Ressource "AWEB_..."

 

 

Ces ressources sont toujours exploitées soit au sein d'une ressource "File://...", soit au sein d'une ressource "email_...", soit au sein d'une autre ressource "AWEB_...". Lors du calcul du contenu d'une page, la ligne correspondant à l'appel du bloc AWEB_... est remplacée par le contenu du bloc.

 

L'intérêt de ce genre de ressource est double : faire en sorte qu'une séquence html figurant sur plusieurs pages n'existe qu'une et une seule fois (la programmation générique permet une bien meilleure maintenabilité du code) et rendre la présence de son contenu, dans le résultat, conditionnelle (exemple : ne faire afficher le message "Aucun enregistrement trouvé" que si le résultat d'une recherche est vide).

 

Contenu d'une ressource

 

Les différences entre les trois familles de ressources sont :

 

- la notion de bloc conditionnel ne s'applique qu'aux ressources AWEB_

- pas de lien relatif dans une ressource de type email_ (ajouter systématiquement l'adresse du serveur http !4d=insert;u_adrIPabs("*")!

- pas de pagination au sein d'un email

- si une ressource AWEB_ doit être partagée entre des ressources File:// et des ressources email_, ajouter la génération contextuelle de l'adresse du serveur http !4d=insert;u_adrIPabs!

 

Ce qui est décrit ci-après s'applique tout autant aux ressources File://, AWEB_ ou email_.

 

Une ressource peut contenir des lignes de programmation en javascript. Cependant, ceci est considéré, coté serveur, comme du texte. Ces lignes ne sont exécutées que du coté du client. Aussi, lorsque le terme de "programmation" est employé ici, il ne fait référence qu'aux lignes de code exécutées par le serveur.

 

La ressource ci-dessous correspond à "File://ListRecordPrint.htm"

 

 

# EModeList:=3       1  

# EList_NbElements:=500

 

<html><head>

<title>!4D=insert;xchaine(21200;65;"Imprimer la liste")!</title>        2  

<link rel="stylesheet" href="/style.css" type="text/css">

</head>

 

<BODY BGCOLOR="#FFFFFF" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">

 

<font class="titleblack14">!4D=insert;A_Titre!<br>

<font class="textblack10"><font color="#999988"><i>!4D=insert;TnbRecord!</i>

<br>

 

AWEB_ListTable2   3  

AWEB_HR

<br><font class="textblack10">!4D=insert;TssTitre!

</BODY></HTML>

 

 

 1  Lignes de code initiale # ...

 

Les lignes préfixées par # situées en debut de ressources sont des lignes de programmation qui sont exécutées dès le chargement de la ressource. Ces lignes doivent être réservées à quelques lignes de programmation simple. Dans l'exemple ci-dessus, elles servent à affecter des valeurs à des variables. Dans le cas où il y a besoin de plus de programmation, il faut écrire un script et appeler ce script au sein de la ressource, exemple : # AScript_SaveMail

 

Condition

 

Dans le cas d'une ressource AWEB_, il est possible de rendre sa présence conditionnelle. Pour cela, il suffit de placer un test en début de ressource et de la préfixer par #IF. Si la condition est vraie, le contenu de la ressource est inclu dans la page, sinon, la ligne AWEB_... est simplement effacée. Dans le cas où un #ENDIF est situé après un #IF, ce sont simplement les lignes de code situées entre #IF et #ENDIF qui ne seront pas exécutées si la condition est fausse.

 

Cas spécial

 

Lors de l'identification, un cookie est adressé au navigateur et ce dernier doit figurer dans l'entête http de la page (ie avant que commence l'envoi du contenu de la page elle même). Afin de provoquer ceci, il faut mettre la formule avec un ! en début de ligne à la place du #.

 

 2  Insertion du résultat d'une formule !4D=insert;...!

 

Le résultat de l'exécution de la formule est placé entre les 2 signes ! en remplacement de la formule.

 

 

Exemple : si la variable A_Titre contient la chaîne de caractères "Recherche de documents", la balise !4D=insert;A_Titre! est remplacée par "Recherche de documents" lors du calcul de la page.

 

 

Valeur d'une rubrique !4d=field;...;...!

 

Cette balise sert à insérer la valeur d'une rubrique de l'enregistrement courant.

 

Formule sans résultat !4D=exec;...!

 

Cette balise sert à faire exécuter une formule sans qu'aucun résultat ne soit retourné. Exemple : !4D=exec;Ex:=Ex+1! incrémente la variable Ex de 1.

 

Boucle !4d=begin;...! ... !4d=end;...!

 

Ce qui figure à l'intérieur de la boucle est répétée pour chaque enregistrement ou chaque valeur d'un tableau de valeur.

 

 3  Ressource AWEB

 

La balise ressource AWEB (qui doit être la seule information sur la ligne, contraitement aux autres balises) sera remplacée par le contenu de la ressource.

 

Ordre d'interprétation

 

L'ordre dans lequel les opérations sont effectuées est très important. En effet, il se peut que l'exécution d'une balise !4d=exec;...! modifie la valeur d'une variable utilisée comme test de condition d'une ressource AWEB_.

 

- 1 : formules de début de page avec ! en début de ligne

- 2 : envoi de l'en-tête http par le serveur

- 3 : formules de début de page avec # en début de ligne

Tant qu'il reste des balises AWEB_ :

- 4 : interprétation du contenu jusqu'à la première balise AWEB_

- 5 : interprétation du contenu de la ressource AWEB_ : étapes 3 à 5