Formel-Felder


Der Wert eines benutzerdefinierten Formelfelds wird automatisch wie folgt berechnet: Celoxis auf der Grundlage seiner Formel. Der Wert wird jedes Mal berechnet, wenn das Feld gerendert wird. Die Formelausdruckssprache ist ausgeklügelt, sodass Sie komplexe Datenmanipulationen durchführen können, einschließlich arithmetischer Transformationen, Zeichenfolgen- und Datumstransformationen.

Syntax

Celoxis behandelt alles zwischen ${ und } als Ausdrücke. Formeln können entweder als reine Ausdrücke definiert werden, z.B. ${me.budget * 0.10}oder eine Mischung aus Text und Ausdrücken enthalten als The project ${me.name} was created on ${me.created} wenn alles, was in ${ und } wird als Ausdruck behandelt und ausgewertet, während alles außerhalb davon wörtlich in die Ausgabe kopiert wird. Für die Neugierigen: Wenn die Formeln einem Projekt beigefügt wären, dessen Name XYZ und das Budget war $10,000 die Ausgabe wäre 1000 und Das Projekt XYZ wurde am 20. Juni 2008 um 08:30:16 Uhr EDT 2013 ins Leben gerufen. jeweils.
Der Punkt-Operator
Der Punkt-Operator wird verwendet, um auf eine Eigenschaft eines Objekts zu verweisen. In dem Beispiel ${me.budget * 0.10}, die me.haushalt bezieht sich auf das Budget des Projekts, wenn das benutzerdefinierte Feld an ein Projekt angehängt ist. Der Punkt-Operator kann auch dazu verwendet werden, eine Funktion (alias Methode) eines Objekts aufzurufen. In dem Beispiel ${me.name.toUpperCase()}, die zumOberkommando ist ein Funktionsaufruf, der den Namen des Projekts in Großbuchstaben umwandelt.
Betreiber
  • Arithmetik: +, - (binär), *, / und Abteilung, % und mod, - (unärgerlich)
  • String-Verkettung: +=
  • Logisch: und, &&, oder, ||, nicht, !
  • Relational: ==, eq, !=, ne, <, Es, >, gt, <=, ge, >=, le. Vergleiche können gegen andere Werte oder gegen Boolesche, String-, Ganzzahl- oder Fließkomma-Literale durchgeführt werden.
  • Leere: Die leere Operator ist eine Präfix-Operation, die verwendet werden kann, um zu bestimmen, ob ein Wert null oder leer.
  • Bedingt: A ? B : C. Evaluieren Sie B oder Cje nach Ergebnis der Auswertung von A.
  • Auftrag: =
  • Semikolon: ;
Der Vorrang der Operatoren von oben nach unten, von links nach rechts ist wie folgt:
  • [] .
  • () (wird verwendet, um den Vorrang von Operatoren zu ändern)
  • - (unärgerlich) nicht ! leer
  • * / div % mod
  • + - (binär)
  • +=
  • < > <= >= lt gt le ge
  • == != eq ne
  • && und
  • || oder
  • ? :
  • =
  • ;
Reservierte Wörter
Die folgenden Wörter sind für die EL reserviert und sollten nicht als Identifikatoren verwendet werden:
und oder nicht eq
ne Es gt le
ge echt falsch null
Instanz von leere Abteilung mod

Grundlegende Beispiele

Formel Ergebnis
${1 > (4/2)} falsch
${4.0 >= 3} echt
${100.0 == 100} echt
${(10*10) ne 100} falsch
${'a' < 'b'} echt
${'hip' gt 'hit'} falsch
${4 > 3} echt
${1.2E4 + 1.4} 12001.4
${3 div 4} 0.75
${10 mod 4} 2
${!empty me.code} Falsch wenn das Objekt Code ist null oder eine leere Zeichenkette.

Hilfsfunktionen

Der folgende Satz von Hilfsfunktionen wurde zur Verfügung gestellt:

formatDate(Datum)Der formatierte Wert des Datums (ohne die Uhrzeit) gemäß den Präferenzen des Betrachters.
formatDateTime(DatumUhrzeit)Der formatierte Wert von Datum und Zeit gemäß den Präferenzen des Betrachters.
formatNummer(n)Der formatierte Wert der Zahl gemäß dem Gebietsschema des Betrachters.
formatWährung(Zahl)Der formatierte Wert der Währung gemäß der in den Präferenzen des Unternehmens angegebenen Währung und das Zahlenformat gemäß dem Gebietsschema des Betrachters. Z.B. 25.000 $
StundenToHHMM(Zahl)Formatiert die Stunden in der Form HH:MM. Zum Beispiel wird 2,5 zu 2:30 führen.
Decke(n)Die nächstgelegene Ganzzahl, die größer ist als die Eingabe. Zum Beispiel gibt ${ceil(5.3)} 6 zurück
Etage(n)Die nächstgelegene Ganzzahl, die kleiner als die Eingabe ist. Zum Beispiel gibt ${floor(4.8)} 4 zurück
abs(Zahl)Der absolute Wert einer Zahl. Zum Beispiel gibt ${abs(-3.2)} 3.2 zurück
Runde(n)Der gerundete Wert der Eingabe. Zum Beispiel gibt ${round(3.6)} 4 zurück
roundTo(Ziffern, Zahl)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(Heuhaufen, Nadel)Prüfen Sie, ob Nadel existiert in Heuhaufen
String.endsWith(Zeichenkette, Suffix)Prüfen Sie, ob Zeichenkette endet mit Suffix
String.replace(txt, suchen, ersetzen)Ersetzt alle Vorkommen von Suche in txt mit ersetzen.
String.startsWith(Zeichenkette, Präfix)Prüfen Sie, ob Zeichenkette beginnt mit Vorwahl
Zeichenkette.trim(zeichenkette)Beschneidet Leerzeichen und Steuerzeichen von den Enden der Zeichenkette
String.blankIfNull(str)Wenn str null ist, gibt eine leere Zeichenkette zurück, andernfalls wird die str selbst.
Datum.vorher(Datum1, Datum2)Rückgabe echt wenn Datum1 vor Datum2 liegt.
Datum.gleich(Datum1, Datum2)Rückgabe echt wenn date1 gleich date2 ist.
Datum.nach(Datum1, Datum2)Rückgabe echt wenn date1 nach date2 liegt.
Datum.format(Datum, Format)Der formatierte Wert des Datums gemäß dem Format. Die unterstützten Formate finden Sie hier.
Datum.StundenZwischen(von, bis)Geben Sie die Anzahl der verstrichenen Stunden zwischen von und an.
Datum.ArbeitsstundenZwischen (von, bis)Geben Sie die Anzahl der Arbeitsstunden zwischen von und an basierend auf dem Standardarbeitskalender des Unternehmens. Wenn die verstrichenen Tage zwischen von und an mehr als 30 ist, werden die verstrichenen Stunden zurückgegeben.
Datum.plusStunden(Datum, Stunden)Fügt hinzu. Stunden an Datum und gibt dieses Datum zurück.
Date.isoToDate(Zeichenkette)Bekehrt Zeichenkette im ISO-Format zu einem Datum.
Datum.jetzt()Gibt ein Datum zurück, das das aktuelle Datum und die aktuelle Uhrzeit darstellt
Sammlung.Größe(v)Rückgabe Größe von v.
Sammlung.enthält(Heuhaufen, Nadel)Prüfen Sie, ob Nadel existiert in Heuhaufen
Collection.containsAny(Heuhaufen, Nadeln)Prüfen Sie, ob mindestens ein Nadel besteht in der Heuhaufen
Collection.containsAll(Heuhaufen, Nadeln)Prüfen Sie, ob alle Nadeln besteht in der Heuhaufen

Schreiben von mehrzeiligen Formeln

Um den Formelcode mehrzeilig zu schreiben, verwenden Sie die = und ; Betreiber. Der Rückgabewert ist die letzte Aussage der Formel. Zum Beispiel:

${
apc = me.actualPercentComplete;
ppc = me.plannedPercentComplete;
(apc - ppc)/ppc
}

Die Formel liefert den Datentyp

