Skip to main content

Grundlagen der GUI-Konfiguration

Konfigurationshierarchie

Alle Elemente der Benutzeroberfläche sind hierarchisch geordnet - analog des "Matroschka-Prinzips". Die Hierarchie ist zwingend einzuhalten, wenn Sie die Benutzeroberfläche konfigurieren. Die Hierarchie wird durch Verschachtelung der einzelnen SysConfig-Schlüssel erreicht. So sind die Formularfelder in den Formular-Dialogen (Neues Ticket, Ticket bearbeiten etc.) immer Kind-Elemente von Gruppen. Gruppen sind immer Kind-Elemente von Seiten. Seiten sind wiederum Kind-Elemente von Formularen usw. Demnach muss ein Dynamisches Feld in die Gruppe ticket-[new|edit]-form-group-data" eingebunden werden. Jede Seite muss immer eine Gruppe besitzen, um Formularfelder aufnehmen zu können. Parallel dazu sind die Widgets, Tabellen und Lanes im Frontend immer Kind-Elemente eines ConfiguredWidgets. Das ConfiguredWidget wiederum ist ein Kind-Element vom Kontext (Sidebar, Lane, Explorer etc.) Welcher Hierarchieebene ein SysConfig-Schlüssel angehört, können Sie der Spalte Metadaten in der Übersicht der SysConfig-Schlüssel entnehmen.

Aufbau der Hierarchie:

- Kontext
    - Widget
        - Tabellen-Widget
            - Tabellen Konfiguration
                - Konfiguration der Tabellenspalten
	- Objekt-Info-Widget
	- Widget Verknüpfte Objekte
        - Hilfe-Widget
        - Slider-Widget
	- Ticket Übersicht Widget
	- Tab-Widget
        - Asset Übersicht Widget
    - Hauptmenü
    - Formular
        - Seite
	    - Gruppe
                - Feld
		    - ...Feld
GUI-Konfig_Grundlagen_Hierarchie.png

Abb.: Konfigurationshierarchie am Beispiel des Dialogs Neues Ticket

Context

Dreh- und Angelpunkt für die Seiten in der Oberfläche sind immer die Kontexte. Ein Kontext kann z. B. ein Dashboard, eine Detailseite oder ein Dialog sein. Diesem Kontext liegt immer eine Konfiguration zugrunde. Bestandteil dieser Konfiguration sind verschiedene Listen mit Widgets, welche dann in der Oberfläche entsprechend angezeigt werden. Die Listen teilen sich z. B. auf in:

  • sidebars

  • explorer

  • lanes

  • content

  • others

  • .....

Innerhalb dieser Listen befinden sich die jeweiligen Konfigurationen für die Sidebar, den Explorer, die Lanes, das Dashboard usw. Wenn Sie also ein weiteres Widget in die Sidebar integrieren möchten, so erfolgt das im jeweiligen Kontext (z. B. Ticketdetails) in der Liste sidebars. Möchten Sie eine zusätzliche Tabelle im Ticketdashboard integrieren, so erfolgt das im Kontext "Ticket Dashboard" in der Liste content usw.

GUI-Konfig_Grundlagen_Context.png

Abb.: Konfiguration im Kontext Ticket-Details

ConfiguredWidget

In den Listen wird ein Object ConfiguredWidget erwartet. Dieses bildet den Rahmen für das konkrete Widget, welches per configuration gegeben ist.

Ein ConfiguredWidget hat folgende relevante Eigenschaften:

  • instanceId: Eindeutige Zeichenkette (kontextweit), welche zur Identifikation der konkreten Widget-Instanz benötigt wird

  • configurationId: Referenz-ID auf eine konkrete Widget-Konfiguration

  • configuration: Wird keine Referenz verwendet, dann kann die Konfiguration direkt hier angegeben werden.

  • permissions: Berechtigungen, die notwendig sind, damit das Widget in der Oberfläche angezeigt wird (z. B. READ auf /tickets)

  • size: Anzeigegröße des Widgets (large = großes Widget, small = kleines Widget)

