0

6 La navigation dans le manuel de Kentika est réservée aux utilisateurs identifiés



Les balises !4d=...;..! dans les ressources web

Les balises !4d= ... ; ... ! dans les ressources web

Préambule

Une page html servie par le serveur web est calculée à la volée à partir d'un "modèle" (ou ressource web) contenant des balises qui provoquent soit l'insertion de valeur(s), soit l'exécution d'instruction(s) de programmation.

Une balise !4d=...! ne doit pas contenir plus de 80 caractères et ne doit pas contenir de retour à la ligne. Si le dernier point d'exclamation est manquant, le logiciel tente d'exécuter une chaîne de caractères qui ne serait pas une ligne de programmation conforme et qui pourrait provoquer un arrêt brutal de l'application.

Certaines balises font appel à de la programmation et peuvent nécessiter de bonnes connaissances dans ce domaine. D'autres sont simplement le résultat de l'utilisation d'un assistant. Si vous n'êtes pas certain des modifications que vous apprêtez à apporter au contenu d'une balise, cherchez dans la documentation si la syntaxe est correcte ou non.

En phase de développement, utilisez la fonction de sauvegarde proposée dans le pop-up menu situé en haut à gauche de la liste des ressources afin de pouvoir revenir immédiatement à la dernière version en cas de problème.

Eviter de réaliser des développements sur une base en exploitation.

