Introduction
Un rapport au sens Daxium-air, est le résultat documentaire de fiche, généré sur la base d'un modèle. Vous avez entièrement la main sur la forme de ce modèle. Dans cette section vous trouverez toute l’information utile pour créer vos modèles de rapports.
Les formats de documents supportés sont: - Word - Excel - PowerPoint (depuis déc.2024) Tous les documents sont convertibles en PDF.
Un rapport peut être unitaire (une fiche = un document) ou sous forme de « Listing » de fiches (x fiches = un document).
Un rapport peut être généré manuellement, automatiquement (selon déclencheur) et de manière planifiée (fréquence programmable).
Créer un modèle de rapport Word
Pour créer un Modèle de Rapport sur Word, vous devez disposer d’un formulaire afin de connaître les noms systèmes des champs. Le format autorisé est .docx et les noms systèmes de vos champs doivent être contenus entre <% et %>.
Voici un exemple de modèle de rapport :

On peut voir qu’il comporte tous les noms systèmes avec une syntaxe particulière. En effet, ils doivent être entourés de <%…%> pour signifier à Daxium-Air qu’il doit faire correspondre à la donnée du champ saisie par l'utilisateur dans la fiche. Il est important de noter qu’il est possible d’appliquer toutes les modifications sur la police sur ce qui sera affiché. Comme <%Client%> qui est en gras donc le nom du client sera affiché en gras dans le rapport.
Les champs Texte ou Liste ne nécessitent pas de syntaxe particulière. Cependant, les champs booléens renvoient « True » ou « False », donc si on veut obtenir « Oui » ou « Non », il est possible d’appliquer une fonction conditionnelle If (cf. encadré vert).
Celle-ci se compose ainsi : <%If(NomSysteme == ‘Condition’, ‘Alors’, ‘Sinon’)%>
Toute la mise en forme que vous avez appliquée sur le Word sera appliquée dans le rapport.
A noter : Lorsqu'un rapport est invalide, cela peut provenir des noms systèmes ou des libellés de relations qui ne correspondent pas au formulaire, ou bien des conditions mal renseignées.
Ajouter un modèle de rapport dans Daxium-Air
Rendez-vous dans les Paramètres > Rapport > Nouveau :


Ensuite, sélectionnez le formulaire auquel vous souhaitez lier ce modèle de rapport, puis sélectionnez le format de votre modèle grâce au bouton prévu à cet effet.
La case « Listing mode » permettra de générer un rapport pour plusieurs fiches en même temps, notamment les relations.
Relations dans un rapport Word
Le modèle de rapport doit se baser sur le formulaire principal et il pourra contenir toutes les fiches en relation directes.
Pour afficher la relation dans un document Word, il faut créer un tableau. On utilise ainsi la fonction "Relation", puis, on inclut le libellé du champ en relation présent dans le formulaire principal :