GUI-Konfig_Grundlagen_ConfiguredWidget.png

Abb.: Konfiguration eines ConfiguredWidget

WidgetConfiguration

Diese configuration widerum erwartet eine sogenannte WidgetConfiguration. Mit dieser Konfiguration wird das Widget in seiner konkreten Ausprägung konfiguriert:

  • widgetId: ID des Widget, welches angezeigt werden soll

  • title: Der Titeltext des Widgets

  • icon: Das Icon, welches im Header angezeigt werden soll

  • actions: - Aktionen die im Widgetheader angezeigt werden sollen

  • minimized: - minimiert true/false

  • minimizable: - true/false

  • subConfigurationDefinition: - Referenz auf eine Subkonfiguration

  • configuration: - die konkrete Konfiguration des Widgets*

  • contextDependent (optional): abhängig vom Kontext

  • contextObjectDependent (optional): abhängig vom Objekt des Kontextes

  • formDependent (optional): abhängig von einem Formular

  • formDependencyProperties (optional): Formularwerte, von welchem das Widget abhängig ist

GUI-Konfig_Grundlagen_WidgetKonfig.png

Abb.: WidgetConfiguration

Das Widget besitzt noch einmal eine eigene Konfiguration (subConfigurationDefinition). Darin sind die individuellen Konfiguration en der einzelnen Widgets enthalten. So beinhaltet z. B. das Tabellen-Widget an dieser Stelle die konkrete Tabellenkonfiguration:

- Context (z. B. Sidebar, Lane, Explorer, etc.)
    - Content (Liste der Content Widgets)
        - ConfiguredWidget (Widget-Hülle)
            - table widget (z. B. Ticket-Tabelle, Empfohlene FAQ, etc.)
                - tableConfiguration (konkreter Widget-Inhalt)
                    - Konfiguration der Tabellenspalten
            - object-information-card-widget 
              (z. B. Widget "Kontakt Informationen, 
              Lane "Ticket Informationen", Hilfe-Widget etc.)
                - Konfiguration des Avatars und der Rows
            - object-dialog-form-widget
              (z. B. Dialoge "Neues Ticket", "Ticket bearbeiten", etc.)
                - Formular
                    - Seite
                        - Gruppe
                            - Feld 
                            - Feld
                                - [Feld]...
GUI-Konfig_Grundlagen_WidgetSubKonfig.png

Abb.: Tabellenkonfiguration

Tipp

Eine technische Beschreibung zur Konfiguration des KIX-Frontends finden Sie auch unter:https://github.com/kix-service-software/kix-frontend/tree/master/doc

Die HTML-Ansicht dieser Beschreibung können Sie sich unter https://github.com/kix-service-software/kix-frontend/blob/master/doc/doc.tar.gz herunterladen (Klick auf Download-Button).

Konfiguration von Widgets

Ein Widget besteht aus dem Widget selbst 1.png und dem darin anzuzeigenden Inhalt 2.png. Beide besitzen einen eigenen Konfigurationsblock ("configuration":{...} ). Der Konfigurationsblock des Widgets beinhaltet den Konfigurationsblock des Widget-Inhalts.

GUI-Konfig_Widgets_Aufbau.png

Abb.: Widget und Widget-Inhalt am Beispiel des objekt-info-widgets Kontakt Informationen

Im Konfigurationsblock des Widgets sind u. a. definiert:

  • die Eigenschaften und das Verhalten des Widgets

  • Widget-Titel und Widget-Typ

  • Konfiguration des Widget-Inhalts

Im Konfigurationsblock des Widget-Inhalts sind u. a. definiert

  • die im Widget anzuzeigenden Inhalte (Platzhalter, Tabellendefinitionen, Dynamische Felder etc.)

  • Bedingungen für die Anzeige der Inhalte

  • Verlinkungen und Routing-Informationen

  • u. a. m.

