Manchmal ist es nötig Elemente in Service-Formularen, Previews oder Dialogen, abhängig von einer Benutzerrolle, Elemente dynamisch ein- oder auszublenden, bzw. diese mit einem Schreibschutz zu versehen. Aber wie ist es in Formularen eigentlich möglich herauszufinden, ob ein Benutzer Mitglied einer bestimmten Rolle ist?
Ganz einfach, mit dem Layout Designer & einer eigenen Datenquelle. Lass uns keine Zeit verlieren & direkt anfangen!
1. Feststellen, ob aktueller Benutzer Mitglied einer Rolle ist
Als Beispiel prüfen wir hier mal, ob der angemeldete Benutzer in der Administration-Rolle ist.
1.1 Auf ID oder Name prüfen
Zuerst müssen wir uns entscheiden, ob wir gegen ID der Rolle oder den Namen prüfen wollen. Beides hat vor und Nachteile, aber ehrlich gesagt ist es einfach eine sch**ß Idee, gegen Namen zu prüfen. Von daher suche ich mir hier erst mal die ID der zu prüfenden Rolle über die Dev-Tools raus, weil ich zu faul für das SQL-Management-Studio bin 😉
So, nun wissen wir, dass die Administrationsrolle die ID ‘a5d7b682-b211-4d94-a96d-8c57eedafdea’ & die Expression-Objekt-ID (EOID) ’77d0396f-79b1-45fe-921c-f43eaf3b1845′ hat.
Ich empfehle dir, die EOID zu nehmen, da diese ja über alle Tabellen für dieses Objekt gleich ist.
1.2 Das ASQL Filterstatement
Nun müssen wir uns ein ASQL-Filterstatement zusammenbauen. Ich baue das natürlich nicht jedes Mal wirklich neu, sondern tausche die ID der Rolle aus 😉
[Expression-ObjectID] = '77d0396f-79b1-45fe-921c-f43eaf3b1845' and Members.ID = IDDesZuPrüfendenBenutzers
Code-Sprache: JavaScript (javascript)
Die ID des zu prüfenden Users ziehen wir uns später dynamisch im Formular (CurrentUser).
Statement im QueryAnalyzer
Falls du dich des Öfteren fragst, wie gewisse Felder in Dialogen eigentlich in der Datenbank heißen, siehst du hier, wie du Datenbank-Feldnamen über die UUX herausfinden kannst.
2. Dialog / Preview / Formular anpassen
Als Beispiel blenden wir hier einfach in der Preview von Personen das Beschäftigungsverhältnis für Nicht-Admins aus.
Das ganze funktioniert aber in jeder Preview und in jedem Dialog, auch in deinen eigenen Service-Formularen, Asset-Dialogen, etc.
2.1 Layout-Designer öffnen
Zuerst müssen wir die Preview im Layout-Designer öffnen.
2.2 Datenquelle hinzufügen
Nun fügen wir uns eine neue Datenquelle hinzu.
Mit dieser Datenquelle fragen wir im nächsten Schritt ab, ob der aktuelle Benutzer Mitglied der Rolle ist.
2.3 Filter einsetzen
Gut, nun haben wir eine Datenquelle in der Preview, die alle Benutzerrollen abfragen kann.
Um den Filter zu setzen, arbeiten wir mit der roten $filter Eigenschaft an der Datenquelle.
Diese Variable muss den Filter String von oben zurückgeben & den CurrentUser dynamisch einfüllen. Das Ganze machen wir im erweiterten Modus der $filter-Eigenschaft mit JavaScript String Concatenation:
return "[Expression-ObjectID] = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX' and Members.ID = '" + currentUser.$value + "'";
Code-Sprache: PHP (php)
Video zum Hinzufügen des Filters
2.4 Boolesche Prüf-Variable erstellen
Klasse! Nun haben wir eine Datenquelle, die uns einen Treffer zurückliefert, sollte der Benutzer in der Rolle “Administration” sein. Nun müssen wir nur prüfen, ob die Datenquelle mindestens ein Ergebnis zurückliefert und falls ja, eine (neue) Kontext-Variable auf True oder Flase setzen.
Da wir ja in unserem Beispiel ein Feld verstecken wollen, wenn der User kein Admin ist, muss der Wert unserer Booleschen Variable also True sein, wenn der Nutzer Admin ist. (Denn Sichtbarkeit = Ja, wenn Nutzer = Admin)
if (totalCount.$value && totalCount.$value > 0){
return true;
}
return false;
Code-Sprache: JavaScript (javascript)
Somit hat unsere Variable den Wert True, wenn die Datenquelle mindestens einen Treffer hat und der aktuelle Benutzer somit Mitglied der Admin-Rolle ist. Wenn nicht, ist die Varible False.
Falls du keine Booleschen Variablen magst, schau mal wie du Powershell-Arrays im Matrix42 Workflow Studio verwenden kannst 😉
2.5 Sichtbarkeit-Eigenschaft mit Attribut verknüpfen
Nun müssen wir diese Variable noch mit der Sichtbarkeit vom Feld Beschäftigungsverhältnis verknüpfen und das war’s auch schon.
Fertig
Geschafft! Nun ist das Feld dynamisch eingeblendet und die Preview sieht für Nicht-Admins so aus:
Lass uns gerne dein Feedback da, wir würden uns sehr freuen!