SharePoint Online bietet die Möglichkeit mittels einer einfachen JSON Formatting Datei das Aussehen von Listenansichten komplett zu verĂ€ndern. Zum Beispiel kann das Aussehen und Verhalten eines Feldes in einer Ansicht geĂ€ndert werden, aber auch die gesamte Ansicht. HĂ€ufig wird diese FunktionalitĂ€t aber auch einfach dafĂŒr verwendet, um bestimmte Zeilen in einer Liste hervorzuheben und auf sie hinzuweisen.
Zum Beispiel
- Markiere alle Elemente, die in einem bestimmten Status sind.
- Markiere alle Elemente, bei denen ein Wert eine bestimme Summe ĂŒbersteigt.
- Markiere alle Elemente, bei denen ein Datum in der Vergangenheit liegt.
Das ist alles einfach zu formulieren und unter
https://pnp.github.io/List-Formattingâ
findet ihr viele Beispiele dafĂŒr. Eine komplette Liste der Funktionen, die man zum Berechnen benutzen kann, gibt es bei Microsoft Learnâ.
Wenn ihr dort aber nach einer âWEEKDAYâ-Funktion sucht, also nach einer Funktion, die euch den Wochentag zu einem Datum berechnet, dann werdet ihr da nicht fĂŒndig werden. So eine Funktion gibt es nicht.
Aber wir können sie selbst nachbauen.
Hervorheben einer Zeile
ZunĂ€chst kĂŒmmern wir uns aber erstmal um die Grundstruktur der JSON-Datei, die wir im Folgenden benutzen wollen. Als Beispiel werde ich hier eine Zeile in der Listenansicht hervorheben, wenn eine bestimmte Bedingung eintritt.
DafĂŒr mĂŒssen wir nur die âadditionalRowClassâ abhĂ€ngig von einer Bedingung setzen.
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json",
"additionalRowClass": "=if(<irgendwas>==<irgendwas>,'ms-bgColor-themeLighter ms-bgColor-themeLight--hover','')"
}
Unsere WEEKDAY Funktion
Dann können wir die fehlende WEEKDAY Funktion mittels ein wenig Mathematik nachbilden.
Mit dem Token
=@now
bekommen wir das aktuelle Datum und darauf aufbauend mit dem Ausdruck
=Number(Date(@now))
die aktuelle Anzahl von Millisekunden seit Donnerstag, dem 01.01.1970 UTC.
Indem wir das durch die Anzahl von Millisekunden in einem Tag teilen
=floor(Number(Date(@now))/ 86400 / 1000)
erhalten wir die Anzahl der Tage seitdem.
Der 01.01.1970 UTC war ein Donnerstag, daher mĂŒssen wir zu dieser Summe 4 hinzufĂŒgen, um den Sonntag als Start der Woche auszuwĂ€hlen (Wenn ihr den Montag als Start der Woche haben wollt, dann mĂŒsst ihr hier 5 hinzufĂŒgen).
Nun können wir diese Summe durch 7 teilen und erhalten die Anzahl der Wochen seit dem 01.01.1970 und einen Rest von Wochentagen. Dieser Rest interessiert uns und wir bekommen ihn mittels der âModuloâ Funktion (â%â).
=(floor(Number(Date(@now))/ 86400 / 1000)+4) % 7
Das gibt uns einen Wert zwischen 0 und 6 fĂŒr den im Moment aktuellen Wochentag in London.
Um das nun wiederum an unsere lokale Zeitzone anzupassen, mĂŒssen wir den Zeitstempel 01.01.1970 00:00 noch die Verschiebung mitgeben, die wir in unserer lokalen Zeitzone haben. Ich mach das hier, indem ich die Zeit in Millisekunden vom Zeitstempel 01.02.2020 von 1577836800000 abziehe (Der UTC Zeit in Millisekunden vom â01.01.2020â in London).
=1577836800000-Number(Date(â01.01.2020â)
Wenn wir das alles zusammenfĂŒgen, erhalten wir die folgende âWEEKDAYâ Funktion zum Berechnen des aktuellen Wochentages.
=(floor(((Number(Date(@now))+1577836800000-Number(Date(â01.01.2020â)))/ 86400 / 1000)+4) % 7
by the way
Mittels derselben Berechnung können wir auch unsere lokale Zeitzone als Unterschied in Stunden von UTC berechnen
=floor((1577836800001-Number(Date(â01.01.2020â)))/3600 / 1000)
Diese Funktion gibt uns einen Stundenunterscheid zwischen -12 und 12 und sagt uns, um wie viele Stunden uns unsere lokale Zeitzone von UTC unterscheidet (Ich habe 1 zu 1577836800000 hinzugefĂŒgt, um sicherzustellen, dass wir keinen âDIVISION BY ZEROâ Fehler bekommen, wenn wir in London sind. Die âfloorâ Funktion gleicht die 1 dann wieder aus).
Alles Zusammen
Damit erhalten wir dann das folgende JSON-Template:
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/row-formatting.schema.json",
"additionalRowClass": "=if([$DayOfWeek] == (floor(((Number(Date(@now))+1577836800000-Number(Date('01.01.2020')))/ 86400 / 1000)+4) % 7),'ms-bgColor-themeLighter ms-bgColor-themeLight--hover','')"
}
Wenn wir eine Liste mit dieser Spalte erstellen:
Field | Type |
---|---|
Weekday | Nummer |
und dann die folgenden Werte Eintragen
Weekday | Nummer |
---|---|
Sunday | 0 |
Monday | 1 |
Tuesday | 2 |
Wednesday | 3 |
Thursday | 4 |
Friday | 5 |
Saturday | 6 |
Die Ansicht sieht an einem Sonntag dann so aus:
und an einem Mittwoch so:
Die Dateien
Dieses Beispiel ist im PNP Github Repository verfĂŒgbar:
https://github.com/pnp/List-Formatting/tree/master/view-samples/highlight-rows-current-weekdayâ