Grundkonfiguration eines Widgets

Das nachfolgende Codebeispiel zeigt die Grundstruktur in einem einfachen Objekt-Info-Widget.

{
    //legt eine Instanz des Widgets an 
    "instanceId": "name-der-widget-instanz"
    //Widgetkonfiguration
    "configuration":{ 
        "id": "id-des-widgets",
        "name": "name des Widgets",
        "type": "Widget | TableWidget",
        "widgetId": "table-widget | object-information-card-widget",
        "title": "Translatable#übersetzbarer Widget-Titel",
        "actions": [],
        "subConfigurationDefinition": null,
        //Konfiguration des Widget-Inhalts
        "configuration": {
            //Konfiguration des Avatars
            "avatar": {string | ObjectIcon},
            //Definiert, welche Inhalte pro Zeile angezeigt werden
            "rows": [
                {... s. Widget-Inhalt...}
            ],
        }
        //Eigenschaften/Verhalten des Widgets
        "minimized": false,
        "minimizable": false,
        //Icon in der Titelzeile
        "icon": "kix-icon-man-house",
        "contextDependent": false
    },
   "permissions": [],
   "size": "large"
},

Allgemeine Widget-Attribute

Attribut

Beschreibung

Zum Beispiel

id

Eindeutige ID des Objekts im KIX

name

Name des Objekts bzw. Widgets

type

Typ des Objekts bzw. Widgets

Context | Widget | TabWidget | HelpWidget

widgetID

Art des Widgets

object-information-card-widget | table-widget

title

Widget-Titel im Widget-Header

KIX Platzhalter sind möglich

"Kontakt Informationen"

actions

Ticketaktionen, die initial verfügbar sein sollen

Die Angabe ist optional

"Bearbeiten", "Duplizieren", "neuer Artikel", “CSV-Export” usw.

subConfigurationDefinition

optionale Subkonfiguration

configuration

Widget-Inhalts

  • Integration weiterer Widgets

  • Konfiguration Widget- Inhalt (Avatar/Zeilen bzw. Tabellenkonfiguration)

minimized

Gibt an, ob das Widget minimiert (zusammengeklappt) angezeigt wird.

true | false

minimable

Gibt an, ob das Widget minimiert werden kann.

Wenn true, dann enthält es kleine Pfeilschaltflächen zum Zusammenklappen

true | false

icon

optionale Konfiguration des Icons, welches neben dem Widget-Titel angezeigt wird

  • kix-icon-man-house" | "fas fa-phone-volume"

  • Konfigurationsblock eines ObjectIcons

contextDependent

Steuert die Abhängigkeit vom Kontext

true | false

contextObjectDependent

Steuert die Abhängigkeit vom Objekt des Kontextes.

Damit kann bspw. in Tabellen-Widgets gesteuert werden, dass das Laden der Tabelleninhalte nicht durch die Tabelle sondern durch den Kontext erfolgt

true | false

formDependent

Steuert die Abhängigkeit vom Formular 

true | false

formDependencyPropertys

Formularwerte, von denen das Widget abhängig ist

"DynamicFields.myDynamicFieldName"

Implementierungsarten von Widgets

Widgets können fest oder flexibel implementiert werden.

Fest implementierte Widgets

Diese Widgets sind fest in den entsprechenden Kontext implementiert. Sie besitzen keine zentrale Konfiguration. Ihre Konfiguration ist direkt im Widget angegeben und kann daher in jeder Instanz variieren.

Soll ein generelles Verhalten des Widgets geändert werden, so muss es in allen Instanzen geändert werden. Dadurch ist es aber bspw. auch möglich, in jedem Hilfe-Widget einen anderen Hilfetext anzugeben. Fest implementierte Widgets können jedoch

  • über die Konfiguration des Kontextes ein- oder ausgeblendet werden

  • Durch Kopieren und wieder Einfügen ihrer Instanz auch in andere Sidebars fest implementiert werden. Beispielsweise, um das Widget "Notizen" zusätzlich in den Ticketdetails anzuzeigen.

