Pour l'exemple les données du formulaire seront transmises en mode crypté (HTTPS)
Après l'action de création, le formulaire sera affiché en mode non saisissable dans la page courante pour que l'utilisateur puisse vérifier le contenu.
Cette opération consiste lire les données renvoyées par le web service (entête et paramètres) et à les afficher à l'écran.
La lecture se fait par 'mapping' des paramètres en sortie du web service vers deux entités XTEND (XTDFRMHEAD et XTDFRMPARAM) pour créer les données en mémoire et en insérant 2 tokens blocs (ABLKFRMHEAD et ABLKFRMPARAM) dans la page HTML pour afficher les données.
La gestion de l'affichage (formulaire de saisie ou formulaire créé non saisissable) dans la même page est assurée par un token 'bloc conditionnel' (ACNDXTDFRMHIDE).
Les formulaire créés peuvent être consultés via la fonction X3 Formulaire(GESAYZ)
Ce paragraphe vient en complément de la procédure de création d'une action utilisateur.
1. Créer l'interface 'Action utilisateur objet' AXTDFORM basée sur le nom de publication de l'objet AYZ (AXTDAYZ)
2. générer l'accès.
3. Générer tous les champs de l'interface
Voir le menu 'Outils/Création token champ'
Créer les entités:
Voir le menu Outils\Aide au remplissage.
Ces entités seront ensuite utilisées dans le mapping retour de l'action de création du formulaire.
Dans l'exemple nous avons défini 2 clés pour AYZ:
FCYCOD filtre les formulaires en fonction du site courant ASAMPLE.
Il faut supprimer cette clé si on souhaite lire tous les formulaires de la base
Créer une action AXTDFRMCREATE de type 'standard' avec pour paramètres le type, le titre, le email, le commentaire et les options.
Seuls les paramètres du web services qui dépendent du contexte d'appel de l'action sont déclarés comme paramètres de l'action en saisie.
C'est le token lien dynamique qui indique comment il seront valorisés en fonction du contexte d'appel (champ web, champ XTEND...).
Suppression en début'
coché pour supprimer les entités AXTDFRMHEAD et AXTDFRMPARAM au début de l'action (avant le résultat de l'appel du sous-programme) afin de gérer correctement l'affichage du résultat dans la même page HTML à l'aide d'un token 'bloc conditionnel' basé sur la présence du champ FRMCOD.
Suivi de l'activité
Oui : pour que chaque appel de l'action soit enregistré dans le fichier de log
Actif sur reload
Non : pour ne pas récréer un formulaires si l'utilisateur appuie sur F5 après avoir créé un formulaire;
Activation bouton
Créer : pour déclencher le bouton d'action Enregistrer de l'objet AYZ
Il s'agit de faire correspondre les champs XTEND avec les paramètres d'appel du web service.
Dans notre cas nous devons faire uniquement un mapping des paramètres de l'action TYP, TTL, CMT,MAIDCOD, PARCOD et PARVAL.
Le mapping de PARCOD et PARVAL est de type Multi ce qui permet au serveur XTEND de 'mapper' plusieurs champs HTML de même nom sur un paramètre multi-dimensionné.
Pour 'mapper' les paramètres de l'action on ne renseigne pas le code de l'entité.
Les paramètres du web services dont la valeur provient toujours du même contexte peuvent être valorisés directement dans le mapping de l'action en précisant l'entité.
Par exemple si on devais passer le code utilisateur de login on pourrait le mapper directement avec le champ AUSERCODE de l'entité ASESSION plutôt que de le déclarer en paramètre de l'action.
Il s'agit de créer deux entités XTEND à partir des données renvoyées par X3 :
Les entités de type Action sont stockées en mémoire pendant toute la durée de la session utilisateur.
Elles sont recréées automatiquement à chaque appel de l'action.
Pour gérer l'affichage via un 'bloc conditionnel' on a besoin de supprimer les entités la première fois que la page s'affiche (lorsqu'on clique sur le token lien dynamique ADLKCONTACT dans le menu gauche).
Pour cela on crée une action AXTDFRMRESET qui ne fait que supprimer les entités AXTDFRMHEAD et AXTDFRMPARAM.
Cette action est associée au token ADLKCONTACT.
Type
Standard
Interface
Aucune
Le lien dynamique ADLKXTDFRMCREATE est le token qui sera inséré dans le bouton de création du formulaire.
Il permet de définir la page de destination (Page courante), d'associer l'action AXTDFRMCREATE et de valoriser les paramètres.
Suivi de l'activité
Oui : pour que chaque clic sur le lien soit enregistré dans le fichier de log
Forcer le mode http post
Non : Comme une action avec paramètres est associée au lien dynamique, la requete sera envoyée automatiquement en mode POST
Page courante
Oui : Le résultat (message ou formulaire créé) est affiché dans la page courante
Action
Code de l'action à déclencher
Contrôler les champs web
Oui : Pour contrôler les paramètres Web (voir section 'Action')
Il s'agit de déclarer tous les paramètres de l'action et d'indiquer la manière dont on souhaite les valoriser.
Champ TYP
Constante : Le type de formulaire est toujours de type contrat (CON)
Champs TTL, MAICOD
'Chp Web Oblig' : Saisie obligatoire par un champ web.
Champs CMT, PARCOD, PARVAL
'Champ web' : Saisie par un champ web non obligatoire
Cste/Attrib. web
Contient le nom du tag input (attribut name)
Le contrôle de la saisie n'est actif que si l'option 'Généralités/Contrôler champs web' est cochée.
La requête sera postée vers le serveur XTEND seulement si:
Le contrôle est effectué par la bibliothèque JavaScript d'XTEND.
Le token ADLKCONTACT permet d'afficher la page de création du formulaire à partir du menu gauche.
Pour gérer l'affichage via le 'bloc conditionnel' ACNDXTDFRMHIDE il est nécessaire d'effacer les entités formulaire au premier affichage.
Cette opération est effectuée en associant l'action AXTDFRMRESET au token ADLKCONTACT.
Ce token permet aussi d'afficher la page en mode sécurisé (https) pour indiquer à l'utilisateur que le données seront cryptées.
Suivi de l'activité
Oui
Forcer le mode post
Oui : Pour conserver le contexte de XTEND sauvegardé dans la page courante.
Le mode HTTP GET est utilisé uniquement sur les liens de type 'ancre' qui doivent être compatibles avec les moteurs de recherches (web crawlers).
Page courante
Non/AXTDFRMCREATE : Page de destination
Action
AXTDFRMRESET : Pour effacer les entités formulaire
Les tokens blocs ABLKFRMHEAD et ABLKFRMPARAM sont utilisés pour afficher les entités AXTDFRMHEAD et AXTDFRMPARAM qui représentent les données d'un formulaire XTEND.
Type
Mono enregistrement : Lit l'entité AXTDFRMHEAD et place la donnée au sommet (top) de la pile du contexte de données puis exécute les tokens fils
Aucune donnée
Ne rien afficher : Si l'entité AXTDFRMHEAD n'existe pas le bloc et les tokens 'fils' sont ignorés
Entité
AXTDFRMHEAD : Code de l'entité à afficher
Type
Multi enregistrements : Effectue une itération sur toutes les entités AXTDFRMPARAM et positionne chaque entité au sommet (top) de la pile du contexte de données puis exécute les tokens fils
Aucune donnée
Ne rien afficher : Si l'entité AXTDFRMPARAM n'existe pas le bloc et les tokens 'fils' sont ignorés
Entité
AXTDFRMPARAM : Code de l'entité à afficher
Ligne par bloc
10 : Affiche 10 entités AXTDFRMPARAM maximum dans la page
Cellule par ligne
1 : Affiche une entité AXTDFRMPARAM par ligne
Style par ligne
Aucun : Styles à définir dans le fichier 'my.css' pour alterner la couleur de fond des lignes
Il n'est pas possible de définir des critères de sélection sur les blocs qui sélectionnent des entités stockées en mémoire du serveur XTEND, c'est à dire de type session ou Action. Le bloc sélectionne automatiquement toutes les entités.
Les critères de sélection s'appliquent uniquement qu'aux entités de type 'Accès données'.
Il s'agit d'illustrer le cas d'utilisation des blocs conditionnels.
Le token ACNDXTDFRMHIDE est utilisé pour modifier le contenu de la page en fonction de la présence ou non d'un formulaire.
Affichage
Non coché : Indique que le contenu du token (html et tokens fils) est masqué si la condition est vérifiée.
Type de critère
Bloc vide : Indique que la condition d'affichage/masquage est basée sur le fait qu'un bloc contienne ou non des données
Bloc
ABLKFRMHEAD : Code du bloc à tester
Pour que les champs de saisie soient affichés au premier affichage de la page, même si un formulaire a été crée auparavant, nous avons créé une action AXTDFRMRESET qui supprime les entités formulaire.
Cette action est appelée par le token lien dynamique ADLKCONTACT qui affiche la page de création d'un formulaire à partir d'un clic dans le menu gauche.
Créer la page web AXTDFRMCREATE.
Page par défaut
Associer le fichier contact.html.
Le fichier doit être présent sur le serveur X3 et peut être sélectionné par la touche F12.
Protocole
Https : Pour indiquer qu'il faut crypter les données de la requête Http (Voir configuration HTTPS)
Bloc principal et bloc de fond
Aucun
Accès protégé
Non : pour indiquer que cette page est en accès libre (anonyme)
Suivi de l'activité
Oui : pour que chaque affichage de la page soit enregistré dans le fichier de log
Après modification des paramètres X3 il est conseillé de valider l'intégralité du site via la fonction afin de reconstruire le dictionnaire du serveur XTEND via la fonction 'Validation site Web(AYTFCYGEN)'.
Bien vérifier que le site XTEND est publié, c'est à dire le champ 'Publié le site' de la fiche 'Site web' est coché.
Insertion du token 'lien dynamique' ADLKCONTACT dans le menu gauche pour afficher la page et supprimer le dernier formulaire créé.
<TD class="button"><A adx="ADLKCONTACT">Contactez-nous</A></TD>
Le token 'bloc conditionnel' ACNDXTDFRMHIDE permet d'afficher la saisie du formulaire si aucun formulaire XTEND n'a été trouvé sinon il affiche le contenu du formuaire.
<!adx="ACNDXTDFRMHIDE">
<!-- Affichage du contenu du formulaire créé si le bloc ABLKFRMHEAD n'est pas vide-->
<!adx="ACNDXTDFRMHIDE">
<!adx="ACNDXTDFRMHIDE:xNot">
<!-- Affichage de la saisie du formulaire si le bloc ABLKFRMHEAD est vide-->
<!-- Paramètre xNot:Condition inverse du token 'bloc conditionnel'-->
<!adx="ACNDXTDFRMHIDE">
Création de champs <input> avec le token adx="NomDuChamp".
Si on ne précise pas d'attribut name dans un tag <input> il sera généré automatiquement avec le nom du token adx.
Le paramètre xrc(<input adx="TokenName:xrc">) est utilisé pour réafficher la dernière valeur saisie en cas d'erreur de saisie détectée par le serveur XTEND ou l'application X3.
Il permet d'éviter de perte des données saisies.
<H1>Nous contacter</H1>
<table>
<tr>
<td><b><b>Email:</b></td>
<td>
<input type="text" adx="MAICOD:xrc" size="50">
</td>
</tr>
<tr>
<td><b><b>Sujet:</b></td>
<td>
<input type="text" adx="TTL:xrc" size="50">
</td>
</tr>
<tr>
<td><b>Message:</b></td>
<td>
<textarea adx="CMT:xrc" rows="5" cols="75"></textarea>
</td>
</tr>
</table>
Création de couples de champs <input> type Clé/Valeur qui seront 'mappés' sur 2 colonnes d'un bloc tableau ou 2 paramètres de dimension N d'un sous-programme.
Le mapping des couples PARCOD/PARVAL avec les paramètres du web service est effectué suivant l'ordre de création des champs dans la page HTML.
<tr>
<td><b>Société:</b></td>
<td>
<input type="Text" adx="PARVAL:xrc" size="50">
<input type="hidden" name="PARCOD" value="Société">
</td>
</tr>
<tr>
<td><b>Activité:</b></td>
<td>
<select adx="PARVAL">
<option value="">Préciser :</option>
<option value="Artisans" >Artisans</option>
</select>
<input type="hidden" name="PARCOD" value="Activité">
</td>
</tr>
<tr>
<td><b>Code postal:</b></td>
<td>
<input type="text" value="" adx="PARVAL:xrc" size="10">
<input type="hidden" name="PARCOD" value="Code Postal">
</td>
</tr>
Création d'un input de type "button" avec l'attribut adx qui contient le code du lien dynamique.
Tous les boutons <input type="button"> qui contiennent des tokens adx doivent être de button.
Le type submit ne doit pas être utilisé.
<tr>
<td>
<input type="button" class="button" adx="ADLKXTDFRMCREATE" value="Créer">
</td>
</tr>
Une action utilisateur est considérée comme validée si l'appel du web service n'a renvoyé aucun message d'erreur.
Les messages d'erreur sont postés en L4G via le sous programme ADDMESSERR (Call ADDMESSERR("Message") From AWEB)
L'affichage des messages X3 est effectué via le token AXUSERMSG.
Ex : <span id="userMsg" class="userMsg" adx="aMsgUser"></span>
Comme les champs MAICOD et TTL on été définis comme champs web obligatoires, le contrôle est effectué automatiquement et ne nécessite aucun ajout de code JavaScript.
Les messages en cas d'erreur affichés sont AJSWEBFLDMANDAT (champs obligatoire) et AJSWEBFLDBADVAL (erreur de format).
Il est possible d'ajouter des contrôles en JavaScript sur les paramètres Web en ajoutant une fonction JavaScript de nom xtdWebParamCheckValue dans la page HTML.
Si la librairie XTEND détecte la présence de cette fonction elle sera appelée avec en paramètre:
Cette fonction renvoie true\false pour valider\invalider la saisie.
Le message AJSWEBFLDBADVAL est affiché en cas d'erreur de saisie.
Dans la page d'exemple nous avons ajouté une fonction qui contrôle le format de email.
<script type="application/x-javascript">
// This function is used to customized control on web parameters values
function xtdWebParamCheckValue(aWebParamOut,aInputFieldName,aInputFieldIndex,aInputFieldValue){
// Check input email value
if (aInputFieldName=="MAICOD"){
var wEmail=xtdCheckEmail(aInputFieldValue);
if (wEmail && wEmail!=aInputFieldValue)
aWebParamOut.setValue(aInputFieldIndex,wEmail);
return wEmail!=null;
}
return true;
}
</script>
La fonction xtdWebParamCheck permet de filtrer les champs à controler.
Elle fonctionne suivant le même principe que xtdWebParamCheckValue.
var gNbChecked=0;
// Renvoie true si le paramètre web aInputFieldName/aInputFieldIndex doit être contrôlé
function xtdWebParamCheck(aWebParamsOut,aInputFieldName,aInputFieldIndex){
/*
Exemple pour une liste de picking avec checkboxes (ASELECTED) pour sélectionner les lignes.
On ne contrôle pas le champ AQUANTITY si la ligne n'est pas sélectionnée'
*/
if (aInputFieldName=="AQUANTITY"){
// gNbChecked est un compteur des lignes sélectionnées
if (aInputFieldIndex==0) gNbChecked=0;
// Ligne sélectionnée si la valeur de ASELECTED est égale à 1
if (aWebParamsOut.getParamValue("ASELECTED",aInputFieldIndex)=="1"){
gNbChecked++;
return true;
}
return false;
}
return true;
}
Le bloc ABLKFRMHEAD permet de positionner le contexte de donnée.
Les champs sont affiché via un token adx placé dans un tag HTML.
<table width="90%" border="0" cellspacing="2" cellpadding="4">
<!adx="ABLKFRMHEAD">
<tr>
<td><b>Email:</b></td>
<td adx="MAICOD"></td>
</tr>
<tr>
<td><b>Sujet:</b></td>
<td adx="TTL"></td>
</tr>
<tr>
<td><b>Message:</b></td>
<td><pre adx="CMT"></pre></td>
</tr>
<!adx="ABLKFRMHEAD">
</table>
Le bloc ABLKFRMPARAM permet d'itérer sur les options du formulaire et de créer autant de ligne <tr> que d'options.
Pour chaque option, XTEND positionne un contexte de donnée ce qui permet de résoudre la valeur des tokens adx PARCOD et PARVAL placés dans les tags HTML.
<!adx="ABLKFRMPARAM">
<tr>
<td><b adx="PARCOD"></b></td>
<td adx="PARVAL"></td>
</tr>
<!adx="ABLKFRMPARAM">
Le point d'entrée pageDoMyDlk permet d'ajouter un traitement sur clic utilisateur et d'annuler le processus en cours si la valeur false et renvoyée.
Dans notre cas on demande une confirmation avant de poster le formulaire vers le serveur XTEND.
//Asks user to confirm creation of a new form if user clicks on ADLKCONTACTNEW dynamic link
function pageDoMyDlk(aDomOut)
{
if (aDomOut.isDlk("ADLKCONTACTNEW"))
return confirm('Confirmer la création du formulaire\nConfirm creation');
return true;
}
Le point d'entrée xtdWebParamCheckValue fait partie du mécanisme de contrôle des valeurs des 'champs web' XTEND (paramètres web des actions XTEND).
Si la fonction xtdWebParamCheckValue est définie dans la page HTML, elle sera appelée par la librairie XTEND pour chaque contrôle de 'champ web'.
Dans notre cas on contrôle la valeur du champ MAICOD (email) via la fonction XTEND xtdCheckEmail.
//This function is used to customized control on web parameters values
function xtdWebParamCheckValue(aWebParamOut,aInputFieldName,aInputFieldIndex,aInputFieldValue){
// Check input email value
if (aInputFieldName=="MAICOD"){
var wEmail=xtdCheckEmail(aInputFieldValue);
if (wEmail && wEmail!=aInputFieldValue)
aWebParamOut.setValue(aInputFieldIndex,wEmail);
return wEmail!=null;
}
return true;
}