Syntaxe et fonctions
Référence complète de la syntaxe, des champs système et des fonctions disponibles dans les modèles de rapport Daxium-Air.
Index des fonctions
<%MarkDown(SystemName)%>
Insérer un champ texte enrichi en préservant la mise en page (Word uniquement)
<%MarkDownEx([SystemName], Font, Size)%>
Insérer un champ texte enrichi avec une police et une taille imposées (Word uniquement)
UseImagesPreview()
Redimensionner les images avant insertion pour alléger le fichier
SetPdfJpegQuality()
Convertir les images en JPEG avec un indice de qualité donné
Add()
Sommer plusieurs valeurs numériques, en traitant les valeurs nulles comme 0
Hide() … <%End%>
Masquer une section du document lorsque la condition est vraie
Display() … <%End%>
Afficher une section du document lorsque la condition est vraie
DisplayRow()
Afficher une ligne de tableau lorsque la condition est vraie
Champs système
Utilisez les balises suivantes pour accéder aux métadonnées de la fiche dans n'importe quel modèle de rapport.
Identification de la fiche
Numéro de fiche
<%SubmissionId%> ou <%Id%>
Numéro UID
<%SubmissionUid%>
Création de la fiche
Date du premier enregistrement sur le web
<%Created_At%>
Date de création de la fiche
<%DataCreatedAt%>
Créateur de la fiche — prénom
<%[CreateUser.FirstName]%>
Créateur de la fiche — nom
<%[CreateUser.LastName]%>
Créateur de la fiche — e-mail
<%[CreateUser.Email]%>
Créateur du rapport
Créateur du rapport — prénom
<%[ReportUser.FirstName]%>
Créateur du rapport — nom
<%[ReportUser.LastName]%>
Créateur du rapport — e-mail
<%[ReportUser.Email]%>
Dernière mise à jour
Date du dernier enregistrement sur le web
<%[Updated_At]%>
Date de mise à jour de la fiche
<%[Updated_At]%>
Dernière modification par (e-mail)
<%[UpdateUser.Email]%>
Formulaire
Nom du formulaire
<%StructureName%>
Identifiant du formulaire
<%StructureId%>
Tâche liée
Date et heure de début prévues
<%[Task.PlannedStart]%>
Date et heure de fin prévues
<%[Task.PlannedEnd]%>
Échéance
<%[Task.PlannedDue]%>
Date et heure de début effectives
<%[Task.RealStart]%>
Date et heure de fin effectives
<%[Task.RealEnd]%>
État (effectué, à faire)
<%[Task.FillStatus]%>
Statut temporel (à l'heure, en retard…)
<%[Task.TimeStatus]%>
Autres informations
Nom de la société (depuis l'URL)
<%CompanyTitle%>
Position GPS native (création sur mobile)
<%SubmissionLatitude%><%SubmissionLongitude%>
Insérer un champ simple
Un champ de formulaire s'insère en entourant son nom système par <% et %>. Ces marqueurs indiquent au système où les données de la fiche doivent être insérées. Vous pouvez appliquer n'importe quelle mise en forme prise en charge par Word/Excel (gras, italique, souligné) directement sur la balise.
Si votre champ Texte utilise l'option « Texte enrichi », utilisez <%MarkDown(SystemName)%> pour préserver la mise en page dans les rapports Word. Non fonctionnel dans Excel.
Pour également imposer une police et une taille de police sur ce texte enrichi, utilisez plutôt <%MarkDownEx([SystemName], 'Police', Taille)%> :
[SystemName]
Nom système du champ texte enrichi
'Police'
Police à appliquer
Taille
Taille de police
Ceci ne fonctionne que sur les champs Texte utilisant l'option « Texte enrichi », dans les rapports Word. Voir Polices PDF pour la liste des polices prises en charge lors de la conversion du rapport en PDF.
Les noms système sont sensibles à la casse.
Insérer une formule
Vous pouvez appliquer des calculs directement entre champs dans une balise de rapport.
<operator> peut être n'importe quelle opération mathématique : +, -, *, /, %
ConstantExpression est un nombre avec ou sans décimales
Les parenthèses sont prises en charge
%est également l'opérateur modulo
Exemples :
<%Price * 1.196%>— avec Price = 10 : le résultat est 11.96<%(Price * Quantity) – (15 / 100) * (Price * Quantity)%>— avec Price = 18 et Quantity = 2 : le résultat est 30.6
Voici la liste complète des fonctions mathématiques prises en charge. Elles sont également sensibles à la casse.

Repeat()
Lorsque le modèle de rapport est en mode listing, l'instruction Repeat() répète une section du document pour chaque ligne de données. Elle doit être placée dans la première cellule (la plus à gauche) de la ligne du tableau à répéter.
filter
Condition de filtrage, p. ex. Id>3 ou DateField<#date# (optionnel)
Aucun
sort
Nom système du champ de tri (optionnel)
Aucun
Le modèle tout entier ne peut contenir qu'une seule instruction Repeat(). Si plusieurs sont présentes, seule la première est détectée.
Repeat() peut être utilisé de quatre manières :
Sans aucun critère
<%Repeat()%>
Filtrage uniquement
<%Repeat(Id>3)%>
Tri uniquement
<%Repeat(,Name)%>
Filtrage et tri
<%Repeat(Id>3,Name)%>
Ex :

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

Filtrer les résultats
Filtrez les lignes répétées à l'aide d'une condition :
Les dates utilisent le format Jour/Mois/Année. Vous pouvez également utiliser #date# comme variable pour la date du jour :
Le second exemple signifie « il y a 5 jours ». Le format n'est pas sensible à la casse (#Date-5D# fonctionne aussi).
Vous pouvez définir l'intervalle de temps grâce aux unités du tableau ci-dessous :

Utilisez + au lieu de - pour faire référence à des dates futures. Exemple : <%Repeat(DateField < #date+10d#)%> signifie aujourd'hui + 10 jours.
Vous pouvez combiner les conditions de filtrage avec les opérateurs AND ou OR :
Cette syntaxe de filtrage ne prend pas en charge les fonctions utilisant les noms système des champs.
Éviter la redondance des données — DISTINCT()
Lorsque vous utilisez Repeat(), utilisez DISTINCT() pour éviter de répéter la même valeur :
Pour les champs contenant plusieurs textes distincts (dates, listes multi-niveaux), utilisez un second argument comme séparateur de concaténation :
Cela retourne tous les mois uniques de création de fiches sur l'ensemble répété.
Trier les résultats
Repeat() accepte un second paramètre pour trier les résultats. Le critère de tri doit être un nom de colonne :
Exemple :

Manipulation d'images
Image()
Insère une seule image depuis un champ image :
Alias raccourci : <%Img(FieldName, Width, Height)%>
FieldName
Nom système du champ image
—
Width
Largeur de l'image en pixels
—
Height
Hauteur de l'image en pixels (optionnel)
Identique à Width
Si la hauteur est omise, l'image est placée dans un carré de
Width × WidthpixelsSi la largeur et la hauteur sont toutes deux spécifiées, l'image s'inscrit dans ce rectangle sans déformation
Exemples :
Grande photo : <%Image(ImageFieldName, 200)%>

Petite photo : <%Img(ImageFieldName, 70, 50)%>

Images()
Pour les champs image autorisant plusieurs images (max > 1), utilisez Images() inséré dans un tableau à une seule colonne :
FieldName
Nom système du champ multi-images
—
start
Index de la première image à inclure (optionnel)
1
end
Index de la dernière image à inclure (optionnel)
Toutes
Pour définir une taille pour les images, ajoutez <%Image()%> :
Pour récupérer des données supplémentaires (métadonnées) des images, renseignez le champ dans un tableau avec la structure suivante :

Redimensionner les images — UseImagesPreview()
Redimensionnez les images avant de les insérer pour réduire le poids du rapport et le temps de génération :
Remplacez ImageSize par l'attribut du tableau ci-dessous. Toutes les images situées après cette balise seront redimensionnées en conséquence :

UseImagesPreview() ne permet pas d'extraire les données Exif. Il n'y a pas d'informations Exif sur les images d'aperçu.
Récupérer les commentaires d'une image
Affichez le commentaire associé à une image précise d'un champ image :
Explication :
NomDuChampImagecorrespond au nom système du champ image.#xindique le numéro de l'image (1, 2, 3, etc.).Commentpermet d'accéder au commentaire associé à l'image.
Exemple : <%Value:If(Exists('Photo#1Comment'), [Photo#1Comment], '')%>
Convertir les images en JPG — SetPdfJpegQuality()
Réduisez la taille des images en les convertissant en JPEG. La fonction prend un index de qualité compris entre 1 et 100 :
Ajoutez cette balise dans le document Word ou dans une cellule de la feuille PPActions.
Insérer une image depuis un champ relation (Excel)
Pour insérer une photo issue d'une fiche liée dans un rapport Excel (hors mode listing) :
Remplacez le snake_case par du CamelCase : mettez en majuscule la première lettre de chaque mot du nom système et supprimez les tirets bas.
Map()
Affiche une carte centrée sur les coordonnées GPS de la fiche. Nécessite l'API Google Maps et un champ localisation configuré dans le formulaire.
latitude
Champ contenant la coordonnée de latitude
longitude
Champ contenant la coordonnée de longitude
address
Nom système de votre champ localisation
zoom
1 à 22 (22 = le plus détaillé)
width
Largeur de la carte en pixels
height
Hauteur de la carte en pixels
MapType
0 = Street View, 1 = Satellite, 2 = Mixte
Exemple avec la localisation par défaut : <%Map(SubmissionLatitude, SubmissionLongitude, 17, 200, 200)%>

Exemple avec un champ localisation : <%Map(LocalizationIntervention_latitude, LocationIntervention_longitude, 17, 200, 200)%>

Données Exif — ImageExif()
Récupère les métadonnées Exif stockées dans une photo (données texte, coordonnées GPS, etc.) :
FieldName
Nom système du champ image
'ExifAttribute'
Clé d'attribut Exif, p. ex. 'DateTime', 'GpsLatitude', 'GpsLongitude', 'GpsLatitudeDM'

Exemples :
Date de l’image :
<%ImageExif(Photo, 'DateTime')%>(Résultat : 25/08/2004)Carte depuis le GPS de la photo :
<%Map(ImageExif(LocationField, 'GpsLatitude'), ImageExif(LocationField, 'GpsLongitude'), 17, 150, 150)%>

Pour le reporting Excel en mode listing, l'instruction pour obtenir les données Exif est : <%Value:ImageExif([Photo],'DateTime')%> (Résultat : 25/08/2004 09:32)
Codes-barres — BarCode()
Insère un code-barres dans un document :
data
La donnée à encoder
'BarCodeType'
Format du code-barres — voir tableau des types ci-dessous
width
Largeur du code-barres en pixels
height
Hauteur du code-barres en pixels
Exemple : <%BarCode('123456789012', 'EAN13', 120, 120)%>

Types de codes-barres disponibles :
Code11
Principalement utilisé pour l'étiquetage des équipements de télécommunication
Codabar
Ancien code utilisé dans les bibliothèques et les banques de sang
EAN13
Numérotation européenne des articles — la donnée doit contenir 12 chiffres
EAN8
EAN compressé pour petits produits — la donnée doit contenir 7, 9, 12 ou 13 chiffres
Industrial2of5
Ancien code, peu utilisé aujourd'hui
Interleaved2of5
Code numérique compact, utilisé dans l'industrie et le fret aérien
MSI
Variante du code Plessey, courant aux États-Unis
Postnet
Utilisé par l'USPS pour le tri automatisé du courrier
UPCA
Code produit universel pour le commerce — la donnée doit contenir 12 chiffres
UPCE
UPC compressé pour petits produits — la donnée doit contenir 6 ou 7 chiffres
Matrix2of5
La donnée peut contenir un nombre quelconque de chiffres
IntelligentMail
La donnée doit contenir 20 chiffres
QR Codes — QrCode()
Insère un QR code 2D dans un modèle :
data
La donnée à encoder
width
Largeur du QR code en pixels
height
Hauteur du QR code en pixels
Exemple : <%QrCode('A String To Encode 123456', 150, 150)%>

Filigrane — ImageWatermark()
Ajoute une surcouche de texte sur une image :
ImageFieldName
Nom système du champ image
—
ImageWidth
Largeur de l'image en pixels
—
ImageHeight
Hauteur de l'image en pixels
—
WatermarkText
Texte à afficher sur l'image
—
HorzAlign
Alignement horizontal : Left, Center, Right
Right
VertAlign
Alignement vertical : Top, Middle, Bottom
Bottom
ForegroundColor
Couleur du texte (#RRGGBB ou constante)
Red
BackgroundColor
Couleur de fond du texte (#RRGGBB ou constante)
White
BackGroundOpacity
Opacité du fond, entre 0 et 1
0 (invisible)
FontSize
Taille de police en pixels
12
Exemples :
Pour insérer un retour à la ligne dans le texte du filigrane, utilisez \u000A :
Vous pouvez combiner plusieurs valeurs de données à l'aide de List() :
Pour utiliser la valeur d'un champ comme texte de filigrane :

Filigrane sur un champ multi-images
Lorsqu'un champ image contient plusieurs images, combinez Images() et ImageWatermark() :
Les instructions combinées doivent être placées dans un tableau au sein du modèle. Le nom système du champ image n'est mentionné qu'une seule fois, dans l'instruction Images() — ne le répétez pas dans ImageWatermark() ni dans ImageExif().
Fonctions utilitaires
Les fonctions ne sont pas sensibles à la casse et peuvent être combinées. Nous recommandons d'utiliser le CamelCase pour les noms de fonctions.
Les noms de champs restent sensibles à la casse dans tous les cas.
Index()
Retourne un numéro de séquence auto-incrémenté dans un tableau de listing.
<%Index()%>


MapLetter()
Retourne la lettre de l'épingle de carte générée par l'API Google Maps pour un point de localisation. À utiliser en combinaison avec Map().
<%MapLetter()%>



Format() — dates et nombres
Convertit un champ Date ou Nombre dans un format d'affichage spécifique. F() est un raccourci pour Format().
'FormatString'
Modèle de format — voir tableau ci-dessous
FieldName
Champ Date ou Nombre à formater
Les formats disponibles sont présentés dans le tableau ci-dessous :

Exemples (avec Price = 19.3 et Date = 14/02/2012 15:14:20) :
<%Format('0.00', Price)%>→ 19.30<%F('yyyy-MM-dd', Date)%>→ 2023-02-16
Date()
Retourne la date et l'heure actuelles :
AddHours()
Ajoute ou retire des heures à un champ date/heure :
Exemple : <%AddHours(DateTime, -6)%> (Résultat : 14/02/2023 06:00:00 au lieu de 12:00:00)
Utilisez un nombre positif pour ajouter des heures : <%AddHours(DateTime, 6)%>
AddDays()
NumberOfDays peut être positif ou négatif. Exemple : <%AddDays(Date(), -5)%>
AddMonths()
Exemple : <%AddMonths(Created, -1)%>
AddYears()
Exemple : <%AddYears(Created, +2)%>
Add()
Retourne la somme de plusieurs valeurs numériques. Les valeurs nulles ou vides sont traitées comme 0.
Exemple : <%Add(Size1, Size2, Size3)%> — avec Size1=5.3, Size2=2.3, Size3=null → 7.6
Manipulation de chaînes
Une chaîne de caractères s'exprime via <%String()%> ou son raccourci <%S()%>.
Concaténation
Utilisez l'opérateur + pour concaténer des chaînes. Lors du mélange de types, convertissez d'abord les nombres en chaînes avec S() :
<%S(Price) + ' Euros'%> → 14.32 Euros
ToUpper() / ToLower()
List()
Crée une liste séparée à partir de plusieurs valeurs. Si un élément est vide, son séparateur est omis :
separator
Chaîne à placer entre les valeurs
value1, value2, …
Champs ou valeurs à assembler
Exemple : <%List(', ', Address, PostalCode, City, Country)%> → 12 rue des églantiers, 17400, Lacanau, France
Peut être combiné avec Map() pour produire une adresse valide à partir de champs séparés.
Split()
Extrait une valeur d'une chaîne contenant un séparateur. L'index commence à 0 :
string
La chaîne ou le champ à découper
separator
Le caractère délimiteur
IndexToExtract
Index (base 0) du segment à retourner
Exemple : <%Split(Address, ',', 2)%> — avec Address = « 12, rue des mines, Puteaux, 92800, France » → Puteaux
Conversion de type
ToNumber() / N()
Convertit une chaîne de texte en nombre :
Exemple : <%Format('0.00', N(Price))%> — avec Price = « 127.4202 » → 127.42
Le nombre converti peut utiliser une virgule , ou un point . comme séparateur décimal — les deux sont pris en charge.
ToDate() / D()
Convertit une date texte en date réelle :
Exemple : <%F('dd/MM/yyyy', ToDate(Date))%> — avec Date = « 14/02/2012 15:24:10 » → 14/02/2012
ToString() / S()
Convertit le contenu d'un champ en chaîne :
Instructions conditionnelles
If()
Affiche une valeur selon une condition :
condition
Expression booléenne (p. ex. Field = 'Value'). Utilisez && pour ET, || pour OU.
'TrueResult'
Valeur retournée si la condition est vraie
'FalseResult'
Valeur retournée si la condition est fausse
'NotSetResult' (optionnel)
Valeur retournée si le champ est vide — active la forme raccourcie à 3 valeurs
La condition doit retourner true ou false. Les opérateurs pris en charge sont :
==
Égal à
<>
Différent de
!=
Non égal
&&
ET
||
OU
Vous pouvez combiner plusieurs comparaisons de champs avec && et || :
Exemple booléen — couvre les trois états possibles (true, false, non défini) :
Ou avec la forme raccourcie à 3 valeurs :
Le caractère apostrophe diffère entre Word et Excel. Si vous copiez-collez un modèle de l'un vers l'autre, remplacez les apostrophes manuellement.
Exists()
Teste si un champ existe dans le formulaire :
Retourne true ou false. Particulièrement utile pour vérifier la présence d'images :
Hide() / Display() / DisplayRow()
Ces fonctions affichent ou masquent des sections entières du document selon une condition. Terminez toujours par <%End%>.
Hide()
Masque une section lorsque la condition est vraie :
Opérateurs booléens pris en charge :
||
OU
&&
ET
<>
Différent de
==
Égal
!=
Non égal
Exemples :


Display()
Affiche une section lorsque la condition est vraie (inverse de Hide()) :
Il n'est pas possible d'utiliser à la fois Hide() et Display() dans la même condition.
DisplayRow()
Disponible uniquement dans les tableaux. Affiche une ligne lorsque la condition est vraie. Doit être placée dans la première cellule (la plus à gauche) de la ligne, avant tout autre contenu :
Il n'est pas possible d'utiliser à la fois Hide() et DisplayRow() dans la même condition. Il n'est pas non plus possible d'afficher l'utilisateur courant dans les rapports.
Contains()
Retourne true si une chaîne contient un motif donné :
String
Le champ ou la chaîne à tester
pattern
La sous-chaîne à rechercher
Exemple : <%If(Contains(Field, 'measurement'), 'MEASURE', 'NOTHING')%>
La comparaison est sensible à la casse. Utilisez ToUpper() ou ToLower() en combinaison avec Contains() pour une comparaison insensible à la casse : <%If(Contains(ToUpper(Field), 'MEASURE'), 'MEASURE', 'NOTHING')%>
StartsWith()
Retourne true si une chaîne commence par la valeur spécifiée :
String
Le champ ou la chaîne à tester
Pattern
Le préfixe à rechercher
Exemple : <%If(StartsWith(Field, 'default'), 'Default value', '')%>
EndsWith()
Retourne true si une chaîne se termine par la valeur spécifiée :
String
Le champ ou la chaîne à tester
Pattern
Le suffixe à rechercher
Exemple : <%If(EndsWith(Field, 'END'), 'end', '')%>
Relation
Pour inclure les données d'un formulaire enfant lié, utilisez l'instruction Relation() dans un tableau :
La ligne du tableau se répète une fois pour chaque fiche enfant. Si aucune fiche enfant n'est liée, le tableau est vide.
Exemple :

Résultat :

Le type de champ « Élément de relation » n'est pas persistant et ne peut pas être utilisé dans un rapport.
Trier une relation
Triez les fiches enfants selon la valeur d'un champ. Ajoutez le nom système du champ en second paramètre.
Tri ascendant : <%Relation('Libellé de relation', 'SystemNameOfField')%>
Tri descendant : <%Relation('Libellé de relation', 'SystemNameOfField DESC')%>


Filtrer par sous-formulaire
Lorsqu'un champ relation pointe vers plusieurs sous-formulaires, filtrez par nom de formulaire :
OrderBycorrespond au tri décrit ci-dessus (laissez une chaîne vide''pour l'ignorer)StructureNameest le nom du formulaire sur lequel filtrer
Exemple — ne conserver que les fiches du sous-formulaire « Anomalie » :
Limiter le nombre de fiches enfants
Passez la limite en 4ᵉ paramètre :
'Relation0'
Nom système du champ relation
'FieldX'
Champ de tri (optionnel)
StructureName='Form name'
Formulaire sur lequel filtrer (optionnel)
2
Nombre maximum de fiches enfants à afficher
Compter les fiches enfants
Cette option ne peut-être utilisée qu’avec l’option Multiple activée pour la relation, car ce n’est pas un champ de création de données mais de liaison
Affiche le nombre de fiches dans une relation :
<%[Relation.Count]%>
Les majuscules sont requises — Relation.Count doit être écrit exactement comme indiqué.
Exemple

Relations imbriquées
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 dans un premier tableau une relation du 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 une relation du sous formulaire. Cette dernière relation se nomme "libellé de la relation de relation".
Il est possible d'imbriquer une relation dans une autre en créant un second tableau à l'intérieur du premier. Vous pouvez descendre jusqu'à 8 niveaux.

Fonctions d'agrégation
Les arguments des fonctions d'agrégation doivent toujours être entourés de guillemets simples. Exemple : <%Sum('ToNumber(Price)')%>
Count()
Compte le nombre total de fiches de l'ensemble courant :
<%Count()%>
Cette instruction peut être utilisée n'importe où dans le document.
Sum()
Retourne la somme d'un champ numérique sur toutes les fiches :
<%Sum('FieldName')%>
Si le type de champ n'est pas garanti numérique, utilisez N() pour convertir : <%Sum('N(Price)')%>
Avg()
Retourne la valeur moyenne d'un champ :
<%Avg('FieldName')%>
Min() / Max()
Retourne la valeur minimale ou maximale d'un champ :
<%Min('FieldName')%> / <%Max('FieldName')%>
GlobalMap()
Affiche tous les points de localisation de plusieurs fiches sur une même carte. Nécessite un modèle en mode listing.
LatitudeField
Nom du champ contenant les valeurs de latitude (entre guillemets)
LongitudeField
Nom du champ contenant les valeurs de longitude (entre guillemets)
ConnectPoints
true pour relier les points par une ligne, false pour épingles seules
Width
Largeur de la carte en pixels
Height
Hauteur de la carte en pixels
MapType
0 = Route, 1 = Aérien, 2 = Mixte
Exemple : <%GlobalMap('latitude', 'longitude', true, 300, 300, 0)%>

Avec une relation :

Chart()
Affiche un graphique en barres ou en camembert à partir de données agrégées :
GraphType
'Pie', 'Pie3D' ou 'Bar'
AggregationFunction
Une fonction telle que Count() ou Sum(field)
LabelField
Nom du champ utilisé pour grouper et étiqueter les résultats
DisplayValues
true pour afficher les valeurs sur le graphique, false pour les masquer
Width
Largeur du graphique en pixels
Height
Hauteur du graphique en pixels
Exemples :
<%Chart('Bar', 'Count()', 'CustomerName', true, 500, 300)%>

<%Chart('Pie3d', 'Sum(Price)', 'ReparationType', false, 600, 300)%>

<%Chart('Pie', 'Count()', 'TypeReparation', true, 600, 300)%>

Cas particuliers
Champs Liste
Isoler un niveau dans une liste arborescente
Par défaut : <%ListSystemName%>
Pour une liste arborescente avec résultat A,B,C :
Premier niveau (A)
<%[ListSystemName.FirstLevel]%> ou <%[ListSystemName.Level1]%>
Deuxième niveau (B)
<%[ListSystemName.Level2]%>
Dernier niveau (C)