Ein fest implementiertes Widget ist bspw. das Sidebar-Widget Notizen im Home Dashboard oder das Sidebar-Widget Zeitbuchung.

Instanz eines fest implementierten Widgets (hier: Widget "Zeitbuchung" (KIX Pro)

{
  "instanceId": "ticket-details-simple-time-accounting-widget",
  "configurationId": "ticket-details-simple-time-accounting-widget",
  "configuration": {
    "id": "ticket-details-simple-time-accounting-widget",
    "name": "Simple Time Accounting",
    "type": "Widget",
    "widgetId": "ticket-simple-time-accounting-widget",
    "title": "Translatable#Simple Time Accounting",
    "actions": [],
    "subConfigurationDefinition": null,
    "configuration": null,
    "minimized": false,
    "minimizable": true,
    "icon": "kix-icon-time",
    "contextDependent": false,
    "contextObjectDependent": false,
    "formDependent": false,
    "formDependencyProperties": []
  },
  "permissions": [],
  "size": "large"
},
Flexibel implementierte Widgets

Flexibel implementierte Widgets besitzen eine zentrale Konfiguration in einem eigenen Konfigurationsschlüssel. Sie werden durch Referenz auf ihren Konfigurationsschlüssel implementiert. Dadurch können sie nicht nur in der Sidebar, sondern in nahezu allen Oberflächen flexibel eingebunden werden.

Da diese Widgets eine zentrale Konfiguration besitzen, werden Änderungen an der Konfiguration für alle Instanzen dieses Widgets übernommen - unabhängig vom Kontext , indem das Widget eingebunden ist. Sie besitzen demnach eine größere Konfigurationsvielfalt als fest implementierte Widgets.

Die im Widget anzuzeigenden Inhalte können durch Verwendung von Platzhaltern, Filtern und Bedingungen dynamisch gestaltet werden. Da die Inhalte auf Suchergebnissen basieren und lediglich die Ergebniswerte angezeigt werden, können nahezu alle Informationsarten - unabhängig vom Objekttyp - integriert werden. Es ist damit bspw. möglich:

  • ein Foto (Avatar) der Kontaktperson oder des Kunden anzuzeigen, sofern ein Bild zum Kontakt/zum Kunden hinterlegt ist)

  • die Kontaktadresse für die Anzeige in Online-Kartendiensten zu verlinken,

  • die Werte Dynamischer Felder - unabhängig vom Objekttyp - anzuzeigen

  • auf externe URLs zu verlinken (z. B. zu externen Webseiten, zu Inhalten in einem Web-CMS),

  • E-Mail-Adresse und Telefonnummer zu verlinken, um sie in einem externen Programm zu öffnen,

  • Schnellklicks auf interne Verlinkungen zu setzen (z. B. neues Asset anlegen, zum Kontakt wechseln, etc.)

  • zusätzliche Informationen anzuzeigen, wie die Anzahl zugeordneter Assets oder offener Tickets,

  • KIX-Platzhalter zu verwenden, um Inhalte dynamisch anzuzeigen,

  • bedingte Inhalte anzuzeigen, d. h. die Inhalte nur dann anzuzeigen, wenn bestimmte Eigenschaften am Kontakt- oder Kunden vorhanden sind,

  • u. v. a. m

Flexible Widgets sind bspw.:

  • Kontakt Informationen

  • Tickets zu Assets

  • Empfohlene FAQ

  • Tickets zu Kontakt

  • Offene Kind-Tickets

Beispiel: Flexibel implementierte Widgets in de Sidebar der Ticketdetails

