Quelques utilisations de la commande TRAITER BALISES HTML

Julien FEASSON

Nous pensons qu’il y a une commande dans le langage de 4D 2004 qui doit rapidement être connue comme une des commandes les plus puissantes. Que ce soit pour faire un mailing avec Word ou lancer des routines de maintenance, cette commande fournit toute la puissance nécessaire. Le but de cette note technique est de vous montrer toutes les potentialités de cette commande, et vous déciderez alors si vous êtes d’accord avec nous. ♪

- Titre : Quelques utilisations de la commande TRAITER BALISES HTML

- Auteur : Julien FEASSON

- Parution : 1 avril 2005

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Introduction

- II. Les balises 4D

- III. 4DSCRIPT

- IV. La commande TRAITER BALISES HTML

- V. Exemple 1 : génération d’Email

- VI. Exemple 2 : mails fusionnés avec Word

- VII. Exemple 3 : exécution de 4D scripts externes

- VIII. Conclusion

- IX. Base exemple

I - Introduction

Parmi les nouveautés du langage de 4D 2004, il en est une que vous pouvez utiliser dans des situations très diverses.

Cette commande peut être utilisée pour faire des modèles avec les données qui généreront n’importe quel type de document texte comme des emails que vous pourriez envoyer avec les 4D Internet Commands. C’est aussi une puissante commande pour l’intégration de votre application, car elle peut être utilisée pour générer des fichiers qui peuvent être lus par des applications externes. Nous verrons comment fusionner des mails avec Microsoft Word ® pour Windows.

La même commande peut exécuter des scripts qui peuvent être soit sauvegardés dans une variable ou un champ ou un fichier texte externe. Le script peut être changé « à la volée » par le développeur pour maintenir une routine ou mettre à jour son code.

Avez-vous deviné qu’elle est cette commande ? Bien sûr, nous parlons de la commande TRAITER BALISES HTML, la commande qui peut exécuter les balises 4D dans n’importe quel texte, et cela sans que le serveur web soit lancé.

Fonctionnalité prévue à l’origine pour le Serveur Web de 4D, les balises 4D sont un moyen de fournir des pages semi-dynamiques avec un code côté serveur. Cela permet aux développeurs web d’insérer des références à des variables 4D ou à des expressions, ou différents types de traitement directement à partir du HTML et de générer des pages web pertinentes avec les données de l’application. Le développeur web peut ajouter des tests dans ses scripts et lancer différents types d’actions comme exécuter une méthode 4D, passer des paramètres et récupérer les résultats de traitements par des méthodes.

Il est maintenant possible dans 4e Dimension 2004 pour tout développeur de tirer avantage des balises en utilisant la commande TRAITER BALISES HTML. N’importe quel texte peut être généré très facilement avec les données de la sélection courante et les scripts peuvent être exécutés à partir d’un document externe.

Tout d’abord, examinons les balises que la commande peut traiter.

II - Les balises 4D

Des balises peuvent être insérées n’importe où dans le texte de façon à être traitées par 4D. Les balises doivent avoir le format suivant <!--#4D…-->.

Les balises disponibles sont :

- 4DVAR : pour insérer des variables ou des expressions ;

- 4DHTMLVAR : similaire à 4DVAR, mais insérant du code HTML ;

- 4DSCRIPT : pour exécuter une méthode 4D ;

- 4DINCLUDE : pour inclure une page dans une autre ;

- 4DIF, 4DELSE et 4DENDIF : pour insérer des conditions dans un script ;

- 4DLOOP et 4DENDLOOP : pour faire une boucle dans un script.

Pour donner un exemple d’utilisation de ces balises, prenons un modèle d’email :

Bonjour <!--#4DVAR [Contact]Nom-->,

Les informations suivantes sont-elles toujours exactes ?

Adresse : <!--#4DVAR [Contact]Adresse--> <!--#4DVAR [Contact]Ville-->, <!--#4DVAR [Contact]Région--> <!--#4DVAR [Contact]Code postal-->
Téléphone : <!--#4DIF ([Contact]TéléphoneDomicile#"")-->
Domicile : <!--#4DVAR [Contact]TéléphoneDomicile--> <!--#4DENDIF--><!--#4DIF ([Contact]TéléphoneBureau#"")-->
Bureau : <!--#4DVAR [Contact]TéléphoneBureau--> <!--#4DENDIF--><!--#4DIF ([Contact]TéléphonePortable#"")-->
Portable : <!--#4DVAR [Contact]TéléphonePortable--> <!--#4DENDIF-->