Bei der Definition einer Formel müssen Sie eine Formel-Datentyp. Dadurch wird dem System mitgeteilt, was es von der Formel erwarten soll. Celoxisformatiert den Rückgabewert automatisch auf der Grundlage des Datentyps. Wenn Sie beispielsweise als Rückgabetyp eine Währung angeben, dann gibt Ihre Formel eine Zahl zurück 10000wäre die Ausgabe $10,000 d.h. die Nummer wird Celoxisautomatisch formatiert und mit dem Währungssymbol des Unternehmens vorangestellt.

Die ich Objekt

Die ich Objekt in der Formel stellt das Objekt dar, für das die Formel ausgewertet wird. Nehmen wir z.B. an, dass unser Formelfeld Kundenvorschuss ist definiert als ${me.budget * 0.1} d.h. es macht 10% des Budgets aus. Wenn wir dieses Feld sowohl den Projekten als auch den Aufgaben zugeordnet haben, dann wird bei der Bewertung der Formel für ein Projekt die ich Objekt wäre ein Projekt, während es für eine Aufgabe ein Aufgabenobjekt wäre.

Feldbezug

Um die Liste der verfügbaren Felder anzuzeigen, klicken Sie auf die Registerkarte Feldbezug auf dem Bildschirm Benutzerdefinierte Felder hinzufügen/bearbeiten. Klicken Sie auf das Plus-Symbol, um die Liste der verfügbaren Variablen für die verschiedenen Entitäten zu erweitern.

Fehlerbehandlung

Wenn bei der Auswertung einer Formel ein Fehler auftritt, z. B. wenn Sie eine Zahl übergeben haben, bei der eine Zeichenfolge erwartet wurde, wird die Ausgabe angezeigt ERR!. Fahren Sie mit der Maus darüber, um eine bessere Beschreibung des Problems zu erhalten.

Beispiele

Angenommen, wir haben ein Projekt mit folgenden Daten.

EtikettFeldWert
IDid1234
NameNameEinrichten von Büroräumen
StartstartKalender10. Januar 2011
HaushaltBudget5000
Geschätzte KostengeschätzteKosten4000
Tatsächliche KostenactualCost3800

Wir werden uns nun einige einfache Beispiele ansehen. Wir gehen davon aus, dass die Formel den Projekten beigefügt ist und die Beispielausgabe für das oben beschriebene Projekt gilt.

FormelAusgabeKommentare
${me.id * 10} 12340 id wird mit 10 multipliziert
me.id * 10 me.id * 10 Nicht in ${} eingeschlossen und daher wortwörtlich in die Ausgabe kopiert.
ID:${me.id}ID:1234Text gemischt mit einem Ausdruck
${me.name + 100} ERR! Arithmetik bei Typ String kann nicht ausgeführt werden.
${me.abcd} ERR! ich hat keine Eigenschaft namens abcd.
${formatDate(me.startCalendar)} 10. Januar 2011 Formatiert das Startdatum entsprechend dem Datumsformat des Benutzers.
${me.actualCost gt (me.budget*.9) ? 'ALERT' : 'OK'}ALERTEin Beispiel für das Schreiben von if/then/else
${formatCurrency(me.budget)} $ 5,000 Angenommen, Ihr Währungssymbol ist $
${rund(((me.budget - me.actualCost)*100)/me.budget)}% 24%Berechnet den Prozentsatz des verbleibenden Budgets

Erweitertes Beispiel: Ihr eigener Gesundheitsindikator

Nehmen wir an, Sie möchten einen Indikator für den Gesundheitszustand des Plans haben, der auf den Basislinien basiert, d.h. auf dem Datum, das Sie dem Kunden tatsächlich versprochen haben, und nicht auf dem Enddatum des aktuellen Plans.

Sie erstellen ein Formelfeld, hängen es an Projekte an, stellen den Ausgabedatentyp auf Text und geben Sie die Formel als ein:

${
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
}

Geben Sie im Farbteil der Formel die Zuordnungen als:

ErgebnisFarbe
PünktlichGrün
In GefahrOrange
ÜberfälligRot
AbgeschlossenBraun

Beispiel-Ausgabe