Chaque valeur d’un wallboard provient d’une formule. Une formule est une expression unique portant sur les données en direct du centre de contacts, par exemple
Conversations.Count(State = "Waiting")
— le nombre de conversations en attente. Les données disponibles sont décrites sous Données pour les formules ; des formules prêtes à l’emploi figurent sous Exemples. Les indicateurs de performance utilisent le même langage, avec des données un peu différentes, voir ci-dessous.
Ce qu’une formule doit fournir
| Emplacement | Résultat |
|---|---|
| Étiquette, afficheur numérique, colonne de tableau | une valeur quelconque |
| Jauge, indicateur d’état | un nombre |
| Formule de ligne d’un tableau ou d’un diagramme | oui/non |
| Série d’un diagramme | un nombre ou une durée |
Règles de base
- Une formule est une seule expression — sans instructions, variables ni commentaires.
- La casse ne joue aucun rôle pour les noms :
conversations.count()équivaut àConversations.Count(). En revanche, elle compte lors de la comparaison de textes :SkillName = "support"ne trouve pas la compétence « Support ». - Les espaces et les sauts de ligne entre les éléments sont libres.
- Vous ajoutez les champs et les méthodes avec un point :
Conversations.First().Agent.Name,Name.StartsWith("A"). - Les requêtes sur les listes ont besoin de parenthèses, même sans contenu :
Agents.Count(). - Les guillemets sont les guillemets droits
"— les guillemets typographiques comme « » ou “ ” provoquent une erreur de syntaxe.
Valeurs
| Écriture | Signification | Exemple |
|---|---|---|
| nombre entier | nombre | 42 |
| nombre décimal avec un point | nombre décimal | 2.5 |
texte entre guillemets doubles ; un " dans le texte est doublé |
texte | "Support" |
true, false |
oui, non | IsLogin = true |
null |
vide | Agent = null |
Now |
l’heure actuelle du serveur, en UTC | Now - StartTime |
TimeSpan(heures, minutes, secondes), TimeSpan.FromMinutes(5), TimeSpan.Zero |
durée | QueuedTimeSpan > TimeSpan(0,2,0) |
DateTime(année, mois, jour), DateTime.MinValue |
instant | ChangeTime = DateTime.MinValue |
| le nom anglais d’un état ou d’un type entre guillemets | état, type | State = "Waiting" |
Vous comparez les états et les types au moyen de leur nom anglais, voir États et types ; ici, la casse est indifférente, et un nom inconnu est une erreur.
Vous convertissez avec les noms de types .NET, par exemple Int32(x) ou
Double(Agents.Count()), et avec Convert.ToInt32(…) ou
Convert.ToString(…) ; le langage ne connaît pas les noms courts comme int
ou double. Pour calculer, toutes les fonctions de Math sont disponibles —
Math.Round(x), Math.Round(x, 1), Math.Max(a, b), Math.Abs(x) —, ainsi
que les méthodes des valeurs elles-mêmes : Name.ToUpper(), Subject.Length,
QueuedTimeSpan.TotalSeconds, StartTime.ToLocalTime().
Opérateurs
Classés par priorité, le plus prioritaire en premier :
| Opérateurs | Signification |
|---|---|
. [ ] |
champ, méthode, index |
-x, not x ou !x |
signe ; négation d’un oui/non |
*, /, % ou mod |
multiplication et division. Les nombres entiers se divisent en entier : 7 / 2 donne 3, 7 / 2.0 donne 3,5. |
+, -, & |
addition et soustraction, y compris avec des durées et des instants : Now - StartTime donne une durée. & concatène des textes. |
= ou ==, <> ou !=, <, >, <=, >= |
comparaison |
and ou && |
et |
or ou || |
ou |
condition ? valeur1 : valeur2 |
condition, voir ci-dessous |
Les parenthèses ( ) modifient l’ordre.
Si & concatène un état, une durée ou un instant avec du texte, la valeur
apparaît non traduite : les états en anglais, les durées avec des fractions de
seconde, les instants en UTC. Mettez donc en forme vous-même, par exemple
"Attente la plus longue : " & Conversations.Max(QueuedTimeSpan).ToString("mm\:ss").
Requêtes sur les listes
Chaque liste — conversations, agents, compétences… — connaît ces requêtes :
| Requête | fournit | pour une liste vide | Exemple |
|---|---|---|---|
Count() |
le nombre | 0 | Agents.Count() |
Count(condition) |
le nombre d’entrées pour lesquelles la condition est vraie | 0 | Conversations.Count(State = "Waiting") |
Where(condition) |
les entrées pour lesquelles la condition est vraie | vide | InboundCalls.Where(SkillName = "Support").Count() |
First(), First(condition) |
la première entrée (correspondante) | vide | Agents.First(IsLogin).Name |
Min(champ), Max(champ) |
la plus petite ou la plus grande valeur | 0 ou 00:00:00 | Conversations.Max(QueuedTimeSpan) |
Sum(champ) |
la somme | 0 ou 00:00:00 | ACDs.Sum(WaitingCalls) |
Average(champ) |
la moyenne | 0 ou 00:00:00 | Conversations.Average(QueuedTimeSpan) |
- Entre les parenthèses s’appliquent les champs de chaque entrée : dans
Agents.Count(IsLogin),IsLoginest le champ de chaque agent. Vous désignez l’entrée elle-même parit. - Les requêtes peuvent être enchaînées :
Conversations.Where(ConversationType = "InboundCall").Max(QueuedTimeSpan). - Si la condition ne peut pas être évaluée pour une entrée — par exemple
Skill.Namepour une conversation sans compétence —, l’entrée est considérée comme non correspondante. - Vous vérifiez s’il existe au moins une entrée avec
Conversations.Count(State = "Waiting") > 0.
Conditions
iif(condition, valeur1, valeur2) et condition ? valeur1 : valeur2
fournissent valeur1 si la condition est vraie, sinon valeur2. Les deux
valeurs doivent être du même type :
iif(Wrapup, WrapupTimeSpan, TimeSpan.Zero)
Agents.Count(IsLogin) = 0 ? "personne" : "occupé"
Row et it
Dans les colonnes de tableau, les formules de ligne et les séries de
diagramme, la ligne en cours est disponible sous Row. Vous pouvez aussi
nommer ses champs sans Row : dans un tableau d’agents, Name et Row.Name
sont identiques.
À l’intérieur d’une requête sur une liste, it désigne l’entrée de la liste ;
la ligne reste accessible via Row. Dans un tableau de compétences, chaque
ligne compte ainsi ses propres conversations en attente :
Conversations.Count(Skill.Id = Row.Id and State = "Waiting")
Si un champ de la ligne porte le même nom qu’une liste — les agents ont par
exemple les champs Skills et Languages —, le nom seul désigne la liste.
Vous atteignez le champ avec Row.Skills ou, dans une requête, avec
it.Skills.
Heure et fuseaux horaires
Nowet tous les instants fournis par le serveur —StartTime,LoginTime,RaiseTime— sont en UTC.- Les durées comme
Now - StartTimeouQueuedTimeSpann’en dépendent pas. - Une étiquette dont la formule fournit un instant l’affiche dans l’heure
locale de l’ordinateur. Dans les tableaux et dans les textes que vous
composez vous-même, convertissez :
StartTime.ToLocalTime(),Now.ToLocalTime().ToString("HH:mm").
Messages d’erreur
Pendant la saisie, le concepteur vérifie chaque formule ; si elle contient une erreur, le champ change de couleur et le message s’affiche en dessous, souvent avec la position « (à l’indice n) ». Les plus fréquents :
| Message | Cause |
|---|---|
| Identifiant inconnu '…' | Le nom est mal orthographié, ou la liste n’existe pas. |
| La propriété ou le champ "…" n'existe pas dans le type "… | Le champ n’existe pas pour cette entrée, voir Données pour les formules. |
| Opérateur '…' incompatible avec les types d'opérandes '…' et '…' | Les valeurs ne vont pas ensemble, par exemple un nombre et une durée. |
| Expression de type '…' attendue | Le résultat n’a pas le bon type — une jauge ne reçoit pas de nombre, une formule de ligne pas de oui/non. |
| Invocation ambiguë de la méthode '…' dans le type '…' | Les indications correspondent à plusieurs variantes d’une fonction. |
| Erreur de syntaxe | par exemple un | isolé ou des guillemets typographiques |
| Chaîne littérale non terminée | Il manque un ". |
| Le caractère littéral doit contenir exactement un caractère | Un texte figure entre guillemets simples au lieu de guillemets doubles. |
| Expression attendue | La formule est vide, ou il manque quelque chose après un opérateur. |
Une étiquette dont la formule est erronée affiche la formule elle-même sur le wallboard.
Si une erreur ne survient qu’au moment du calcul — par exemple First().Name
sur une liste vide —, l’élément affiche une valeur vide : 0, un texte vide,
00:00:00 ou « Non ».
Différences avec les indicateurs de performance
| Wallboard | Indicateur de performance | |
|---|---|---|
| calculé | dans le programme Wallboard, chaque seconde | sur le serveur |
| Filtres | les filtres de l’élément d’affichage | aucun |
Agents |
tous les agents configurés qui correspondent au filtre — Agents.Count(IsLogin) compte les agents connectés |
uniquement les agents connectés |
ACDs |
avec des chiffres clés comme Open et WaitingCalls |
uniquement les paramètres des règles de distribution |
Alarms |
les alarmes actives | vide |
Configuration, TimeStamps, ConversationStates, ConversationTypes, Bins |
disponibles | non disponibles |