Le langage DI# est un langage de script intégré à Dialog Insight qui permet d’ajouter du contenu dynamique et personnalisé dans les messages et les modèles HTML. Avant d’utiliser DI# pour des conditions, des calculs ou la manipulation de données, il est essentiel d’en comprendre la syntaxe de base, c’est-à-dire la façon dont le code est écrit et interprété par la plateforme. Cet article présente les règles fondamentales pour intégrer du code DI# dans un contenu, notamment l’utilisation des balises, la structure des instructions et les conventions à respecter. Il constitue un point de départ nécessaire avant d’aborder des concepts plus avancés tels que les types de données, la logique conditionnelle ou les collections. En maîtrisant ces bases, vous pourrez écrire des scripts DI# clairs, valides et faciles à maintenir.
Ressources pour aller plus loin |
Les balises DI#
Lorsque notre compilateur traite du code, il cherche les balises d'ouverture et de fermeture suivantes [[ et ]] qui délimitent le code qu'il doit interpréter. Tout ce qui se trouve en dehors des balises ouvrantes / fermantes de DI# est ignoré. À l’intérieur de ces balises, il est possible de ne pas interpréter de code afin d’afficher un simple texte. Pour cela, il suffit d’utiliser la méthode output.write(…);
Notez qu’un raccourci existe afin d’afficher du texte lorsqu’il s’agit de la seule instruction à exécuter entre les crochets : [[=… ;]]
Le code suivant [[="texte";]] |
Échappement du HTML
Tout ce qui se trouve en dehors d'une paire de balises ouvrantes/fermantes est ignoré par le compilateur, ce qui permet d'avoir du code DI# mixant les contenus. Ceci permet à DI# d'être contenu dans des documents HTML, pour créer par exemple des templates.
<p>Ceci sera ignoré par le compilateur</p> |
// Exemple 1 d'échappement avancé en utilisant des conditions |
Dans cet exemple, le compilateur va ignorer les blocs où la condition n'est pas remplie, même s’ils sont en dehors des balises ouvrantes/fermantes de DI#. Tout le code contenu dans la condition else ne sera donc jamais interprété puisque l'interpréteur DI# va passer les blocs contenant ce qui n'est pas rempli par la condition.
Séparation des instructions
Comme en C#, en Perl ou en PHP, DI# requiert que les instructions soient terminées par un point-virgule à la fin de chaque instruction. Aucune balise fermante n’implique de fin d’instructions, le point-virgule est obligatoire.
Les commentaires
Le DI# supporte deux types de commentaires :
- Les commentaires sur une seule ligne : Pour commenter jusqu'à la fin de la ligne du bloc PHP courant. Ceci signifie que toute le code HTML après // sera ignorée jusqu’à la fin de la ligne.
- Les commentaires multilignes : Pour commenter un bloc d’instruction en commençant par /* et en finissant par */. Tout ce qui est inclus entre ces deux balises sera ignoré.
Portée des variables (scope)
La portée d'une variable dépend du contexte dans lequel la variable est définie. Une variable définie à la racine du code aura une portée sur la totalité du script. Mais, une variable définie dans une fonction sera locale à la fonction. Autrement dit, toute variable créée à une portée limitée à sa propre fonction, ainsi qu’à ses fonctions sous-jacentes.
[[ |
Le contexte est quant à lui délimité par { et }. Ainsi, la déclaration d’une variable à l’intérieur de ces accolades, en fera une variable locale.
Les fonctions
Déclaration d'une fonction
Une fonction DI# se déclare de la même façon qu'en C.
[Type] [Nom] ([Paramètre1], [Paramètre2], etc.)
{
Instructions...
}
Les fonctions doivent être définies à la racine du template, c’est-à-dire qu’elles ne peuvent pas être définies à l’intérieur d’un scope.
// Exemple d’une déclaration classique, avec valeur de retour définie |
// Exemple d’une déclaration avec une valeur par défaut |
Notes :
- Une fonction peut retourner n’importe quel type (string, int, decimal, etc.). Dans ce cas, la fonction doit nécessairement retourner une valeur. Cette valeur doit être obligatoirement du même type que le retour attendu par la fonction.
- Une fonction peut aussi être déclarée de type void. Dans ce cas, la fonction est utilisable comme simple instruction. L’exécution de cette fonction doit se terminer par un « return » (sans valeur de retour) ou bien atteindre la fin de la fonction.
Appel d'une fonction
Une fonction s’appelle comme dans tous les autres langages :
nomDeLaFonction(params) OU nomDeLaFonction()
Une fonction peut être utilisée comme statement/commande dans le script, par exemple :
OutputWithTags("mon texte", "i");
Les fonctions qui retournent une valeur (c'est-à-dire toutes les fonctions dont le type n’est pas void) peuvent aussi être utilisées en tant qu’expression ou valeur :
int x = addNumbers(1,1);
Portée d'une variable à l'intérieur d'une fonction
Comme dans de nombreux langages, les variables créées à l’intérieur d’une fonction (les variables locales) ne sont pas visibles à l’extérieur de cette fonction. Les variables créées à l’extérieur de cette fonction ne quant à elles, pas accessible de l’intérieur de cette fonction.