Comme vous pouvez le voir, nous appelons <%Relation(‘libellé')%> pour que la relation soit initiée dans un tableau. Tous les noms systèmes qui seront appélés proviendront des fiches de cette relation.
La ligne du tableau sera répétée autant de fois qu'il y a des fiches dans la relation.
Les champs <%nomsysteme1%> et <%nomsysteme2%> sont des champs du formulaire en relation ayant pour nom système nomsysteme1 et nomsysteme2.
Relations dans un rapport Excel
Lors de la création d’un nouveau modèle de rapport, une option Mode listing est disponible. Son rôle est de permettre l’intégration de plusieurs fiches d’un même formulaire dans un unique document de publipostage.
On utilise plus souvent Excel que Word pour utiliser le mode listing (beaucoup plus souple pour un rapport de plusieurs fiches).
Il faut utiliser MS Excel 2007 ou supérieur (Format .xlsx). MS Excel 2013 recommandé.
Pour un rapport Excel, il faut toujours sélectionner la librairie Aspose pour Excel.
On peut partir d’un fichier Excel vierge ou d’un modèle existant.
Les propriétés & personnalisations faites sur le fichier sont respectées lors du publipostage (Police / couleurs/ etc.).
Les règles, formules, retraitements de données sont aussi respectés lors du publipostage.
Le fonctionnement dans Daxium-Air du publipostage Excel est similaire au publipostage Word (Génération / Automatisation).
On limite à 30 000 le nombre de fiches pouvant être générées pour un rapport en mode listing.
Mode pas-à-pas
Insérer une feuille nommée « PPActions » : cette feuille contiendra les balises indiquant les champs à insérer dans le rapport.
Insérer une feuille nommée selon votre choix
Dans cette nouvelle feuille, créer un tableau une ligne suffit (1 entête + 1 ligne) qui sera rempli avec une ligne par fiche et une donnée par colonne
Donner un « nom de zone » à votre tableau : sélectionner le tableau (coin angle gauche supérieur) et nommer la zone
Dans la feuille PPActions, ajouter une ligne avec autant de colonnes que de champs dans votre tableau comme suit :

Détails :
Type:table = Syntaxe invariable pour déclarer un tableau
TableName:nom du tableau = Nom du tableau donnée dans la zone
Value:nom système du champ = Nom système du champ dans le formulaire
6. Insérer un tableau avec relation (structure relationnelle) avec une ligne comme suit :<%Type:subtable; TableName:nom du tableau ; Relation:nom de la relation%> | <%Value:nom du champ%>
Détails :
Type:subtable = syntaxe invariable pour déclarer un tableau de relations
TableName:nom du tableau = Nom du tableau donnée dans la zone
Relation:nom de la relation = Libellé du champ relation dans le formulaire principal
Champs particuliers
Image : <%Value:nom système du champ; Type:Image%> (Contrairement au Publipostage Word, on ne définit pas ici la taille de la photo.C’est la taille de la cellule choisie qui fait foi (il faut donc agrandir la taille de cette cellule qui va recevoir la photo si besoin)
Relation quantifiable : <%Value:[Relation.Count]%>
Polices de caractères pour PDF
Word propose une multitude de polices de caractères, mais pour la génération des rapports au format PDF, la liste des polices disponibles est restreinte aux polices listées ci dessous:
Courier, Courier Bold, Courier Italic, Courier Bold-Italic
Helvetica, Helvetica Bold, Helvetica Italic, Helvetica Bold-Italic
Times Roman, Times Bold, Times Italic, Times Bold-Italic
Symbol
Zapf DingbatsNB
Lora, Regular, Bold, Italic, Bold Italic, Medium, Medium Italic
Poppins, Black, Black Italic, Bold, Bold Italic, Extrabold, Extrabold Italic, Medium, Medium Italic, Thin, Thin Italic, Light, Light Italic, SemiBold, SemiBold Italic
Si la police choisie dans le modèle Word n'est pas disponible au format PDF, une conversion automatique de la police sera réalisée vers une police disponible en PDF. Il est possible de faire une demande auprès du support Daxium pour ajouter une nouvelle police de caractères à la liste ci dessus, sous réserve que la police demandée soit disponible en téléchargement, et libre de droits.
Rapport planifié
Il est possible de déclencher la génération et l’envoi de rapports à une fréquence précise. Pour mettre en place un rapport planifié, sélectionnez le modèle de rapport souhaité, cochez "Listing mode" puis cliquez sur "Ajouter un rapport planifié" :

Cas particulier : Il n'est pas possible d'afficher la fonction utilisateur courant dans les rapports planifiés.
Mode pas-à-pas
Renommez le nom du fichier
Sélectionnez un format
Définissez une TimeZone
Choisissez une seule condition pour que la génération se déclenche. Par défaut, la génération se déclenche sur la période définie plus bas. Les conditions applicables sont celles du formulaire.

5. Si vous souhaitez envoyer le rapport généré par mail, remplissez les parties "Email" et "Destinataire".
Par défaut, le mail sera toujours expédié par mailjet@daxium.com ou noreply@mg.daxium-air.com.
Le bouton </> Editer permet d'accéder au champs du formulaire pour ajouter des données saisies dans la fiche.




6. Définissez le contenu du rapport, c'est-à-dire, les fiches à inclure dans le fichier qui sera généré

7. Déterminez la période à l'aide des options, vous pouvez choisir les champs systèmes (date de création, date de mise à jour,...) ou un champ date spécifique du formulaire

Rapport automatique
Il est possible de déclencher la génération et l’envoi de rapports automatiquement. Le process de création est proche de celui d'un rapport planifié.
Mode pas-à-pas
Renommez le nom du fichier
Sélectionnez un formart
Définissez une TimeZone
Choississez une condition pour que la génération se déclenche. Par défaut, la génération se déclenche sur la période définie plus bas. Les condition sont celles du formulaire.
Sélectionnez un événement déclencheur (création et/ou de la modification d’une fiche)

6. Si vous souhaitez envoyer le rapport généré par mail, remplissez les parties "Email" et "Destinataire"
Par défaut, le mail sera toujours expédié par mailjet@daxium.com ou noreply@mg.daxium-air.com.
Le bouton </> Editer permet d'accéder au champs du formulaire pour ajouter des données saisies dans la fiche.




Cas particulier : Il n'est pas possible d'afficher la fonction utilisateur courant dans les rapports automatiques.
Utilisation des données systèmes de la fiche
A. Identification de la fiche
Numéro de Fiche : <%SubmissionId%> ou <%Id%> (Résultat : 584152)
Numéro uid : <%SubmissionUid%>
B. Création de la fiche
Date de premier enregistrement web de la fiche : <%CreatedAt%>
Date de création de la fiche : <%DataCreatedAt%>
Créateur de la fiche :
Nom complet: <%UserName%>
Prénom : <%[CreateUser.FirstName]%>
Nom : <%[CreateUser.LastName]%>
Mail : <%[CreateUser.Email]%>
C. Dernière mise à jour de la fiche
Date de dernier enregistrement web :
Date de mise à jour de la fiche :
Utilisateur ayant modifié la fiche en dernier :
D. Formulaire
Nom du formulaire : <%StructureName%>
Identifiant du formulaire : <%StructureId%>
E. Tâche associée
Date et heure de début prévu : <%[Task.PlannedStart]%>
Date et heure de fin prévue : <%[Task.PlannedEnd]%>
Deadline : <%[Task.PlannedDue]%>
Date et heure de début effectif : <%[Task.RealStart]%>
Date et heure de fin effective : <%[Task.RealEnd]%>
Etat (fait, à faire) : <%[Task.FillStatus]%>
Statut temporel (à l'heure, en retard...) : <%[Task.TimeStatus]%>
F. Autres informations
Nom de la compagnie :
Position native géolocalisé lors de la création de la fiche sur le mobile :<%SubmissionLatitude%><%SubmissionLongitude%>
Fonctions avancées
Insertion d’un champ simple
L’insertion d’un champ de formulaire est faite en entourant son nom avec <% et %>. Ces marqueurs indiquent au système où les données de la fiche doivent être insérées. Il est possible d’appliquer sur une syntaxe les formats supportés par Word/Excel tel que Gras, Italique, souligné.
Syntaxe: <%Nom_Système%>
Si votre champ Texte est en "Texte enrichi", utiliser <%MarkDown(NomSysteme)%> pour faire apparaître la mise en page sur votre rapport (Word uniquement).
Important : Les noms systèmes sont sensibles à la casse.
Insertion d’une formule
Il est possible d’appliquer une formule sur les champs utilisés dans le rapport.
Syntaxe : <%ChampNom1 <opérateur> ChampNom2 | ExpressionConstante%>
<opérateur> peut être une opération mathématique, telle que +, -, *, /, %
ExpressionConstante est un nombre avec ou sans décimale
Les parenthèses sont également prises en charge.
% est aussi un module opérateur.
Exemples :
TOTAL: €<%Prix * 1.196%>
Avec pour Prix = 10 il en ressort : TOTAL: €11,96
Remise: $<%(Prix Quantité) – (15 / 100) (Prix * Quantité)%>
Avec pour Prix= 18 et pour Quantité=2, il en ressort : Remise: $30,6
Voici la liste complète des fonctions qui sont prises charge. Ces fonctions mathématiques sont également sensibles à la casse.

Répétition d’une section d’un document – Repeat()
Lorsque le modèle de rapport est en Mode Listing, celui-ci répète sur plusieurs pages les mêmes éléments de syntaxe qui sont contenus dans les fiches de données. Pour spécifier une section précise à répéter dans une partie du modèle, il est nécessaire de créer un tableau et d’y insérer une instruction Repeat() sur la première ligne.
Pour que le système identifie la ligne à répéter, l’instruction Repeat() est utilisée.
Exemple Mode Listing :

Avec 3 lignes de données, le résultat est le suivant :

L’instruction Repeat() doit être systématiquement le premier élément de la ligne. Il doit être placé sur la cellule la plus à gauche de la ligne du tableau.
L’ensemble du modèle ne pourra contenir qu’une instruction de Repeat(). Dans le cas où il y a plusieurs instructions de répétition dans le document, seule la première sera détectée.
3.1. Filtrage des données source basé sur un critère
En haut d’un document ou dans la première cellule d’un tableau, il est possible d’insérer une instruction pour répéter la section et filtrer les données de base : %Repeat(ChampDate > #12/01/2023#)%> où #12/01/2023# est une date exprimée en : Jour / Mois / Année.
Il est possible d’utiliser le champ #date# au lieu d’une date en dur. Cette variable sera remplacée par la date du jour. Exemple : <%Repeat(ChampDate <#date#)%>
Il est également possible de soustraire une période de temps à partir de la date du jour.
Exemple : <%Repeat(ChampDate < #date-5d#)%>
Cette expression signifie 5 jours avant aujourd’hui. Le format n’est pas sensible à la casse, donc #Date-5D# fonctionne également.
Il est possible de définir cet intervalle en utilisant une des unités de temps présentes dans le tableau ci-dessous :

Information : On peut également utiliser un signe + au lieu du signe – pour faire référence à des dates passées ou futures. Exemple : DateField <#date+10d#>, soit aujourd’hui + 10 jours.
Remarques Importantes : Cette instruction de répétition ne supporte pas les fonctions avec les Noms Systèmes de Champs. Il est possible de combiner des conditions de filtrage avec les opérateurs AND ou OR.
Exemple : <%Repeat(DateField<#date-5d# AND Id >= 3) %>
3.2. Eviter la redondance de données dans un Repeat()
Lorsque vous utilisez la fonction Repeat(), il se peut que vous souhaitiez éviter la redondance de certaines informations. Pour cela, vous pouvez utiliser la fonction DISTINCT().
Exemple : Dans une liste de commandes, on voudrait connaître l’ensemble des clients en évitant la répétion du nom dans le cas où un client aurait fait plusieurs commandes. On peut alors utiliser <%DISTINCT('Client')%> à la place de <%Client%> dans un Repeat().
Dans le cas où le champ aurait plusieurs textes séparés comme les dates (avec jours, mois années…) ou les listes (avec un texte par niveau de profondeur dans la liste), on peut concaténer ces textes un utilisant un second argument dans la fonction DISTINCT().
Exemple : <%DISTINCT('F(\'MM yyyy\',CreatedAt)', ',')%> permet d’avoir l’ensemble des mois de création d’un ensemble de fiches.
Manipulation d’images
4.1. Insérer une image – Image()
Les photos peuvent être insérées dans le Modèle de document à l’aide d’une instruction Image(), syntaxe raccourcie Img(), ainsi que de l'insérer dans un tableau d'une colonne.
Syntaxe : <%Image(ChampNom, Largeur , Longueur)%>
Si la hauteur n’est pas spécifiée, le système suppose que l’image tient dans un carré de largeur x largeur pixels.
Si la largeur et la hauteur sont spécifiées, l’image résultante est adaptée à ce rectangle sans se déformer
Exemples :
Grande Photo : <%Image(NomChampImage, 200)%>

Petite Photo : <%Img(NomChampImage, 70, 50)%>

L’image est automatiquement redimensionnée selon la dimension de votre fonction Image(). Si l’image originale est plus grande que la dimension spécifiée, elle sera alors réduite en conséquence, pour un gain de place dans le document de publipostage généré.
4.2. Insérer une suite d’images – Images()
Concernant un champ image avec un nombre maximal supérieur à 1, il vous faut utiliser une autre fonction qui est Images(), ainsi que de l'insérer dans un tableau d'une colonne.
Syntaxe : <%Images(ChampNom, start, end)%>

Pour définir une taille sur vos images il vous faut ajouter à la suite <%Image()%>.
Exemple : <%Images(Photo)%><%Image(400)%>
Il est possible d’obtenir plus de données issues de vos images, toutefois vous devrez les renseigner dans un tableau avec les éléments suivant :

4.3. Redimensionner des images
Il est possible de redimensionner les images avant de les intégrer dans le rapport. Cela permet de diminuer le poids total du rapport final et d'optimiser sa durée de génération.
Pour cela, il faut ajouter une balise suivante (remplacer ImageSize par l'attribut figurant dans le tableau ci-dessous : <%UseImagesPreview('ImageSize')%>
Toutes les images qui suivront cette balise seront redimensionnées selon les règles suivantes :

NB L'instruction <%UseImagesPreview('ImageSize')%> permet de redimensionner les images.
-> Il n'y a pas de données Exif dans les images ainsi redimensionnées.
4.4. Convertir une image en JPG
Il est aussi possible de réduire la taille des images en les convertissant en jpg. Pour cela, vous pouvez utiliser la fonction SetPdfJpegQuality qui prend comme paramètre un indice de qualité d'image (entre 1 et 100).
Il suffit d'ajouter la fonction dans le document word ou dans une case de la feuille PPActions.
Syntaxe : <%SetPdfJpegQuality(10)%>
4.5. Insérer une image dans Excel issue d'un champ relation
Pour insérer dans un rapport Excel n'utilisant pas le mode listing, vous pouvez utiliser la syntaxe suivante pour récupérer le champ photo d'une fiche en relation.
<%Img([NomSystèmeRelation.NomSystemeImage], 60, 60)%>
Remplacer le snake_case par le CamelCase (https://fr.wikipedia.org/wiki/Snake_case, https://fr.wikipedia.org/wiki/Camel_case), c'est-à-dire, remplacer les premières lettres de chaque mot du nom système par une majuscule et supprimer le symbole "_" si existant, idem pour le champ photo de la relation
Syntaxe : <%SetPdfJpegQuality(10)%>
4.6. Insérer un plan – Map()
Comme on dispose de la longitude ainsi que la latitude dans les fiches si un champ localisation est présent, il est possible d’afficher une carte centrée sur le point qui situe la fiche. La carte est générée via l’API Google Maps. Cette fonction est dépendante de la configuration du paramètre de localisation du formulaire.
Syntaxe : <%Map(latitude, longitude, zoom, largeur, longueur ,TypeCarte)%>
ou <%Map(adresse, zoom, largeur, longueur ,TypeCarte)%>
latitude est un champ où une valeur contient la coordonnée de la latitude.
longitude est un champ où une valeur contient la coordonnée de la longitude.
adresse correspond à votre champ de localisation.
zoom peut aller de 1 à 22, où 22 est la précision la plus détaillée sur la carte.
largeur est la largeur de taille en pixels de la carte.
hauteur est la hauteur de taille en pixels de la carte.
TypeCarte est le type de carte où 0: Vue Rue, 1: Vue Satellite, 2: Vue Mixte.
Exemple avec localisation par défaut : <%Map(SubmissionLatitude, SubmissionLongitude, 17, 200, 200)%>
Résultat :

Exemple avec un champ localisation : <%Map(LocalisationIntervention_latitude, LocalisationIntervention_longitude, 17, 200, 200)%>
Résultat :

4.7. Données Exif d’une image – ImageExif()
Les photos peuvent contenir des données nommées Exif. Vous pouvez donc récupérer les données textes stockées, mais aussi la situer sur une carte si elles disposent des coordonnées Gps.
Syntaxe : <%ImageExif()%>

Exemples :
Date de l’image : <%ImageExif(Photo, 'DateTime')%> (Résultat : 25/08/2004)
Position de la prise photo : <%Map(ImageExif(ChampLocalisation, 'GpsLatitude'), ImageExif(ChampLocalisation, 'GpsLongitude'), 17, 150, 150)%>

NB Pour un rapport Excel en mode listing, l'instruction pour récupérer les données Exif d'une image est par exemple <%Value:ImageExif([Photo],'DateTime')%> pour la date/heure de création de la photo (Résultat : 25/08/2004 09:32)
4.8. Codes barres
L’insertion d’un code-barres dans un document est possible en utilisant la syntaxe suivante :
<%BarCode(data, 'BarCodeType', largeur, longueur)%>
Les types de codes-barres disponibles sont les suivants :
Codes-barres numériques
Codes-barres alphanumériques
Code11 : Utilisé principalement pour les équipements de télécommunications en matière d’étiquetage (plus d’informations)
Codabar : Ancien code souvent utilisé dans les systèmes de bibliothèques, parfois dans les banques de sang (plus d’informations)
EAN13 : Article européen de numérotation code produit détail à l’international. Les données doivent être à 12 chiffres (plus d’informations)
EAN8 : Version du Code EAN comprimé pour une utilisation sur de petits produits. Les données doivent être 7, 9, 12, 13 chiffres (plus d’informations)
Industrial2of5 : Ancien code, pas d’usage courant (plus d’informations)
Interleaved2of5 : Code numérique compact, largement utilisé dans l’industrie, le fret aérien (plus d’informations)
MSI : Variation du code Plessey couramment utilisé aux Etats-Unis (plus d’informations)
Postnet : Utilisé par US Postal, service automatisé de tri de courrier (plus d’informations)
UPCA : Code universel des produits vu sur presque tous les produits de vente au détail aux Etats-Unis et au Canada. Les données doivent être 12 chiffres (plus d’informations)
UPCE : Version du code CUP comprimé pour une utilisation sur de petits produits. Les données doivent être 6, 7 chiffres (plus d’informations)
Matrix2of5 : Les données peuvent être n’importe quel nombre de chiffres.
IntelligentMail : Les données doivent être à 20 chiffres
Exemple : <%BarCode('123456789012', 'EAN13', 120, 120)%> (code-barre numérique EAN13)
Résultat :

4.9. QR Codes
L’insertion d’un code en 2 dimensions dans un Modèle est possible en utilisant la syntaxe suivante :
Syntaxe : <%QrCode(data, width, height)%>
Exemple : <%QrCode('A String To Encode 123456', 150, 150)%>
Résultat :

Exemple : <%QrCode('A123456', 150, 150)%>
Résultat :

4.10. Afficher un texte en filigrane sur une image (Watermark)
Il est possible d'ajouter un texte en filigrane sur une image via l'instruction ImageWatermark(). Voici la syntaxe utilisée :
<%ImageWatermark(ImageFieldName, ImageWidth, ImageHeight, WatermarkText, HorzAlign, VertAlign, ForegroundColor, BackgroundColor, BackGroundOpacity, FontSize)%>
Voici la définition des différents paramètres :
ImageFieldName : Nom système de champ image utilisé
ImageWidth : largeur de l'image à insérer en pixels
ImageHeight : hauteur de l'image à insérer en pixels
WatermarkText : texte à afficher sur l'image
HorzAlign : alignement horizontal du texte (Left, Center, Right). Valeur par défaut : Right
VertAlign : alignement vertical du texte (Top, Middle, Bottom) Valeur par défaut : Bottom
ForegroundColor : couleur pour le texte (par défaut : rouge). Format : #RRGGBB ou constante
BackgroundColor : couleur pour le fond du texte (par défaut : blanc). Format : #RRGGBB ou constante
BackGroundOpacity : valeur de l'opacité du fond entre 0 et 1 (Valeur par défaut : 0 = invisible)
FontSize : taille de la police en pixels. Valeur par défaut : 12
Exemples :
<%ImageWatermark(Justificatif, 300, 0, 'Bienvenue')%>
<%ImageWatermark(Justificatif, 300, 0, 'Bienvenue', 'Left', 'Top', 'Red', 'White', 0.9, 14)%>
Pour insérer un retour à la ligne au sein du texte à inscrire, utiliser \u000A <%ImageWatermark(NomSystemImage, 300, 0, 'Hello\u000Aworld\u000A!', 'Left', 'Top', 'Red', 'White', 0.9, 14)%>

Il est possible de cumuler les textes ajoutés à l'image, en passant par une liste. Par exemple, ajouter à la fois la latitude et la longitude (données Exif de l'image).
<%ImageWatermark(NomSystemImage, 300, 0, List(',', ImageExif(NomSystemImage, 'GpsLatitudeDM'), ImageExif(NomSystemImage, 'GpsLongitudeDM')), 'Left', 'Top', 'Red', 'White', 0.9, 14)%>
Pour récupérer la valeur d'un champ du formulaire, utiliser la syntaxe ci dessous:
<%ImageWatermark(NomSystemeImage, 300, 0, NomSystemeChampaRecuperer , 'Center', 'Middle', 'Red', 'White', 0.9, 14)%>
4.11. Afficher un texte en filigrane sur plusieurs images d'un même champ (Watermark)
Lorsqu'un champ image contient plusieurs images/photos, il est possible d'appliquer un marquage Watermark sur l'ensemble des images du champ.
Pour cela, il faut combiner l'instruction Images() et l'instruction ImageWatermark() comme ci dessous:
<%Images(NomSystemImage)%><%ImageWatermark(200, 0, List(',', ImageExif( 'GpsLatitude'), ImageExif( 'GpsLongitude')), 'Center', 'Middle', 'Red', 'White', 0.9, 14)%>
NB
L'instruction complète doit être insérée dans un cadre dans le modèle (template).
Le nom système du champ image n'est à indiquer qu'une fois, dans l'instruction initiale Images() . Ce nom n'est pas répété ensuite pour l'instruction ImageWatermark ni pour ImageExif()
Fonctions
Les fonctions ne sont pas sensibles à la casse, elles peuvent être rédigée soit en majuscules, minuscules et peuvent également être combinées. Néanmoins, nous vous conseillons d’utiliser le modèle « CamelCase » pour les noms de fonctions afin d’uniformiser vos balises.
Les noms des champs restent dans tous les cas sensibles à la casse.
5.1. Index()
Cette fonction retourne dans un tableau une suite de numéro d’incrémentation.
Exemple Mode Listing :

Avec 3 lignes de données, le résultat est le suivant :

5.2. MapLetter()
Cette fonction affiche la lettre de la pastille généré par l’API Google Maps d’une localisation.Si vous utilisez une fonction Map() pour ce point précis, la lettre affichée sur la carte sera retourné par MapLetter().
Syntaxe : <%MapLetter()%>

Exemple :

Résultat :

5.3. Formatage de valeurs de champs – Format()
Les champs Date et Nombre peuvent êtres convertis en utilisant la fonction de formatage en un format de données précis.
Syntaxe : <%Format('Formats', ChampNom)%> Ou <%F('Formats', ChampNom)%>
F() est aussi un raccourci pur la même fonction de Format().
La variable Format() peut être :

Exemple : avec Prix = 19,3 et Date = n ° 14/02/2012 15: 14: 20 #
Champ Nombre : <%Format('0.00', Prix)%> (Résultat : 19,30)
Champ Date : <%F('yyyy-MM-dd', Date)%> (Résultat : 2023-02-16)
Date et heure actuelle – Date()
Syntaxe : <%Date()%>
Exemple : <%F('dd/MM/yyyy', Date())%> (Résultat : 14/02/2023)
Ajouter ou retirer des heures – AddHours()
Syntaxe : <%AddHours(Nomsystème, NombreHeures)%>
Exemple : <%AddHours(DateHeure, -6)%> (Résultat : 14/02/2023 06:00:00 au lieu de 14/02/2023 12:00:00)
Remarque : Pour un ajout d’heure le format est <%AddHours(DateHeure, 6)%>.
Ajouter des jours – AddDays()
Syntaxe : <%AddDays(Date, NombreDeJours)%> (NombreDeJours peut être positif ou négatif)
Exemple : <%AddDays(Date(), -5)%>
Si Date() retourne #12/02/2023 12:14:34#, résultat : 07/02/2023 12:14:34
Ajouter des mois – AddMonths()
Syntaxe : <%AddMonths(Date,NombreDeMois)%>
Exemple : <%AddMonths(Créé, -1)%>
Créé = #12/02/2023 12:14:34#, résultat : 12/01/2023 12:14:34
Ajouter des années – AddYears()
Syntaxe : <%AddYears(Date, NombreAnnée)%>
Exemple : Garantie : <%AddYears(Créé, +2)%>
Créé = #12/02/2023 12:14:34#, résultat : 12/02/2023 12:14:34
5.4. Add()
Cette fonction permet l’additions de données numériques et de renvoyer la somme. Si certaines valeurs sont nuls ou vides, ils seront considérés comme égal à 0.
Syntaxe : <%Add(Valeur1, Valeur2, Valeur3, …)%>
Exemple : Taille : <%Add(Taille1, Taille2, Taille3)%>
Si Taille1 = 5,3, Taille2 = 2.3 et Taille3= <null>, cette fonction retourne en résultat : 7.6
5.5. Manipulation de chaînes de caractères
Il est possible d’appliquer une conversion sur vos données de fiches afin de les modifier en chaînes de caractères soit une conversion en texte. Une chaînes de caractères est exprimé par la fonction <%String()%> ou via le raccourcis <%S()%>.
Concaténation
Il est parfois utile de concaténer des chaînes de caractères. Pour ce faire, nous utilisons l’opérateur ‘+‘. La donné Prix étant une valeur numérique pour pouvoir utiliser notre fonction nous devons donc les mettre au même niveau via la fonction <%S()%>.
Exemple : Prix = <%S(Prix) + 'Euros'%> soit Prix = 14.32
Résultat : Prix = 14,32 Euros
Appliquer une conversion en Majuscule ou Minuscule – ToUpper (), ToLower ()
Faire une chaîne de caractère en majuscules est possible en utilisant la fonction ToUpper().
Syntaxe : <%ToUpper(ChampNom)%>
Exemple : Champ1 = Voici un Exemple
<%ToUpper(Champ1)%>
Résultat : VOICI UN EXEMPLE
Pour faire une chaîne de caractère en minuscules il faut utiliser la fonction ToLower().
Syntaxe : <%ToLower(ChampNom)%>
Exemple : Champ1 = Voici un Exemple
<%ToLower(Champ1)%>
Résultat : voici un exemple
Création d’une liste d’éléments – List()
Si vous voulez créer une liste séparée avec des caractères à plusieurs arguments, utiliser la fonction List().
Syntaxe : <%List(séparateur, valeur1, valeur2 [,valeur n])%>
Exemple : Adresse : <%List(', ', Adresse, CodePostale, Ville, Pays)%>
Adresse : 12 rue des églantiers, 17400, Lacanau, France
Si l’un des éléments donnés est vide, le séparateur est omis.
Notez que cette fonction peut être utilisée en combinaison avec la fonction Map() pour produire une adresse valide avec différents éléments.
Diviser une chaîne et mettre un index – Split()
Vous pouvez extraire une valeur à partir d’une chaîne de caractères contenant un séparateur. L’index commence à partir de 0 soit la valeur 12 (Numéro de la rue) dans l’exemple ci-dessous.
Syntaxe : <%Split(chaîne, séparateur, IndexàExtraire)%>
Chaîne de caractère : Chaîne source à diviser.
Séparateur : Chaîne qui sépare les éléments.
IndexàExtraire : Index de la valeur à récupérer.
Exemple : Donnée : 12, rue des mines, Puteaux, 92800,France
Adresse : <%Split(Adresse, ',', 2)%>
Résultat : Adresse : Puteaux
5.6. Types de conversion
ToNumber()
Dans certains cas, il est nécessaire de convertir une chaîne en nombre. Par exemple si votre champs de données est de type Texte alors la valeur qu’elle contient sera une chaîne de texte. Pour la convertir en nombre pour appliquer un calcul une fonction sera nécessaire.
Syntaxe : Le nom de la fonction est ToNumber(). Il existe un raccourci pour cette fonction qui est N().
Exemple : Prix = 127.4202
<%Format('0.00', N(Prix))%>
Résultat : Prix = 127,42
Remarque : Le nombre converti issu du format texte original peut contenir en guise de séparateur une virgule (,) ou un séparateur décimal (.). Cela fonctionnera dans les deux cas.
ToDate()
Conversion d’une date type texte à une date réelle en utilisant la fonction ToDate().Le raccourci pour cette fonction est D().
Syntaxe : <%ToDate(ChampNom)%> ou <%D(ChampNom)%>.
Exemples : Date = ‘14/02/2012 15:24:10’
Date : <%F('dd/MM/yyyy', ToDate(Date))%>
Résultat Date : 14/02/2012
Date : <%F('MMM yyyy', D(Date))%>
Résultat Date : Fev. 2016
ToString()
Dans certains cas, il est nécessaire de convertir le format du contenu d’un champ.
Syntaxe : Le nom de la fonction est <%ToString()%>. Il existe un raccourci pour cette fonction qui est S().
Exemple : Prix = 127.42
Prix : <%S(Prix)%>
Résultat Prix : 127.42
Instruction conditionnelle
6.1. Affichage d’une valeur en fonction d’une évaluation – If()
Quand une condition est vraie, vous pouvez afficher un texte ou une autre valeur. On utilise pour cela la fonction If.
Syntaxe : <%If(Champ='Valeur', 'Vrai', 'Faux')%>
La condition doit retourner Vrai ou Faux. La condition peut-être faite d’une combinaison de et, ou en utilisant le '&&' pour et, '||' pour ou.
Exemple : <%If(Booleen=='True', 'Oui', '')%>
Si un champ Booléen est égal à True alors Booleen = Oui si autre valeurs alors Rien/Vide. Donc si mon Booléen est égal à False alors aucune valeur ne sera affichée. Nous pouvons aussi faire une suite de plusieurs fois la même conditions pour englober l’ensemble des cas d’un Booléen comme : True, False et Undefined.
<%If(Booleen=='True', 'Oui', '')%><%If(Booleen=='False', 'Non', '')%><%If(Booleen=='', '', '')%>
Il est également possible d'utiliser une syntaxe courte pour tester et traiter les 3 états possibles:
<%If(Booleen, 'valeursiTrue', 'valeursiFalse', 'valeursiNot set')%>
Remarque : Entre Word et Excel l’apostrophe n’est pas identique. Donc dans le cas d’un copier/ coller entre vos deux Modèles de documents (Word vers Excel) vous devrez les remplacer celle-ci.
6.2. Déterminer si un champ existe – Exists()
Vous pouvez tester l’existence d’un nom de domaine spécifique en utilisant la fonction Exists().
Syntaxe : <%Exists('ChampNom')%>
Exemple : <%If(Exists('SubmissionLatitude'), 'La donnée existe', 'La donnée n\’ existe pas')%>
Si SubmissionLatitude n’est pas retourné car non contenue dans la fiche, cela donne : La donnée n’existe pas (n\' existe : synthaxe permettant integrer l'apostrophe dans le rapport).
Cette fonction est surtout utile pour vérifier la présences d’images.
Exemple : <%If(Exists('Photos#1'), Image([Photos#1], 180), '')%>
Ici nous vérifions la présence de la première image pour un champ photo avec une limite à 5 images maximum.
Dès lors si ma photo existe, j’aurais uniquement ma première photo d’affiché dans le résultat de publipostage.
6.3. Masquer ou afficher une section avec une condition
La fonction If() permet de tester si une condition est vérifiée, puis d’afficher un texte en fonction de la réponse. Il faut donc prévoir les deux solutions : celle où la condition est vérifiée et celle où elle ne l’est pas. Toutefois la fonction Hide()quant à elle permet de cacher un texte lorsque la condition est vérifiée et à l’inverse Display() de l’afficher.
Il faudra systématiquement ajouter une balise <%End%> à la fin de la section (qui sera cachée ou affichée) pour lui définir une limite.
A noter qu'il ne sera pas possible d'afficher un utilisateur courant dans les rapports.
Hide()
Masquer une section où la condition est vraie.
Syntaxe : <%Hide(Condition)%>Section de Texte<%End%>
Une instruction de type Masquer doit toujours finir avec une instruction <%End%>. Si l’instruction de fin est omise tout le reste du document est considérée à l’intérieur d’un bloc.
Exemple :

Résultat :

Il est possible d’utiliser une expression complexe avec des parenthèses et des opérateurs booléens :
|| Est l’opérateur OR
&& Est l’opérateur ET
<> Est l’opérateur ne correspond pas
== Est l’opérateur égal
!= Est l’opérateur N’est pas égal
Exemple : <%Hide((Champ1 == 'valeur' ||Champ1 =='valeur2') && Champ3!= '')%> Certain contenus sont cachés <%End%>
Vous pouvez aussi convertir en chaîne de caractère votre variable avec S().
Exemple : <%Hide(S(Champ1)=='')%> Résultat : <%Champ1%> <%End%>
Display()
La fonction inverse est également disponible. Afficher une section où la condition est vraie.
Syntaxe : <%Display(Condition)%>Section de Texte<%End%>
Important : Il n’est pas possible d’inclure à la fois un Hide() et un Display() dans une même condition.
DisplayRow()
Cette fonction est disponible uniquement dans un tableau. Elle permet d'afficher une ligne du tableau où la condition est vraie. La fonction doit être placée dans la première cellule de la ligne concernée (ou dit autrement, dans la colonne la plus à gauche de la ligne), avant tout autre contenu comme du texte.Dans l'exemple ci-dessous, toute la ligne en jaune est affichée si la condition est vraie.
Syntaxe : <%DisplayRow(Condition)%>
Exemple :
Important : Il n’est pas possible d’inclure à la fois un Hide() et un DisplayRow() dans une même condition.
6.4. Contains()
Il est parfois utile de savoir si une chaîne de caractère est contenue dans une autre. Pour cela, la fonction Contains() est utilisée.
Syntaxe : <%Contains(Chaîne, modèle)%>
La chaîne de caractère est le domaine où la valeur est à tester.
La modèle est l’expression à trouver dans la chaîne.
Cette fonction retourne True ou False selon l’évaluation.
Exemple : <%If(Contains(Champ, 'mesure'), 'MESURE', 'RIEN') %>
Résultat : Champ = ‘La mesure par défaut est prise’ donne comme résultat : MESURE
Remarque : La comparaison est sensible à la casse. Pour éviter cas comparaisons sensibles, utilisez le ToUpper() ou la fonction ToLower() en combinaison avec Contains().
Exemple : <%If(Contains(ToUpper(Field), 'MESURE' ), 'MESURE', 'RIEN')%>
6.5. StartsWith()
Une condition qui permet de tester si une chaîne de caractère commence par la valeur spécifiée.
Syntaxe : <%StartsWith(Chaîne, Modèle)%>
La chaîne de caractère est le domaine où la valeur est à tester.
La modèle est l’expression à trouver dans la chaîne.
Cette fonction retourne True ou False selon l’évaluation.
Exemple : <%If(StartsWith(Champ, 'défaut'), 'Valeur par défaut', '')%>
Résultat : Champ = ‘La mesure par défaut est prise’ donne comme résultat : Valeur par défaut
6.6. EndsWith()
Une condition qui permet de tester si une chaîne de caractère se termine par la valeur spécifiée.
Syntaxe : <%EndsWith(Chaîne, Modèle)%>
La chaîne de caractère est le domaine où la valeur est à tester.
La modèle est l’expression à trouver dans la chaîne.
Cette fonction retourne True ou False selon l’évaluation.
Exemple : <%If(EndsWith(Champ, 'END'), 'end', '')%>
Résultat : Champ = ‘1234-END’ nous retourne : end
Relation
Pour pouvoir exploiter les données d’un formulaire via une relation, il vous faut créer un tableau et y insérer votre relation détaillée via l’instruction spécifique Relation().
Syntaxe : <%Relation('Libellé du champ Relation')%>
Exemple :
Date de l’intervention : <%DateIntervention%>
Sous Articles :

Résultat :
Date de l’intervention : 05/09/2016
Sous Articles :

Dans ce cas, la relation Anomalies constatées est utilisée pour récupérer les sous-fiches.
Si aucunes sous-fiches ne sont liées à votre fiche principale, alors la table entière sera vide.
Si l’option de support de positionnement est coché voici la syntaxe dans les fichiers ci-dessous :
7.1. Trier une relation unique via un champ
Il est peut-être utile lors de l’utilisation d’une relation de tirer une sous-formulaire en fonction d’un champs. Vous pouvez définir via un second paramètre son ordonnancement.
Syntaxe ordre croissant : <%Relation('Libellé du champ Relation', 'NomSystemeDuChamp')%>
Syntaxe ordre décroissant : <%Relation('Libellé du champ Relation', 'NomSystemeDuChamp DESC')%>
Exemple:
Sous Articles ordre croissant :

Résultat :
Sous Articles ordre croissant :

Exemple:
Sous Articles ordre décroissant :

Résultat :
Sous Articles ordre décroissant :

7.2. Filtrer une relation multiple via un sous-formulaire
Un champ relation peut posséder plusieurs sous-formulaires. Si vous souhaitez filtrer les fiches de la relation en fonction du type de formulaire, il faut utiliser la syntaxe suivante :
<%Relation('Libellé du champ Relation', OrderBy, StructureName='Nom du formulaire')%>
OrderBy correspond au tri tel qu'expliqué dans le paragraphe 7.1
Nom du formulaire correspond au nom du formulaire que vous souhaitez conserver
Par exemple, nous avons une relation Anomalies constatées qui possède deux sous-formulaires : Anomalie et Divers. Pour conserver uniquement les fiches du formulaire Anomalie, voici la syntaxe attendue :
<%Relation('Anomalies constatées', '', StructureName = 'Anomalie')%>
7.3. Relation quantifiable
Cette option ne peut-être utilisé qu’avec ou sans l’option Multiple, car ce n’est pas un champs de création de données mais de liaison. Cette fonction va de pair avec l’utilisation de la diffusion de fiche, elle permet d’afficher une quantité sur une sous-fiche en relation.
Pour obtenir la quantité il faut dans un tableau de relation inclure la syntaxe <%[Relation.Count]%>
Attention aux lettres majuscules qui sont obligatoires pour fonctionner.
Exemple:

7.4. Relation de relation
Il est possible d'insérer la relation d'une relation dans votre rapport. Pour cela, il faut créer un premier tableau et y insérer votre première relation, puis insérer un deuxième tableau à l'intérieur du premier tableau :
dans l'exemple suivant nous verrons comment insérer das un premier tableau une relation du sous-formulaire, nommée "libellé de la relation" puis comment insérer dans un deuxième tableau imbriqué une relation d'un autre formulaire lui même étant en relation de ce sous formulaire. Cette dernière relation se nomme "libellé de la relation de relation".
Il est possible de descendre jusqu'à 3 niveaux dans les relations de relation (en sommes, la relation de la relation de la relation) mais pas au dela. Il faudra donc modifier vos structures si nécessaire.
En d'autre terme, on insère dans un deuxième temps une relation de relation.
Puis dans le tableau, on insert à la suite de la relation les champs de la relation qu'on veut voir présent dans le rapport. Puis on répète l'opération les champs de la relation de la relation qu'on veut voir affiché dans le rapport :

N.B. : Le champ de type "Elément de relation" n'est pas persistant et ne peut pas être utilisé dans un rapport.
> Revenir en haut
Fonctions d’agrégation
Soyez conscient de la syntaxe spécifique pour l’utilisation des fonctions suivantes. Dès qu’il y a un argument, il doit être renseigné avec des guillemets simples. Par exemple: <%Sum('ToNumber(Prix)')%>
8.1. Count()
Compte le nombre total d’enregistrements d’un même champs via Count().
Syntaxe : <%Count()%>
Exemple : Total: <%Count()%> Enregistrement
Cette instruction peut être utilisée n’importe où dans le document.
8.2. Sum()
Il est possible d’additionner les valeurs des champs.
Syntaxe : <%Sum('ChampNom')%>
Notez-les apostrophes qui entourent ChampNom. Ceux-ci sont obligatoires pour identifier la donnée.
Lorsque vous n’êtes pas sûr si un champ est de type numérique, vous pouvez convertir la donnée en un nombre en utilisant la fonction ToNumber() ou N().
Exemple : Total: <%Sum('N(Prix)')%> €
Résultat : Total: 134,321 €
8.3. Moyenne – Avg()
Pour obtenir la moyenne des valeurs de champ, utilisez la fonction Avg().
Syntaxe : <%Avg('ChampNom')%>
Même que pour Sum(), vous pouvez utiliser la fonction de ToNumber() ou N() pour convertir un texte en nombre.
Exemple : Moyenne: <%Avg('N(Revue)')%> €
Résultat : Moyenne: 14,32 €
8.4. Minimum – Min()
Pour obtenir la valeur minimale d’une série, vous pouvez utiliser la fonction Min().
Syntaxe : <%Min('ChampNom')%>
Vous pouvez convertir le champ en un numéro en utilisant la fonction ToNumber() ou N().
Exemple : Minimum: <%Min('N(Prix)')%> €
Résultat : Minimum: 9,9 €
8.5. Maximum – Max()
Pour obtenir la valeur maximale d’une série, vous pouvez utiliser la fonction Max().
Syntaxe : <%Max('ChampNom')%>
Vous pouvez convertir le champ en un numéro en utilisant la fonction ToNumber() ou N().
Exemple : Maximum: <%Max('N(Prix)')%> €
Résultat : Maximum: 86,65 €
8.6. Cartographie Globale – GlobalMap()
Vous permet d’afficher tous les points d’un champ localisation de plusieurs fiches sur une même carte. Ceci nécessite un Modèle de rapport en ModeListing.
Syntaxe : <%GlobalMap('LatitudeChamp','LongitudeChamp', ConnectPoints, Largeur, Hauteur, mapType)%>
Explication des champs :
LatitudeChamp et LongitudeChamp sont le nom des champs qui contiennent des valeurs de latitude et de longitude. Remarque : ils ont besoin d’être décoré ‘’ avec des citations simples comme l’expression est une fonction d’agrégation
ConnectPoints : Si vrai, il relie les points, si faux rien.
Largeur : La largeur de pixels.
Hauteur : La hauteur de pixels.
MapType : 0 pour route, 1 pour aérien, 2 pour mixte
Exemple : <%GlobalMap('latitude', 'longitude', true, 300, 300, 0)%>
Résultat :

Dans le cas d’une Relation avec un GlobalMap :

Cas particuliers
Certaines fonctionnalités disposent de syntaxes spécifiques. Voici donc le lexique des syntaxes qui sert à exploiter les données.
9.1 Liste
Isoler une ou plusieurs valeurs dans une liste
Pour isoler un niveau en particulier sur une liste arborescente unique il suffit de le définir :
Par défaut pour obtenir la valeur nous utilisons : <%NomSystèmeListe%>
Mon résultat de liste vaut A,B,C :
Obtenir A : <%[NomSystèmeListe.FirstLevel]%> ou <%[NomSystèmeListe.Level1]%>
Obtenir B : <%[NomSystèmeListe.Level2]%>
Obtenir C : <%[NomSystèmeListe.LastLevel]%> ou <%[NomSystèmeListe.LevelN]%>
Pour une liste à choix multiples sans arborescence :
Mon résultat de liste vaut A | B | C :
Obtenir A : <%[NomSystèmeListe.Item1]%>
Obtenir B : <%[NomSystèmeListe.Item2]%>
Obtenir C : <%[NomSystèmeListe.ItemN]%>
Pour une liste à choix multiples avec de l’arborescence :
Mon résultat de liste vaut A,A1 | B,B1 | C,C1
<%[NomSystèmeListe.Item1]%> = A,A1
<%[NomSystèmeListe.Item1.Level1]%> = A
<%[NomSystèmeListe.Item2.LastLevel]%> ou <%[NomSystèmeListe.Item2.Level2]%> = B1
NB : Pour obtenir à la fois l'élément de liste de la fiche et son parent, il est nécessaire de passer par une formule.
Les valeurs annexes de listes
Une valeur de liste peut posséder d’autres sous valeurs, comme un External Id, une Url ou une image. Il est possible d’obtenir les éléments suivants via le publipostage :
Par défaut pour obtenir la valeur nous utilisons : <%NomSystèmeListe%>
Toutefois dans notre cas il faut utiliser une autre méthode pour extraire les sous données via la syntaxe :
External Id lié à la valeur de liste : <%[NomSystèmeListe.ExternalId]%>
Url lié à la valeur de liste : <%[NomSystèmeListe.Url]%>
Image lié à la valeur de liste : <%Img([NomSystèmeListe.Image], 50)%> (50 correspond à la taille de l'image)
Code couleur de la valeur de liste : <%[NomSystèmeListe.Color]%>
Valeur de l'élément de liste colorée par sa couleur : <%TextColor([NomSystèmeListe], [NomSystèmeListe.Color])%>
Il est possible d’utiliser la syntaxe item pour isoler un élément précis sur une valeur annexe comme par exemple :
External Id du premier résultat dans la valeur : <%[NomSystèmeListe.Item1.ExternalId]%>
Url du premier résultat dans la valeur liste : <%[NomSystèmeListe.Item1.Url]%>
Image du premier résultat dans la valeur liste : <%[NomSystèmeListe.Item1.Image]%>
Couleur du premier résultat dans la valeur liste : <%[NomSystèmeListe.Item1.Color]%>
N.B. : Le champ de type "Elément de liste" n'est pas persistant, il ne peut pas être utilisé dans un rapport.
Un external id ne doit pas contenir dans sa valeur de caractère spécial (exemple : l'underscore "_").
9.2. Utilisateur
Afficher les informations de l'ensemble des utilisateurs d'un champ
Il est possible d'utiliser les informations issues d'un champ utilisateur en utilisant les syntaxes suivantes (dans ces exemples, le nom système du champ est UserFieldName) :
Afficher la liste des prénoms des utilisateurs sélectionnés séparés par des virgules
Afficher la liste des noms de famille des utilisateurs sélectionnés séparés par des virgules
Syntaxe : <%[UserFieldName.LastName]%>
Résultat : Johnson, Jordan, Bird, Chamberlain, Abdul-Jabbar
Afficher la liste des noms complets des utilisateurs sélectionnés séparés par des virgules
Syntaxe : <%[UserFieldName.FullName]%>
Résultat : Earvin Johnson, Mickael Jordan, Larry Bird, Wilt Chamberlain, Kareem Abdul-Jabbar
Afficher la liste des emails des utilisateurs sélectionnés séparés par des virgules
Afficher soit le nom complet, soit l'email en fonction de l'option choisie dans le formulaire
Syntaxe : <%[UserFieldName]%>
Afficher les informations d'un utilisateur spécifique d'un champ
Il est également possible de n'afficher les informations que d'un seul utilisateur du champ. Voici la syntaxe à suivre (dans ces exemples, le nom système du champ est UserFieldName) :
Afficher l'email du premier utilisateur dans la liste
Syntaxe : <%[UserFieldName.User1.Email]%>
Résultat : e.johnson@lakers.com
Afficher le nom de famille du 4e utilisateur dans la liste
Syntaxe : <%[UserFieldName.User4.LastName]%>
Résultat : Chamberlain
Afficher le prénom du 2e utilisateur dans la liste : <%UserFieldName.User2.FirstName%>
9.3. Etat du workflow
Pour afficher l'état du workflow on peut utiliser <%[Submission.CurrentState]%>
Voici la liste des informations accessibles :
Etat de la fiche dans la langue par défaut : <%[Submission.CurrentState]%>
S'agit-il d'un état final ? : <%[Submission.CurrentState.End]%>
Couleur de l'état de la fiche : <%[Submission.CurrentState.Color]%>
Nom de l'état en français : <%[Submission.CurrentState.Name.FR]%>
Nom de l'état en anglais : <%[Submission.CurrentState.Name.EN]%>
Syntaxe pour afficher l'état courant avec la couleur associée :
<%Display(Exists('Submission.CurrentState'))%><%TextColor('█',[Submission.CurrentState.Color])%><%[Submission.CurrentState]%><%End%>
9.4. Champ durée
Il n'est pas possible de récupérer la valeur d'un champ durée directement dans un rapport Word. Pour palier à cette contrainte, il est possible d'utiliser un champ formule JavaSript pour récupérer la valeur du champ durée et intégrer ce champ formule dans un rapport word.
Exemple de syntaxe de formule Javascript pour récupérer la valeur du champ Durée dans le formulaire :
var given_seconds = items['NOM_SYSTEME_DU_CHAMP_DUREE'] / 1000 ;
var dateObj = new Date(given_seconds * 1000);
var hours = dateObj.getUTCHours();
var minutes = dateObj.getUTCMinutes() ;
var seconds = dateObj.getSeconds() ;
var timeString = hours.toString().padStart(2, '0') + 'h' + minutes.toString().padStart(2, '0') + 'min' +seconds.toString().padStart(2, '0') ;
return timeString ;