{ ...
   //Sidebar in den Ticketdetails
   "sidebars": [
    {   //Instanz des Widgets Kontakt Informationen
        "instanceId": "ticket-details-contact-card-widget",
        "configurationId": "ticket-details-contact-card-widget",
        "permissions": [],
        "size": "large"
    },
    {   //Instanz des Widgets Empfohlene FAQ
        "instanceId": "ticket-details-suggested-faq-widget",
        "configurationId": "ticket-details-suggested-faq-widget",
        "permissions": [],
        "size": "large"
    },
    {   //Instanz des Widgets Tickets zu Assets
        "instanceId": "ticket-details-affected-asset-tickets",
        "configurationId": "ticket-details-affected-asset-tickets",
        "permissions": [],
        "size": "large"
    },
    {   //Instanz des Widgets Tickets zu Kontakt
        "instanceId": "ticket-details-contact-tickets",
        "configurationId": "ticket-details-contact-tickets",
        "permissions": [],
        "size": "large"
    } 
],

Berechtigungen für Konfigurationen festlegen

Sie können eine Liste von berechtigten Rollen in Konfigurationen speichern, damit

  • bestimmte Informationen nur von autorisierten Mitarbeitern eingesehen werden können

    Zum Beispiel: Anzeige von persönlichen Daten oder Gehaltsinformationen

  • Informationen ausgeblendet werden können, die für eine bestimmte Benutzergruppe nicht erforderlich sind

Wenn Berechtigungsrollen hinterlegt sind, muss der aufrufende Benutzer mindestens einer dieser Rollen zugeordnet sein, damit die Konfiguration verwendet werden kann. Sind keine Berechtigungsrollen angegeben, wird das Standardverhalten für die Anzeige verwendet.

Um Berechtigungsrollen zu definieren, geben Sie innerhalb der entsprechenden Konfiguration die IDs der zugriffsberechtigten Rollen im Parameter roleIds[] an. Im folgenden Beispiel können nur Benutzergruppen mit den Rollen Ticket Reader (ID 4) und Ticket Agent (ID 5) die Informationen sehen

{
  ...
  "roleIDs": [4,5],
  ...
}

Berechtigungsrollen können in den folgenden Konfigurationen gespeichert werden:

  • In Kontextkonfigurationen und bei der Integration von Widgets

    Zum Beispiel: content, lanes, sidebar usw.

    berechtigungsrollen_context.png

    Abb.: Verwendungsmöglichkeiten in den Ticketdetails

    berechtigungsrollen_content.png

    Abb.: Nur Benutzer mit den Rollen "Ticket Reader" und "Ticket Agent" können das Widget Kommunikationshistorie in den Ticketdetails sehen.

    Hinweis

    Widgets, die in einen Kontext integriert sind, haben den Parameter permissions. Mit diesem können Sie festlegen, welche Berechtigungen ein Benutzer haben muss, um das Widget sehen zu können.

    Der Parameter roleIds setzt diese Berechtigungen nicht außer Kraft, sondern ergänzt/spezifiziert sie.

    Das heißt, wenn ein Benutzer die in den permissions angegebene Rolle hat, kann er das Widget sehen. Wenn zusätzliche Berechtigungen (roleIds) definiert sind, die dies verbieten, sieht der Benutzer das Widget nicht. Im Zweifelsfall müssen beide übereinstimmen.

  • In Objekt-Info-Widgets

    berechtigungsrollen_objekt-info-widget.png

    Abb.: Nur Benutzer mit der Rolle "Ticket Agent" sehen die Zeile Verantwortlichkeiten in den Ticketdetails.

    berechtigungsrollen_values.png

    Abb.: Nur Benutzer mit der Rolle "Ticket Agent" können bestimmte Werte sehen.

  • In Tabellen-Widgets

    berechtigungsrollen_tablecolumns.png

    Abb.: Nur Benutzer mit den Rollen "Ticket Reader" und "Ticket Agent" können die Tabellenspalte sehen.