Formelfelder
Der Wert eines Formel-Benutzerfelds wird von Celoxis automatisch anhand seiner Formel berechnet. Die Berechnung erfolgt jedes Mal, wenn das Feld gerendert wird. Die Formelausdruckssprache ist hochentwickelt und ermöglicht komplexe Datenmanipulationen, einschließlich arithmetischer Operationen sowie Transformationen von Zeichenketten und Datumsangaben.

Syntax
Celoxis behandelt alles zwischen
Und
als Ausdrücke. Formeln können entweder als reine Ausdrücke definiert werden, z. B.
oder eine Mischung aus Text und Ausdrücken enthalten als
wenn etwas eingeschlossen ist
Und
wird als Ausdruck behandelt und ausgewertet, während alles außerhalb davon unverändert in die Ausgabe kopiert wird. Für Interessierte: Wenn die Formeln einem Projekt mit dem Namen „…“ zugeordnet wären, …
und das Budget war
Die Ausgabe wäre
Und
jeweils.
Der Punktoperator
Der Punktoperator dient dazu, auf eine Eigenschaft eines Objekts zu verweisen. Im Beispiel
, Die
Bezieht sich auf das Projektbudget, wenn das benutzerdefinierte Feld einem Projekt zugeordnet ist. Der Punktoperator kann auch verwendet werden, um eine Funktion (auch Methode genannt) eines Objekts aufzurufen. Im Beispiel
, Die
ist ein Funktionsaufruf, der den Projektnamen in Großbuchstaben umwandeln würde.
Betreiber
- Arithmetik:
+,-(binär),*,/unddiv,%undmod,-(unär) - Zeichenkettenverkettung:
+= - Logische Operatoren:
und,&&,oder,||,nicht,! - Relational :
==,eq,!=,ne,<,lt,>,gt,ge, >=,le. Vergleiche können mit anderen Werten oder mit booleschen, Zeichenketten-, Ganzzahl- oder Gleitkommaliteralen durchgeführt werden.<= - Leer: Der
leereOperator ist eine Präfixoperation, mit der man feststellen kann, ob ein Wertnulloder leer ist. - Bedingung :
A ? B : C.WerteBoderCaus , abhängig vom Ergebnis der Auswertung vonA. - Abtretung:
= - Semikolon:
;
Die Reihenfolge der Operatoren von der höchsten zur niedrigsten, von links nach rechts, ist wie folgt:
[] .()(wird verwendet, um die Priorität von Operatoren zu ändern)-(unär)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 dürfen nicht als Identifikatoren verwendet werden:
Und | oder | nicht | Gleichung |
ne | lt | gt | le |
ge | WAHR | FALSCH | null |
Instanz von | leer | div | Mod |
Grundlegende Beispiele
| Formel | Ergebnis |
|---|---|
${1 > (4/2)} | FALSCH |
${4.0 >= 3} | WAHR |
${100.0 == 100} | WAHR |
${(10*10) ne 100} | FALSCH |
${'a' < 'b'} | WAHR |
${'hip' gt 'hit'} | FALSCH |
${4 > 3} | WAHR |
${1.2E4 + 1.4} | 12001.4 |
${3 div 4} | 0.75 |
${10 mod 4} | 2 |
${!empty me.code} | Falsch, wenn der Code des Objekts null oder eine leere Zeichenkette ist |
Nutzenfunktionen
Folgende Hilfsfunktionen wurden bereitgestellt:
formatDate(date) | Der formatierte Datumswert (ohne Uhrzeit) gemäß den Einstellungen des Betrachters. |
formatDateTime(datetime) | Der formatierte Wert von Datum und Uhrzeit gemäß den Einstellungen des Betrachters. |
formatNumber(Zahl) | Der formatierte Wert der Zahl gemäß dem Gebietsschema des Betrachters. |
Währung formatieren(Zahl) | Der Währungswert wird gemäß den Unternehmenseinstellungen und dem Zahlenformat des Betrachters formatiert. Beispiel: 25.000 $ |
hoursToHHMM(number) | Die Stunden werden im Format HH:MM angegeben. Beispielsweise ergibt 2,5 das Format 2:30 |
ceil(Zahl) | Die nächstgrößere ganze Zahl als die Eingabe. Beispielsweise gibt ${ceil(5.3)} 6 zurück |
Etage(Nummer) | Die nächstkleinere ganze Zahl als die Eingabe. Beispielsweise gibt ${floor(4.8)} 4 zurück |
abs(Zahl) | Der Absolutwert einer Zahl. Beispielsweise gibt ${abs(-3.2)} den Wert 3.2 zurück |
round(number) | Der gerundete Wert der Eingabe. Beispielsweise gibt ${round(3.6)} 4 zurück |
roundTo(digits, number) | Der gerundete Wert der eingegebenen Zahl auf die angegebene Anzahl an Stellen. Beispielsweise gibt ${roundTo(2, 3.667)} 3,67 zurück; während ${roundTo(0, 3.667)} 4 zurückgibt. |
String.contains(haystack, needle) | Prüfen, ob eine Nadel im Heuhaufen |
String.endsWith(string, suffix) | Prüfen, ob die Zeichenkette mit dem Suffix |
String.replace(txt, search, replace) | Ersetzt alle Vorkommen von „search“ in der Textdatei durch „replace“. |
String.startsWith(string, prefix) | Prüfen, ob die Zeichenkette mit einem Präfix beginnt |
String.trim(string) | Entfernt Leerzeichen und Steuerzeichen von den Enden der Zeichenkette |
String.blankIfNull(str) | Wenn str null ist, wird eine leere Zeichenkette zurückgegeben, andernfalls wird str selbst zurückgegeben. |
Date.before(date1, date2) | Gibt „true“ wenn Datum1 vor Datum2 liegt. |
Date.equal(date1, date2) | Gibt „true“ wenn Datum1 gleich Datum2 ist. |
Date.after(date1, date2) | Gibt „true“ wenn Datum1 nach Datum2 liegt. |
Date.format(date, format) | Der formatierte Datumswert gemäß dem vorgegebenen Format. Unterstützte Formate finden Sie hier. |
Datum.StundenZwischen(von, bis) | Gibt die Anzahl der verstrichenen Stunden zwischen dem Start- und dem Endzeitpunkt. |
Datum.ArbeitszeitenZwischen(von, bis) | Ermitteln Sie die Anzahl der Arbeitsstunden im Zeitraum von „ Von“ bis „ Bis “ basierend auf dem Standardarbeitskalender des Unternehmens. Beträgt der Zeitraum zwischen „ Von“ und „ Bis “ mehr als 30 Tage, werden die entsprechenden Arbeitsstunden zurückgegeben. |
Date.plusHours(Datum, Stunden) | Addiert Stunden zum Datum und gibt dieses Datum zurück. |
Date.isoToDate(string) | Konvertiert eine Zeichenkette im ISO-Format in ein Datum. |
Date.now() | Gibt ein Datum zurück, das dem aktuellen Datum und der aktuellen Uhrzeit entspricht |
Collection.size(v) | Gibt die Größe von v zurück. |
Collection.contains(haystack, needle) | Prüfen, ob eine Nadel im Heuhaufen |
Collection.containsAny(haystack, needles) | Prüfen Sie, ob sich mindestens eine Nadel im Heuhaufen |
Collection.containsAll(haystack, needles) | Prüfen Sie, ob alle Nadeln im Heuhaufen |
Schreiben mehrzeiliger Formeln
Um den Formelcode auf mehrere Zeilen zu verteilen, verwenden Sie die = und ; . Der Rückgabewert ist die letzte Anweisung der Formel. Zum Beispiel:
${ apc = me.actualPercentComplete; ppc = me.plannedPercentComplete; (apc - ppc)/ppc }Der Formel-Rückgabedatentyp
Beim Definieren einer Formel müssen Sie einen Formeldatentyp. Dieser gibt dem System an, welchen Wert die Formel zurückgeben soll. Celoxis formatiert den Rückgabewert automatisch anhand des Datentyps. Wenn Sie beispielsweise als Rückgabetyp „Währung“ angeben und Ihre Formel die Zahl 10000, lautet die Ausgabe „ 10.000 $“. Celoxis formatiert die Zahl also automatisch und fügt das Währungssymbol des Unternehmens hinzu.
Das Ich -Objekt
Das Objekt „me“ in der Formel repräsentiert das Objekt, für das die Formel ausgewertet wird. Angenommen, unser Formelfeld „Kundenvorschuss“ ist als ${me.budget * 0,1} definiert, d. h. es entspricht 10 % des Budgets. Wenn wir dieses Feld sowohl Projekten als auch Aufgaben zugeordnet haben, ist das Objekt „me“ bei der Auswertung der Formel für ein Projekt ein Projektobjekt und für eine Aufgabe ein Aufgabenobjekt.
Feldreferenz
Um die Liste der verfügbaren Felder anzuzeigen, klicken Sie im Fenster „Benutzerdefinierte Felder hinzufügen/bearbeiten“ auf die Registerkarte „Feldreferenz“. Klicken Sie auf das Plus-Symbol, um die Liste der verfügbaren Variablen für die verschiedenen Entitäten zu erweitern .
Fehlerbehandlung
Wenn beim Auswerten einer Formel ein Fehler auftritt, z. B. weil Sie eine Zahl anstelle einer Zeichenkette übergeben haben, wird die Fehlermeldung „ERR!“. Bewegen Sie den Mauszeiger darüber, um eine genauere Beschreibung des Problems zu erhalten.
Beispiele
Angenommen, wir haben ein Projekt mit den folgenden Daten.
| Etikett | Feld | Wert |
|---|---|---|
| AUSWEIS | Ausweis | 1234 |
| Name | Name | Einrichtung von Büroräumen |
| Start | Kalender starten | 10. Januar 2011 |
| Budget | Budget | 5000 |
| Geschätzte Kosten | geschätzte Kosten | 4000 |
| Tatsächliche Kosten | tatsächliche Kosten | 3800 |
Wir betrachten nun einige einfache Beispiele. Wir gehen davon aus, dass die Formel Projekten zugeordnet ist und die Beispielausgabe für das oben beschriebene Projekt gilt.
| Formel | Ausgabe | Kommentare |
|---|---|---|
${me.id * 10} | 12340 | Die ID wird mit 10 multipliziert |
me.id * 10 | me.id * 10 | Nicht in ${} eingeschlossen und daher unverändert in die Ausgabe übernommen. |
ID:${me.id} | ID:1234 | Text vermischt mit einem Ausdruck |
${me.name + 100} | HILFE! | Arithmetische Operationen können nicht mit dem Datentyp String durchgeführt werden. |
${me.abcd} | HILFE! | „me“ besitzt keine Eigenschaft namens „abcd“. |
${formatDate(me.startCalendar)} | 10. Januar 2011 | Formatiert das Startdatum gemäß dem vom Benutzer gewählten Datumsformat. |
${me.actualCost gt (me.budget*.9) ? 'ALERT' : 'OK'} | ALARM | Ein Beispiel, wie man if/then/else schreibt |
${formatCurrency(me.budget)} | $ 5,000 | Angenommen, Ihr Währungssymbol ist $ |
${round(((me.budget - me.actualCost)*100)/me.budget)}% | 24% | Berechnet den verbleibenden Prozentsatz des Budgets |
Erweitertes Beispiel: Ihr eigener Zeitplan-Indikator
Nehmen wir an, Sie möchten einen Indikator für die Terminstabilität haben, der auf Basis von Referenzwerten, d. h. dem Datum, das Sie dem Kunden tatsächlich zugesagt haben, und nicht auf dem Enddatum des aktuellen Plans basiert.
Sie erstellen ein Formelfeld, ordnen es Projekten zu, legen den Ausgabedatentyp auf Text und geben die Formel wie folgt ein:
${ pc = me.actualPercentComplete; pFinish = me.projectedFinishCalendar; bFinish = me.baselineFinish; now = Date.now(); label = 'Unbekannt'; label = Date.before(pFinish, bFinish) ? 'Pünktlich' : label; label = Date.after(pFinish, bFinish) ? 'Gefährdet' : label; label = Date.after(now, bFinish) ? 'Überfällig' : label; label = pc == 100 ? 'Abgeschlossen' : label; label }Im Farbteil der Formel tragen Sie die Zuordnungen wie folgt ein:
| Ergebnis | Farbe |
|---|---|
Rechtzeitig | Grün |
Gefährdet | Orange |
Überfällig | Rot |
Vollendet | Braun |
