Champs de formule
La valeur d’un champ personnalisé de formule est automatiquement calculée par Celoxis sur la base de sa formule. La valeur est calculée chaque fois que le champ est rendu. Le langage d’expression de formule est sophistiqué, ce qui vous permet d’effectuer des manipulations de données complexes, notamment des transformations arithmétiques, de chaînes et de dates.
Syntaxe
Celoxis traite tout ce qui se trouve entre${
et }
comme des expressions.
Les formules peuvent être définies soit comme des expressions pures, par exemple ${me.budget * 0.10}
ou contiennent un mélange de texte et d'expressions comme The project ${me.name} was created on ${me.created}
lorsque tout ce qui est inclus dans ${
et }
est traitée comme une expression et évaluée, tandis que tout ce qui se trouve à l'extérieur est copié tel quel sur la sortie.
Pour les curieux, si les formules étaient rattachées à un projet dont le nom était XYZ et le budget était de $10,000 le résultat serait 1000 et Le projet XYZ a été créé le Jeu Juin 20 08:30:16 EDT 2013 respectivement.
L'opérateur de point
L'opérateur de point est utilisé pour référencer une propriété d'un objet. Dans l'exemple${me.budget * 0.10}
la me.budget fait référence au budget du projet si le champ personnalisé est rattaché à un projet.
L'opérateur de point peut également être utilisé pour appeler une fonction (méthode) d'un objet. Dans l'exemple ${me.name.toUpperCase()}
la toUpperCase est un appel de fonction qui transforme le nom du projet en majuscules.
Opérateurs
- Arithmétique: +, - (binaire), *, / et div, % et mod, - (unary)
- Concaténation de cordes: +=
- Logique: et, &&, ou, ||, pas, !
- Relationnel: ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le. Les comparaisons peuvent être faites par rapport à d'autres valeurs ou par rapport à des littéraux booléens, des chaînes de caractères, des nombres entiers ou des nombres à virgule flottante.
- Vide: Le vide est une opération de préfixe qui peut être utilisée pour déterminer si une valeur est null ou vide.
- Conditionnel: A ? B : C. Évaluer B ou Cen fonction du résultat de l'évaluation de la A.
- Affectation: =
- Point-virgule: ;
- [] .
- () (utilisé pour modifier la préséance des opérateurs)
- - (unary) pas ! vide
- * / div % mod
- + - (binaire)
- +=
- < > <= >= lt gt le ge
- == != eq ne
- && et
- || ou
- ? :
- =
- ;
Mots réservés
Les mots suivants sont réservés à la LE et ne doivent pas être utilisés comme identificateurs :et | ou | pas | eq |
ne | lt | gt | le |
ge | vrai | faux | null |
instanceof | vide | div | mod |
Exemples de base
Formule | Résultat |
---|---|
${1 > (4/2)} | faux |
${4.0 >= 3} | vrai |
${100.0 == 100} | vrai |
${(10*10) ne 100} | faux |
${'a' < 'b'} | vrai |
${'hip' gt 'hit'} | faux |
${4 > 3} | vrai |
${1.2E4 + 1.4} | 12001.4 |
${3 div 4} | 0.75 |
${10 mod 4} | 2 |
${!empty me.code} | Faux si l'objet est code est null ou une chaîne vide. |
Fonctions utilitaires
L'ensemble suivant de fonctions d'aide a été fourni :
formatDate(date) | La valeur formatée de la date (sans l'heure) selon les préférences du spectateur. |
formatDateHeure(date-heure) | La valeur formatée de la date et de l'heure selon les préférences du spectateur. |
formatNombre(nombre) | La valeur formatée du nombre selon la locale du spectateur. |
formatDevise(nombre) | La valeur formatée de la devise selon la devise spécifiée dans les préférences de l'entreprise et le format des nombres selon la langue du spectateur. Par exemple, 25 000 $. |
heuresToHHMM(nombre) | Formate les heures sous la forme HH:MM. Par exemple, 2.5 donnera 2:30 |
plafond(nombre) | Le plus proche entier plus grand que l'entrée. Par exemple ${ceil(5.3)} retournera 6 |
étage(nombre) | Le plus proche entier plus petit que l'entrée. Par exemple ${floor(4.8)} retournera 4 |
abs(nombre) | La valeur absolue d'un nombre. Par exemple, ${abs(-3.2)} retournera 3.2 |
rond(nombre) | La valeur arrondie de l'entrée. Par exemple ${round(3.6)} renverra 4 |
roundTo(chiffres, nombre) | The rounded value of input number to the number of digits specified. For example ${roundTo(2, 3.667)} will return 3.67; while ${roundTo(0, 3.667)} will return 4. |
String.contains(botte de foin, aiguille) | Vérifiez si aiguille existe en botte de foin |
String.endsWith(string, suffixe) | Vérifiez si chaîne se termine par suffixe |
String.replace(txt, search, replace) | Remplace toutes les occurrences de recherche dans txt avec remplacer |
String.startsWith(chaîne, préfixe) | Vérifiez si chaîne commence par préfixe |
String.trim(string) | Coupe les espaces et les caractères de contrôle à partir des extrémités de la chaîne |
String.blankIfNull(str) | Si str est nulle, renvoie une chaîne vide, sinon renvoie la chaîne de caractères str même. |
Date.avant(date1, date2) | Retours vrai si la date 1 est antérieure à la date 2. |
Date.equal(date1, date2) | Retours vrai si la date 1 est égale à la date 2. |
Date.après(date1, date2) | Retours vrai si la date 1 est postérieure à la date 2. |
Date.format(date, format) | La valeur formatée de la date selon le format. Pour les formats pris en charge, voir ceci. |
Date.heuresEntre(de, à) | Retournez le nombre d'heures écoulées entre de et à. |
Date.heures de travailEntre(de, à) | Renvoyer le nombre d'heures de travail entre de et à sur la base du calendrier de travail par défaut de l'entreprise. Si les jours écoulés entre de et à est supérieure à 30, les heures écoulées sont rendues. |
Date.plusHeures(date, heures) | Ajoute heures à date et rend cette date. |
Date.isoToDate(string) | Convertit chaîne en format ISO à une date. |
Date.now() | Renvoie une date représentant la date et l'heure actuelles |
Collection.size(v) | Retours taille de v. |
Collection.contains(haystack, needle) | Vérifiez si aiguille existe en botte de foin |
Collection.containsAny(haystack, needles) | Vérifier si au moins un aiguille existe dans le botte de foin |
Collection.containsAll(botte de foin, aiguilles) | Vérifier si tous les aiguilles existe dans le botte de foin |
Ecriture de formules à plusieurs lignes
Pour écrire le code de la formule sur plusieurs lignes, utilisez le = et ; opérateurs. La valeur de retour est le dernier énoncé de la formule. Par exemple :
${ apc = me.actualPercentComplete; ppc = me.plannedPercentComplete; (apc - ppc)/ppc }
Le type de données de retour de formule
Lors de la définition d'une formule, vous devez sélectionner un Formule Type de données. Cela indique au système ce qu'il doit attendre de la formule. Celoxisformate automatiquement la valeur de retour en fonction du type de données. Par exemple, si vous indiquez que le type de retour est une devise, alors si votre formule retourne un nombre 10000le résultat serait $10,000 c'est-à-dire qu'il met Celoxisautomatiquement en forme le numéro et le fait précéder du symbole de la devise de la société.
Le me objet
Le me L'objet dans la formule représente l'objet pour lequel la formule est évaluée. Par exemple, disons que notre champ de formule Client Advance est défini comme ${me.budget * 0.1}
c'est-à-dire qu'il représente 10 % du budget. Si nous avons rattaché ce champ à la fois aux projets et aux tâches, alors, lors de l'évaluation de la formule d'un projet, le me L'objet serait un projet, tandis que pour une tâche, il s'agirait d'un objet de tâche.
Référence du champ
Pour afficher la liste des champs disponibles, cliquez sur l'onglet Référence de champ dans l'écran Ajouter/Modifier un champ personnalisé. Cliquez sur l'icône plus pour développer la liste des variables disponibles pour les différentes entités.
Traitement des erreurs
Lorsqu’il y a une erreur lors de l’évaluation d’une formule, par exemple si vous avez passé un nombre là où une chaîne était attendue, la sortie s’affiche ERR !. Déplacez votre souris dessus pour obtenir une meilleure description du problème.
Exemples
Supposons que nous ayons un projet avec les données suivantes.
Label | Champ | Valeur |
---|---|---|
ID | id | 1234 |
Nom | nom | Mise en place de l'espace de bureau |
Démarrer | startCalendar | 10 janvier 2011 |
Budget | budget | 5000 |
Coût estimatif | Coût estimé | 4000 |
Coût réel | actualCost | 3800 |
Nous allons maintenant examiner quelques exemples simples. Nous supposerons que la formule est attachée aux projets et que l'échantillon de sortie est pour le projet décrit ci-dessus.
Formule | Sortie | Commentaires |
---|---|---|
${me.id * 10} | 12340 | id est multiplié par 10 |
me.id * 10 | me.id * 10 | Non inclus dans ${} et donc copié dans la sortie textuellement. |
ID:${me.id} | ID:1234 | Texte mélangé avec une expression |
${me.name + 100} | ERR ! | Impossible d'effectuer des opérations arithmétiques sur le type String. |
${me.abcd} | ERR ! | me n'a pas de propriété nommée abcd. |
${formatDate(me.startCalendar)} | 10 janvier 2011 | Formate la date de début selon le style de format de date de l'utilisateur. |
${me.actualCost gt (me.budget*.9) ? 'ALERT' : 'OK'} | ALERTE | Un exemple sur la façon d'écrire if/then/else |
${formatCurrency(me.budget)} | $ 5,000 | En supposant que le symbole de votre monnaie est $ |
${round(((me.budget - me.actualCost)*100)/me.budget)}%. | 24% | Calcule le % du budget restant |
Exemple avancé : Votre propre indicateur de santé de l'horaire
Disons que vous voulez avoir un indicateur de santé de l'horaire qui est basé sur des bases de référence, c'est-à-dire la date que vous avez réellement promise au client plutôt que sur la date de fin du plan actuel.
Vous allez créer un champ de formule, l'attacher aux projets, définir son type de données de sortie à Texte et entrez la formule comme :
${ pc = me.actualPercentComplete; pFinish = me.projectedFinishCalendar; bFinish = me.baselineFinish; now = Date.now(); label = 'Unknown'; label = Date.before(pFinish, bFinish) ? 'On Time' : label; label = Date.after(pFinish, bFinish) ? 'At Risk' : label; label = Date.after(now, bFinish) ? 'Overdue' : label; label = pc == 100 ? 'Completed' : label; label }
Dans la partie Couleur de la formule, mettez les mappages comme :
Résultat | Couleur |
---|---|
A l'heure | Vert |
À risque | Orange |
En retard | Rouge |
Terminé | Brun |