Allg. - Dynamic GUI Editor
Dynamisch generierte GUIs kommen in verschiedenen Plugins zum Einsatz. Diese können mithilfe des Dynamic GUI Editors komfortabel erstellt und einfach bearbeitet werden. Zur weiteren Unterstützung der Benutzerinteraktion können GUI-Elemente mit Regeln versehen werden. Dadurch kann Inhalt und Funktion anderer Elemente gezielt gesteuert werden.
Controls
Jedes Steuerelement verfügt über Eigenschaften. Diese können im rechten Teil eingesehen und bearbeitet werden. Änderungen werden direkt in der Design-Ansicht sichtbar. Dabei hat jedes Element einen Namen, welcher innerhalb einer GUI der Zuordnung dient und deshalb einzigartig sein muss. Dieses wird durch das Programm sichergestellt. Sollte versucht werden, einen bereits vergebenen Namen einem Element zuzuweisen, wird dieser automatisch auf einen gültigen Wert angepasst.
FriendlyName ist jeweils die in der GUI anzuzeigende Beschriftung.
Textbox
Textboxen verfügen über drei spezifische Eigenschaften:
- ReadOnly, gibt an, ob der Benutzer den gesetzten Text editieren darf.
- Mask, eine Eingabemaske zur Unterstützung bei der Eingabe, zum Beispiel __:__:__:__
- Validation Regex, hier kann eine Regular Expression gesetzt werden nach welcher die Validierung der Eingabe erfolgt.
Mask
Unter "Mask" können Mask-Tokens definiert werden. Damit werden die Formate der Eingabefelder festgelegt.
Mask-Token | Eigenschaft |
A | Alphanumerisch oder ein Sonderzeichen, erforderlich. |
a | Alphanumerisch oder ein Sonderzeichen, nicht erforderlich. |
L | Buchstabe, erforderlich. Beschränkt die Eingabe auf die ASCII-Buchstaben a-z und A-Z. Dieses Maskenelement ist äquivalent zu [a-zA-Z] in regulären Ausdrücken. |
l | Buchstabe, nicht erforderlich |
\ | Bricht ein Maskenzeichen aus und verwandelt es in ein Literal. "\" ist die Escape-Sequenz für einen Backslash. |
Alle anderen Zeichen | (Literale) Alle Nicht-Masken-Elemente werden in RadMaskedTextInput als sie selbst angezeigt. Literale nehmen zur Laufzeit immer eine statische Position in der Maske ein und können vom Benutzer nicht verschoben oder gelöscht werden. |
Mehr Informatioenn unter Telerik Mask Tokens.
Ein Beispiel einer Maske für das Eigeben einer MAC-Adresse: AA-AA-AA-AA-AA-AA
Validation-Regex
Mit der Validation Regex können die in der Eingabe erlaubten Zeichen beschränkt werden.
Ein Beispiel Einer Regex die nur Buchstaben von A bis F erlaubt, für das Eigeben einer MAC-Adresse:
^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$
Als Internal markierte Elemente sind essentiell für die Funktionsweise eines Plug-Ins. Werden diese gelöscht oder ihr Name geändert, kann die Funktion des jeweiligen Plug-Ins nicht mehr gewährleistet werden.
Combobox-Einträge
Mit Default kann ein Wert als vorselektierter Standwert definiert wird. Es kann nur ein Element als Standartwert definiert sein. Wird ein neues Element als solches markiert, wird diese Eigenschaft beim alten automatisch auf False gesetzt.
Über Value wird der intern zu nutzende Wert definiert.
Empty erzeugt in der Darstellung ein leeres Auswahlelement.
Auch für die Elemente einer ComboBox gilt, ihr Name muss innerhalb der ComboBox einzigartig sein. Wird versucht, einen Namen doppelt zuzuweisen, wird dieser automatisch vom Programm auf einen gültigen Wert angepasst.
Regeln
Das Regelkonzept ist ein fester Bestandteil dynamischer GUIs. Regeln ermöglichen es, die Auswahl eines ComboBox-Elementes mit weiteren automisch auszuführenden Aktionen zu verbinden. So kann zum Beispiel ein Wert einer anderen ComboBox selektiert, oder der Inhalt eines Textfeldes verändert werden. Ein ComboBox-Element kann n Regeln enthalten.
Aufbau
Eine Regel besteht aus mehreren Informationen:
- Das übergeordnete GUI-Element.
- Das auslösende Element.
- Das Ziel-GUI-Element.
- Der zu setzende Inhalt.
- Eine Aktion, die beschreibt, was mit dem Ziel geschehen soll.
- Bis auf das übergeordnete GUI-Element können alle Einstellungen nachträglich bearbeitet werden.
Filterung von Auswahlbox-Einträgen
- Beispiel 1:
- Combobox-Einträge des Ziels: DEWOB, DEBWE, DEKAS, GBCRE
- TargetItemFilter: (DEWOB|DEKAS)
- Ergebnis: DEWOB, DEKAS
- Beispiel 2:
- Combobox-Einträge des Ziels: DEWOB, DEBWE, DEKAS, GBCRE
- TargetItemFilter: (.*)
- Erebnis: Alle Einträge, da .* alles matcht
Dynamische Textbox-Werte
- Combobox-1-Auswahl: VW (Name = ForestOrganisation)
- Combobox-2-Auswahl: DEWOB (Name = LocationSite)
- Combobox-3-Auswahl: CD (Name = TypeFunction)
- Textbox-Eingabe: 123456 (Name = DigitAlphanumeric)
- Target-Textbox: OSDComputerName
- TargetItem: {ForestOrganisation}{LocationSite}{TypeFunction}{DigitAlphanumeric}
- Ermittelter Wert für OSDComputerName: VWDEWOBCD123456
- ProcessType = Default führt dazu, dass die Regel nur greift, wenn das zugeordnete Combobox-Item geklickt wurde.
- ProcessType = All führt dazu, dass die Regel bei jeder Änderung eines Wertes greift (bezogen auf alle vorhandenen Controls).
XML-Definition
Die Konfiguration wird im XML-Format gespeichert und kann innerhalb einer kompatiblen Pluginkonfiguration importiert werden.
Bei der zugrundeliegenden XML-Definition handelt es sich um ein allgemeines Format zur Beschreibung von konfigurierbaren grafischen Oberflächen innerhalb des SCCM Managers.
Im Folgenden wird der Aufbau einer Beispielkonfiguration erklärt.
Die Definition wurde durch einige neue Parameter ergänzt und kann daher unvollständig sein.
- Es können n-viele Controls definiert werden. Dabei lassen sich aktuell zwei Typen definieren: „TextBox“ und „ComboBox“.
- Dabei muss bei jedem Control ein Name definiert werden. Dieser muss eindeutig sein, darf keine Leerzeichen beinhalten und hat (im Beispiel Client Creator) drei Funktionen.
- Interner Name des Controls, um dieses per Regel ansteuern zu können.
- Name der Computervariable.
- Label des Controls, falls kein FriendlyName definiert wurde
- Außerdem kann ein FriendlyName definiert werden, dieser dient dann als Label in der GUI.
- Jedes Control kann optional einen Description-Tag beinhalten. Dort kann eine Beschreibung hinterlegt werden, die interher als Tooltip über dem jeweiligen Control angezeigt wird.
- Jedes Control kann n-viele Items haben.
- Ein Item benötigt wieder zwingend einen Namen und optional einen FriendlyName zur Darstellung (andernfalls wird automatisch der Name benutzt).
- Bei einer ComboBox sollte das Item auch einen Value haben. Dieser ist im Beispiel Client Creator der Wert der Computervariable.
- Das Standard-Item einer ComboBox lässt sich über das Attribut IsDefault setzen. Ansonsten ist initial keins ausgewählt.
- Jedes Item kann n-viele Rules haben. Sobald dieses Item dann später in der GUI ausgewählt wird, setzen alle ihm zugeordneten Regeln ein.
- In einer Rule wird immer ein Target definiert, also der Name des Controls, welches beeinflusst werden soll.
- Außerdem wird ein TargetItem definiert, also z.B. das Item, das automatisch in einer anderen ComboBox ausgewählt werden soll.
- Optional kann auch eine sog. Action definiert werden. Hier gibt es momentan vier verschiedene: „Show“, „Hide“, „Enable“, „Disable“. Dadurch können andere Controls zusätzlich beeinflusst werden.
- Eine TextBox kann außerdem noch zusätzliche Attribute und Tags haben.
- Es kann eine Maske definiert werden, dazu können die Attribute „Mask“und „MaskType“gesetzt werden (siehe Beispiel).
- Es kann ein zusätzlicher Tag „ValidationRegex“hinzugefügt werden. Dadurch bekommt die TextBox die Möglichkeit, sich bei Benutzereingaben selbst zu validieren.
- Außerdem erkennt eine TextBox nur ihr erstes Item. Dieses wird zwingend benötigt, damit es überhaupt einen Value gibt und um z.B. über eine Rule darauf zugreifen zu können.
- Für kundenspezifische Plugins lässt sich dieses System ebenfalls einsetzen
Beispielkonfiguration und die daraus generierte GUI
- Das erste Control im Bild (OS Name) gehört intern zum Client Creator.
- Der Computername als TextBox (ebenfalls intern): der reguläre Ausdruck (ValidationRegex) erwartet Großbuchstaben.
- Netbios Domain als ComboBox: durch die dazugehörige Regel wird automatisch der dazu passende FQDN gewählt.
- Primary Site Server: Der FriendlyName für das Control ist PrimarySiterServer=ExampleSite01, tatsächlich wird aber später der Variablenwert (Value) ExampleSite01 gewählt. Dies gilt genauso für den Variablenname, dieser wird später als OSDPrimarySiteServer gesetzt.