Conseil : lors du développement d'un site, il peut être difficile d'identifier quelle URL provoque un arrêt du serveur (principalement, en cas d'erreur de programmation). Afin de tracer quelle page aurait commencé à être exécutée mais n'aurait pas abouti, il suffit de créer un dossier "WEBDBG" dans le dossier temporaire de l'application. Avant de démarrer l'application, il suffit d'ouvrir les fichiers contenus dans ce dossier : les en-têtes http correspondant aux URL non abouties s'y trouvent.

Les balises d'insertions

Elles permettent d'insérer une valeur. Elles sont remplacées par le contenu de l'expression lors du calcul d'une page.

Formule : !4d=insert;(Formule);(codage)!

Formule : peut être une variable ou une expression 4D renvoyant un résultat. Si vous insérez le contenu d'une variable, assurez-vous que c'est bien une variable valide contenant une valeur. Si l'expression ou la variable contiennent une valeur numérique ou date, vous devez soit le préciser dans le codage, soit transformer cette valeur préalablement en alphanumérique.

Exemples de syntaxe correcte

!4D=insert;AForm_Record_Type ! : variable contenant le type de l'enregistrement courant

!4D=insert;PERS_Nom ! : expression calculant le nom de la fiche personne courante

!4D=insert;u_colorRVB2htm l(ColF)! : expression de conversion d'une couleur numérique RVB en couleur html

!4D=insert;TForm_Logo ;3! : variable contenant le lien d'appel à l'image correspondant au type de document courant

!4D=insert;Chaine (date du jour ;3)! : expression permettant d'afficher la date du jour en format long (avec jour et mois en clair)

Exemples de syntaxe incorrecte

!4D=insert;Date du jour ! : le résultat de cette fonction est une date, il faut lui affecter un codage approprié

!4D=insert;PERS_Nom; 8 ! : 8 n'est pas un code correct pour cette fonction

!4D=insert;Ex:=0 ! : l'expression est correcte en terme de programmation mais ne renvoie pas de résultat

!4D=insert;Nom de Personne ! : cette expression ne correspond à rien de connu...

Utilisez toujours de préférence l'assistant de composition d'une formule. Il ne vous donne pas l'assurance que votre syntaxe sera correcte, par contre, il vous signalera une syntaxe incorrecte.

Codage : par défaut, le logiciel considère que le résultat est un alphanumérique et le contenu sera codé en html. Pour indiquer un autre codage, vous devez le préciser après le séparateur.

Code Contenu Codage

0 ou (sans) Alphanumérique html, retour en <br>

3 Alphanumérique pas de codage

4 Alphanumérique html, retour tel quel

5 Alphanumérique html, balises entre < et > non recodées

6 Alphanumérique html, traduit automatiquement si chaîne existe en code 1001

7 Alphanumérique html, suppression des caractères perturbant le javascript

8 Date html

9 Numérique html

18 Date URL

19 Numérique URL

Surbrillance : si vous souhaitez que le contenu soit automatiquement balisé en fonction des mots utilisés lors d'une recherche, il suffit d'ajouter 100 au codage indiqué ci-dessus. Ceci correspond à l'attribut "encode=H" dans la balise !4d=Field;..!. Les balises de surbrillance ajoutées au texte sont : <font color="#FF020B"><b> avant et </b></font> après le mot ou l'expression. Ces balises peuvent être personnalisées grâce aux paramètres "W_H1" et "W_H2".

Rubrique : !4d=field;(rubrique);(attribut)!

Cette balise est composée d'une partie rubrique et d'une partie attribut.

Il est préférable d'utiliser l'assistant de sélection de rubriqueplutôt que de taper l'expression à la main, ce qui est toujours source d'erreur. Ponctuellement, vous pouvez être amené à modifier un attribut. Cependant, en vous positionnant à l'intérieur d'une telle balise et en cliquant sur ce bouton, l'assistant est proposé avec l'ensemble des attributs.

Balise !4d=field;...! ou !4d=insert;valeur_rubrique (...;...)! ?

Regardons les trois exemples ci-dessous. Les trois renverront les même valeurs.

!4D=field ;=1161/(Documents)Langue;encode=H!

!4D=insert;Valeur_rubrique ("=1161 /(Documents)Langue")!

!4D=insert;Valeur_rubrique ("LA ")!

Si les deux premiers sont en tout points équivalents, le troisième a pour avantage de pouvoir s'exécuter dans une autre application, à condition que l'on ait affecté le code "LA" à la rubrique langue (qui pourrait alors porter un autre numéro). La troisième syntaxe est dans ce cas "portable".

NB : si l'appel direct à un champ 4D fonctionne (exemple : !4D=Insert;[Document]Titre!), il présente plusieurs inconvénients : il ne tient pas compte de la traduction (et donc de la langue choisie par l'utilisateur) ; si votre base de données est, un jour, hébergée sur un serveur autre que 4D server (architecture envisageable à l'avenir), cette syntaxe risque de ne plus fonctionner, si le nom physique du champ change, votre formule devient obsolète.

Balise : !4d=include;(URL)!

Cette balise a pour objectif d'inclure dynamiquement le contenu d'une page web dont l'URL est fixée en argument (en fait, à partir de la balise <body> si elle y est présente) à la place de la balise.

Balises obsolètes

A la lecture de site développés avec d'anciennes versions, vous pouvez trouver d'autres balises. Elles ne sont volontairement pas documentées ici car leur maintenance n'est pas assurée.

Balise !4d=exec;...!

Cette balise a pour objectif de faire exécuter une ligne de programmation ne renvoyant aucun résultat. De même que pour tout script, cela nécessite une bonne connaissance du langage. Après exécution, cette balise est effacée de la page lors de l'envoi.

Balise !4d=exec;http_4dwrite(...)!

Cette balise a pour objectif d'insérer le contenu d'une zone traitement de texte d'un enregistrement. Voir la description de la palette pour plus de détails.

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

Cette balise permet de répéter une séquence autant de fois q'il y a de valeurs dans une sélection d'enregistrements ou dans un tableau. S'il existe une balise begin, il doit toujours y avoir une balise end. Des imbrications de boucles sont possibles, à condition de bien respecter l'ordre d'emboîtement.

Imbrication correcte

!4d=begin;TT_Info1!

!4d=begin;TT_Info2!

...

!4d=end;TT_Info2!

!4d=end;TT_Info1!

Imbrication incorrecte

!4d=begin;TT_Info1!

!4d=begin;TT_Info2!

...

!4d=end;TT_Info1!

!4d=end;TT_Info2!

Boucle sur une liste d'enregistrements !4d=begin;99!...!4d=end;99!

Liste générée à l'aide de la méthode u_select et sur laquelle il est proposé de paginer (u_range).

Cette boucle balaie les valeurs du tableau des enregistrements de la liste (LTNumRecList) en tenant compte du paramètre range comme point de départ et du contenu de la variable EList_NbElements comme nombre d'éléments dans la page.

NB : pour augmenter ponctuellement le nombre d'éléments dans une liste, il suffit de modifier la valeur de la variable EList_NbElements juste avant l'exécution de la boucle :

!4d=exec; EList_NbElements:=10000 ! !4d=begin;99!...!4d=end;99!

Boucle sur une liste d'enregistrements externes

A la différence d'une boucle sur une liste d'enregistrements de la base de données, il n'y a pas de gestion de la pagination (ie : la liste n'est pas limitée au contenu de la variable EList_NbElements ).