Merci de votre réponse !

III - 4DSCRIPT

La balise 4DSCRIPT permet d’exécuter une méthode 4D lorsque la balise est traitée à l’intérieur d’un document texte. La présence de la balise <!--#4DSCRIPT/MaMéthode/MonParamètre--> dans le code force l’exécution de la méthode MaMéthode avec le paramètre MonParamètre en tant que chaîne dans $1.

Quand une balise 4DSCRIPT est exécutée, 4D appelle la Méthode base Sur authenfication Web (si elle existe). Si celle-ci retourne Vrai, 4D exécute la méthode MaMéthode. L’exécution de la méthode avec 4DSCRIPT ne se fera que si vous avez coché l’option « Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT » dans le dialogue de Propriétés de la méthode.

La méthode retourne du texte dans $0. Si la chaîne commence avec le code ASCII caractère 1, le texte est considéré comme du HTML (le même principe est vrai pour les variables).

Comme 4D exécute les méthodes dans leur ordre d’apparition, il est tout à fait possible d’appeler une méthode qui mette en place les valeurs de variables référencées plus loin dans le document.

Nous verrons plus loin pourquoi cette balise est particulièrement importante avec l’utilisation de la commande TRAITER BALISES HTML.

IV - La commande TRAITER BALISES HTML

La commande TRAITER BALISES HTML requiert deux paramètres qui peuvent être soit du texte soit un BLOb. Le premier paramètre contient les données d’entrée, le deuxième contient les données de sortie.

Cette commande permet l’exécution par 4D des balises HTML contenues dans les données d’entrée et retourne le résultat dans les données de sortie.

Cette commande exécute le code des balises HTML sans qu’il soit nécessaire pour le serveur Web d’envoyer une page HTML en utilisant une commande du type ENVOYER BLOB HTML ou qu’une page suffixée .shtml soit envoyée via une URL.

Il n’est même pas nécessaire que le serveur Web de 4D soit lancé.

Toutes les balises du langage 4D sont supportées (4DVAR, 4DSCRIPT, 4DLOOP, etc.).

Remarque importante : il est à noter cependant que le comportement de certaines balises peut être modifié si elles sont exécutées en dehors du lancement du process Serveur web de 4D. Par exemple, lorsque vous utilisez une balise 4DINCLUDE sans que le serveur Web de 4D soit lancé, avec 4D ou 4D Server, le dossier par défaut sera le dossier contenant le fichier structure de la base.

Mais si nous pensons que c’est une des commandes les plus puissantes du langage 4D, c’est aussi parce qu’elle peut exécuter les balises 4D dans n’importe quel type de texte. Il n’est pas nécessaire que ce soit du HTML.

Nous pouvons ainsi avoir des textes modèles contenant des balises 4D. Avec la simple utilisation de la commande TRAITER BALISES HTML, un texte peut être généré à partir d’un modèle, dynamiquement, incluant les données de la sélection courante. Ceci est un outil précieux de « reporting ».

En plus de cela, nous pouvons imaginer que le modèle est stocké dans un fichier séparé. Ce qui signifie que le fichier peut être modifié à tout moment bien sûr, mais aussi qu’il est possible de modifier le type de données qui vont être ajoutées dans le modèle en modifiant les balises 4D HTML ou en ajoutant des tests dans le fichier.

V - Exemple 1 : génération d’Email

Ce premier exemple montre combien il est simple de générer des emails à partir des modèles. Ceux-ci peuvent être utilisés avec les Internet Commands de 4D.

Le but est ici de créer un email à partir d’un texte contenant les balises 4D. Les balises HTML 4D sont traitées avec les informations des enregistrements sélectionnés et un email est généré en texte. Il peut être affiché et envoyé.

Voici les deux exemples de modèles d’email qui sont utilisés dans la base de démonstration :

Sur le formulaire sortie de [Contact], nous avons ajouter un pop-up menu qui traite et affiche les emails avec les informations des enregistrements sélectionnés :

Le code en est très simple :

1. TRAITER BALISES HTML([ModèlesEmail]Objet;processedSubject)

2. TRAITER BALISES HTML([ModèlesEmail]Corps;processedBody)

Le corps et l’objet, une fois traités, sont prêts à être envoyés :

Base de démonstration

Voir la base Démo « EmailTemplate », en Mode Menus Créés, choisissez Fichier - Démo., ou en Mode Utilisation, [Table]Contact. Utilisez le pop-menu dans la partie en-tête pour choisir le modèle de mail.