Boucle sur le contenu d'un tableau !4d=begin;LTx!...!4d=end;LTx!

Cette boucle balaie l'ensemble des valeurs d'un tableau de valeurs. A chaque itération est mis à jour l'indice courant du tableau.

Exemple 1 : affiche les valeurs du tableau TT_Info1

!4d=begin;TT_Info1!

!4d=insert;TT_Info1{TT_Info1}!

!4d=end;TT_Info1!

Exemple 2 : la rubrique 1081 est de type lien et est une rubrique de la table document vers la table document. L'exemple ci-après permet de faire afficher les rubriques types et titre des documents liés à un document par la rubrique 1081.

!4D=exec;LForm_Record_Num:=Record_Num(3) !

!4D=exec;xDecoupeNF (Valeur_rubrique ("=1081";"val=RN;sep=/;encode=A");"/";->TT_Info1 )!

!4D=begin;TT_Info1! !4D=exec;Goto_Record (Num(TT_Info1{TT_Info1}))!

!4D=field ;$0317/(Documents)Type;v_x=<b>;end= : ;encode=H! !4D=field ;=21/(Documents)Titre;encode=H!<br>

!4D=end;TT_Info1!

!4D=exec;Goto_record (LForm_Record_Num)!

Balise !4d=record;...;...!

Lors de l'affichage d'une liste d'enregistrements, peuvent se trouver des enregistrements de différentes tables et au sein d'une même table, de différents types. Afin d'avoir une présentation propre à chaque table, et chaque type, il suffit de créer une séquence !4d=record;...!.

Arguments possibles

Numéro de table : !4D=record;3 !

Ce qui suit cette balise ne s'applique qu'aux enregistrements de la table 3 (document).

Numéro de table et type : !4D=record;3 .Article !

Ce qui suit cette balise ne s'applique qu'aux enregistrements de la table 3 (document) et de type Article.

Condition (ou expression booléenne) : !4D=record ;3;(Valeur_rubrique("$0311/(Documents)Emprunt autorisé")="oui") !

Ce qui suit cette balise ne s'applique que si la condition entre parenthèse est vraie.

Autre table : !4D=record;else !

Ce qui suit cette balise ne s'applique que si l'enregistrement appartient à une table non énumérée dans les balises précédentes.

Fin de séquence : !4D=record;end !

Exemple

<font class="titleblack12">!4D=field;=21/(Documents)Titre;encode=H!<br>

<font class="textblack10">

!4D=record;3.Article!

<table border="0" cellspacing="2" cellpadding="0" width=100%><tr><td>

<img src="Ressource.jpg?resnum=1047" height="48" width="48" border="0"></td><td>

!4D=field;=131/(Documents)Commentaire;v_x=<i>;encode=H!

</td></tr></table>

!4D=record;3.Roman! <table border="0" cellspacing="2" cellpadding="0" width=100%><tr><td>

<img src="Ressource.jpg?resnum=200045" height="48" width="48" border="0"></td><td>

!4D=field;=131/(Documents)Commentaire;v_x=<i>;encode=H!

</td></tr></table>

!4D=record ;3;(Valeur_rubrique("$0311/(Documents)Emprunt autorisé")="oui") !

<img src="Ressource.jpg?resnum=1046" height="48" width="48" border="0">

!4D=record;3!

!4D=field;=141/(Documents)Descripteurs;title=Mots clés;t_s= : ;v_x=<b>;sep= / ;end=^p;link=URL;encode=H!

!4D=record;else!

Ceci n'est pas une fiche document

!4D=record;end!