VI - Exemple 2 : mails fusionnés avec Word

TRAITER BALISES HTML peut aussi être utilisée pour intégrer 4D et Microsoft Office. Microsoft Word 2003 ® (sous Windows) ouvre les formats de fichiers avec la technologie XML. XML étant un simple document texte, il est alors très facile de créer un document Word en utilisant la commande TRAITER BALISES HTML.

Nous devons simplement créer un modèle d’émail pour Word contenant les balises 4D, et le sauvegarder au format XML. Nous pouvons alors traiter les balises en fonction des besoins avec les données que nous voulons inclure dans l’email.

Voici une partie du XML que nous pouvons traiter :

1. <!--#4DIF ([Contact]TelephoneBureau#"")-->

2. <w:p>

3. <w:r>

4. <w:tab wx:wTab="720" wx:tlc="none" wx:cTlc="11" />

5. </w:r>

6. <w:r>

7. <w/Tab wx:wTab="720 wx:tlc="none" wx:cTlc="11 />

8. </w:r>

9. <w:r>

10. <w:rPr>

11. <w:u w:val="single" />

12. </w:rPr>

13. <w:t>Bureau : </w:t>

14. </w:r>

15. <w:r>

16. <w:t> <!--#4DVAR [Contact]TelephoneBureau--> </w:t>

17. </w:r>

18. </w:p>

19. <!--#4DENDIF-->

Si le champ « TéléphoneBureau » de l’enregistrement courant de la table [Contact] est rempli, alors le TRAITER BALISES HTML inclura dans le document Word la partie contenue dans le 4DIF et à l’ouverture de Word, le résultat devrait ressemblait à ceci :

Bureau : 0123898789

Avec l’utilisation de cette commande, un nombre important de mails peuvent être générés automatiquement très facilement au format Word et ainsi être envoyés en pièces jointes ou directement avec Outlook.

Base de démonstration :

Voir la base Démo « Word », en Mode Structrure ou en Mode Utilisation, exécutez la Méthode Projet GenerateEmails. Vous pouvez ensuite les ouvrir avec Word.

VII - Exemple 3 : exécution de 4D scripts externes

Une utilisation de la commande TRAITER BALISES HTML qui montre très bien la puissance de cette commande est peut-être la possibilité de lancer des scripts externes. Cela se fait simplement en traitant les balises HTML dans un fichier texte afin de lancer directement des actions sur la base de données 4D.

Ces scripts 4D peuvent être sauvegardés dans n’importe quel document de type texte et ils intégreront les balises HTML de 4D. Ces routines utilisant les balises 4D peuvent inclure des structures logiques en utilisant les balises 4DLOOP ou 4DIF/4DELSE, récupérer des données comme variable ou texte de la base de données et lancer des méthodes dans le but d’exécuter des actions de maintenance ou de mise à jour de configuration, etc. Comme ces fichiers ont pour objectif de lancer une action sur l’application 4D, ils n’ont pas besoin de générer une sortie quelconque. Soit on passe outre les données de sortie générées par la commande TRAITER BALISES HTML, soit on les utilise comme code d’erreur pour le code 4D, ce qui permettrait de traiter proprement les exceptions.

Le bénéfice le plus important pour les développeurs de l’utilisation des scripts externes pour lancer des sous-routines est que le code des 4D scripts étant du simple texte stocké dans un fichier externe, le développeur peut modifier très rapidement ce script, le placer sur la machine de production et le lancer. Il fonctionnera sans problème avec une base compilée, et il n’est pas nécessaire de recompiler la base. Ce qui signifie qu’il n’est pas besoin d’arrêter le serveur. La mise à jour du code peut être faite très facilement et très rapidement sans que l’utilisateur remarque qu’il y a eu une modification.

Scénario

On peut imaginer que le développeur a préparé un ensemble de routines de maintenance, comme des routines de back-up, validation des données et relance du serveur web, génération de rapports…

Dans un simple appel, la commande TRAITER BALISES HTML sera exécutées par un script 4D externe spécifique, ou sur tout un dossier prédéfini contenant les scripts 4D a exécutés.

Cela donne un large champ de possibilité pour les développeurs en termes d’ajout de mises à jour rapides, fixation de bug ou maintenance de routines sur leurs propres serveurs compilés.

En termes de sécurité…

Les développeurs peuvent être concernés par les problèmes de sécurité à propos de l’exécution de scripts à l’intérieur de leur base de données.

Voici ce que l’on peut conseiller...

La balise 4DSCRIPT appelle les méthodes 4D. Mais n’importe quelle Méthode projet ne peut pas être appelée. Seulement les Méthodes projets dont on a coché la case « Disponible via 4DACTION, 4DMETHOD et 4DSCRIPT », pourront être appelées par une balise 4DSCRIPT.

Aussi à chaque balise 4DSCRIPT exécutée par 4D, la Méthode base Sur authenfication Web est appelée et une vérification peut ainsi être faite et autoriser au pas l’exécution du script.

Vous devez garder à l’esprit que n’importe quelle commande peut être appelée à partir d’une balise 4D.

Par exemple, le code suivant dans un fichier externe :

1. QUITTER 4D

fera quitter l’application à l’exécution. Les développeurs peuvent faire un contrôle sur ce fichier pour vérifier qu’il n’a pas été modifié. Mais dans ce cas, eux-mêmes ne pourront pas le modifier.

Une autre façon de protéger les scripts, mais tout en pouvant les modifier est de les stocker en blobs encryptés en utilisant la commande ENCRYPTER BLOB.

Ainsi avant de faire exécuter les scripts, vous devrez ouvrir le document dans un blob, le décrypter en utilisant votre clé privée. Vous serez ainsi le seul à avoir accès aux scripts.

1. APPELER SUR ERREUR ("MyErrorHandler")

2. DOCUMENT VERS BLOB ("myscript.enc";myBlob)

3. DECRYPTER BLOB (myBlob;myPubKey;myPrivateKey)

4. TRAITER BALISES HTML (myInputBlob;myOutputBlob)

5. APPELER SUR ERREUR ("")

Lorsque vous voulez modifier le script, vous pouvez à distance encrypter le nouveau script en utilisant votre clé privée et envoyer celui-ci à l’application 4D qui a besoin de l’exécuter.

Base de démonstration

Voir la base Démo « ExternalScripts », en Mode Utilisation, cliquez sur le bouton « Exécuter un script » :

1 - Choisissez un script dans le dossier « Scripts » ;

2 - Commencez par créer le client (Script_AjouterJohn.txt) ;

3 - puis manipulez une info (Script_John_x_2.txt qui multiplie par deux l’ID) ;

4 - puis supprimez le client (Script_SupprimerJohn.txt).

ou bien

- Exécutez tous les scripts du dossier « Scripts » avec la méthode « ExecuteFolder ».

Le script : script_testVrai vous sert à passer une variable <>Testing à Vrai pour ainsi générer un fichier « test » qui ira se placer dans le dossier « testing » et qui vous permet de vérifier le contenu analysé par le TRAITER BALISES HTML.

Pour travailler avec des fichiers de scripts cryptés :

- générez les clés avec la méthode « GenererclésCryptage » ;

- cryptez les fichiers avec la méthode « EncryptDossier » ;

- Exécutez tous les scripts cryptés du dossier « Scripts_Enc » avec la méthode « ExecuteEncrypted ».

VIII - Conclusion

Les développeurs Web 4D étaient déjà familiers avec la puissance des balises HTML de 4D. Désormais avec la nouvelle commande TRAITER BALISES HTML introduite en 4D 2004, ces balises sont aussi disponibles pour les développeurs qui n’utilisent pas le web.

Nous avons vu un large éventail des possibilités de cette commande, quelques exemples ont été montrés dans cette note. Cette commande peut être utilisée pour créer des emails à la volée, les modèles utilisés pour créer les emails peuvent être aisément écrits et sauvegardés de différentes façons : variables locales, champs, fichiers.

La commande peut aussi être utilisée pour générer des pages HTML statiques pour visualiser « offline » les données de n’importe quelle application 4D.

Mais cette commande donne aussi l’opportunité pour le développeur 4D d’exécuter des scripts, directement d’un fichier texte, qui peuvent être rapidement ajoutés à n’importe quelle application compilée sans avoir à redémarrer, recompiler et relancer l’application.

Comme nous l’avons vu, cette commande peut traiter les balises dans tout type de fichier texte ; il n’est pas nécessaire que le format soit du HTML et c’est pourquoi il existe un nombre infini de possibilités. Et c’est pour toutes ces raisons que nous pensons que cette commande est probablement la plus puissante du langage de 4D 2004.

IX - Base exemple

Téléchargez la base exemple :

Base exemple