Das Ressourcenpool-Dashboard bietet eine Übersicht über alle Objekte des Ressourcenpools. Gemäß dem Grundprinzip von ConSol CM werden nur die Objekte angezeigt, für die der Bearbeiter, der sich anmeldet und das Dashboard öffnet, Zugangsberechtigungen hat.
Das Ressourcenpool-Dashboard enthält immer die Übersicht über alle Ressourcen (Abschnitt Ressourcen anzeigen oder neu erstellen, siehe folgende Abbildung). Es kann zusätzlich Diagramme und/oder Tabellen enthalten, die Zahlen bzw. Reports über Ressourcen zeigen.
Öffnen Sie das Ressourcenpool-Dashboard, indem Sie im Hauptmenü auf Ressourcenpool (bzw. die in Ihrem CM-System konfigurierte Bezeichnung, siehe Abschnitt Bezeichnungen) klicken:
Abbildung 565: ConSol CM Web Client - Ressourcenpool-Dashboard ohne Reports
Abbildung 566: ConSol CM Web Client - Ressourcenpool-Dashboard mit Reports
Der Ressourcenpool, mit dem Ressourcenpool-Dashboard, ist eine neue Funktion, die mit CM-Version 6.10 eingeführt wurde. Nach einem Systemupdate von einer Version vor 6.10 wird allerdings nur der Bereich Ressourcen anzeigen oder neu erstellen angezeigt (sofern die Lizenz für CM.Resource Pool vorhanden ist). Alle Reports des Ressourcenpool-Dashboards (Chart- und/oder Tabellen-Widgets) müssen manuell konfiguriert werden.
Die Konfiguration von Reports mit Grafiken und Tabellen (oder beidem) für das Ressourcenpool-Dashboard funktioniert nach dem gleichen Prinzip wie die Konfiguration des Web Client Dashboards (siehe Abschnitt Seitenanpassung für das Web Client Dashboard).
Das Ressourcenpool-Dashboard wird in der Seitenanpassung konfiguriert.
Melden Sie sich als admin an, öffnen Sie die Seite Ressourcenpool und wählen Sie im Hauptmenü Seitenanpassung aktivieren. Neben anderen Attributen, die für das Dashboard nicht relevant sind und im Abschnitt Seitenanpassung erklärt werden, können die folgenden, für das Ressourcen-Dashboard relevanten, Elemente konfiguriert werden (d. h. die Attribute können gesetzt werden). Jedes der drei Elemente wird durch eine Unterstruktur in der Baumstruktur der Seitenanpassung dargestellt.
Die folgende Abbildung zeigt ein Beispiel für eine Baumstruktur der Seitenanpassung mit den entsprechenden Unterstrukturen für das Ressourcenpool-Dashboard. Eine detaillierte Beschreibung finden Sie in den folgenden Abschnitten.
Abbildung 567: ConSol CM Web Client - Unterstruktur der Seitenanpassung für die Konfiguration des Ressourcenpool-Dashboards
Das übergreifende Layout des gesamtes Ressourcenpool-Dashboards wird mit dem Seitenanpassungsattribut widgetsGrid / resourceDashboard definiert.
Attribute:
Die folgende Abbildung zeigt die Organisation eines Beispielrasters und seine Darstellung in der Seitenanpassung. Dies ist ein einfaches Beispiel mit nur einem Chart. Kompliziertere Beispiele werden für das Web-Client-Dashboard gezeigt, siehe Abschnitt Seitenanpassung für das Web Client Dashboard.
Abbildung 568: Organisation eines Beispielrasters (nur 1 Zeile, 1 Spalte) für die Seitenanpassung des Ressourcenpool-Dashboards
Der Wert des entsprechenden Attributs layout wäre in diesem Fall:
Wenn Sie mit nur einem Chart oder einer Tabelle arbeiten, ist es nicht erforderlich, mehr als eine Spalte anzugeben, da die komplette Breite der Seite mit dem Widget gefüllt wird.
Jedes Chart-Widget und jedes Tabellen-Widget hat ein Konfigurationsskript, das die Daten für den Chart bzw. die Tabelle bereitstellt (z. B. Herstellen einer Verbindung zur Datenbank, Ausführen der SQL-Statements, mit denen die Daten abgerufen werden, und korrektes Anzeigen der Daten im nächsten Schritt). Dabei handelt es sich um ein Groovy-Skript, das im Admin-Tool-Bereich Skripte und Templates hinterlegt ist und durch seinen Namen referenziert wird. Das Skript muss den Typ Seitenanpassung haben. Wählen Sie das Widget im Definitionsbereich der Seitenanpassung aus und tragen Sie den Namen des Skripts ein:
Abbildung 569: ConSol CM Web Client - Definition des Skripts für ein Chart-Widget
Abbildung 570: ConSol CM Admin Tool - Admin-Tool-Skript für ein Widget des Ressourcenpool-Dashboards
Im Konfigurationsskript des Widgets werden die Statements, mit denen die erforderlichen Daten aus dem ConSol CM-System abgerufen werden, und das Layout des Widgets definiert. Die Ausführung dieses Groovy-Skripts ist ein Kernstück der Anpassung. Das Skript muss eine Map mit Variablen zurückgeben, die zu den definierten Widget-Eigenschaften passen.
Das Skript überschreibt die in der Seitenanpassung angegebenen Konfigurationsdaten. Die Werte werden nicht zusammengeführt!
Das Skript überschreibt alle in der Seitenanpassung gesetzten Werte der Widget-Attribute. Stellen Sie daher sicher, dass das gewünschte Attribut nicht mittels Skript gesetzt wird, wenn Sie die Attribute in der Seitenanpassung definieren möchten.
Ein Skript, das mit einem Widget verknüpft ist, wird normalerweise mit den Berechtigungen des Benutzers (= Bearbeiters) ausgeführt. Manchmal müssen allerdings Werte verwendet werden, die im Kontext des Bearbeiters nicht verfügbar sind, z. B. eskalierte Tickets (aller Bearbeiter) in einer bestimmten Queue. Um das Skript mit Administratorberechtigungen auszuführen, markieren Sie die Checkbox mit Administratorrechten starten. Denken Sie daran, dass die Ergebnisse der Java- oder Groovy-Methoden, mit denen die Daten abgerufen werden, je nach Kontext unterschiedlich sein können. Die Methode ticketService.getAll() gibt zum Beispiel nur Tickets zurück, für die der aktuelle Bearbeiter mindestens Leseberechtigungen hat. Wenn die gleiche Methode mit Administratorberechtigungen ausgeführt wird, gibt sie aber alle im System vorhandenen Tickets zurück.
Die Chart-Darstellung des Ressourcenpool-Dashboards basiert auf der Highcharts-Bibliothek. Für Chart-Widgets muss das Admin-Tool-Skript die zu setzenden Attribute als HashMap zurückgeben (siehe Return-Statement im nachfolgenden Code-Beispiel).
Die Tabellendarstellung im Ressourcenpool-Dashboard basiert auf der Datatables-Bibliothek. Für Tabellen-Widgets muss das Admin-Tool-Skript die zu setzenden Attribute daher als HashMap zurückgeben.
Bitte beachten Sie, dass sehr komplexe Skripte die Systemleistung beeinträchtigen können!
Das folgende Beispiel zeigt das Skript ResourceDashboardOverview1.groovy.
import com.consol.cmas.common.security.permission.*;
import com.consol.cmas.common.model.resource.meta.*;
import com.consol.cmas.common.model.resource.*;
def dashboard = [:];
def categories = [];
def localeEN = [];
def localeDE = [];
def series = [];
// non empty resource groups with readable, active and internal resource types
resourceGroupService.all.each { resourceGroup ->
def resourceTypes = [];
if (resourceGroup.enabled) {
resourceGroup.resourceTypes.each { name, resourceType ->
if (resourceType.enabled) {
if (resourceType.accessMode != ResourceAccessMode.ON_THE_FLY) {
if (authorizationServiceImpl.isAccessGranted(resourceType, [ResourceTypePermissionType.READ] as Set)) {
resourceTypes.add(resourceType);
}
}
}
}
};
if (resourceTypes) {
Collections.sort(resourceTypes);
dashboard.put(resourceGroup, resourceTypes);
categories.add('_(\'' + resourceGroup.name + '\')');
}
};
// add localization
dashboard.each { resourceGroup, resourceTypes ->
def resourceGroupEN = localizationService.getLocalizedProperty(ResourceGroup.class, "name", resourceGroup.getId(), Locale.ENGLISH);
def resourceGroupDE = localizationService.getLocalizedProperty(ResourceGroup.class, "name", resourceGroup.getId(), Locale.GERMAN);
if (resourceGroupEN) {
localeEN.add("${resourceGroup.name}:${resourceGroupEN}" as String);
}
if (resourceGroupDE) {
localeDE.add("${resourceGroup.name}:${resourceGroupDE}" as String);
}
resourceTypes.each { resourceType ->
def resourceTypeEN = localizationService.getLocalizedProperty(ResourceType.class, "name", resourceType.getId(), Locale.ENGLISH);
def resourceTypeDE = localizationService.getLocalizedProperty(ResourceType.class, "name", resourceType.getId(), Locale.GERMAN);
if (resourceTypeEN) {
localeEN.add("${resourceType.name}:${resourceTypeEN}" as String);
}
if (resourceTypeDE) {
localeDE.add("${resourceType.name}:${resourceTypeDE}" as String);
}
};
};
// prepare data
Map<Long, Long> counters = resourceService.getResourceTypesIdsToActiveResourcesCountersMapping();
dashboard.eachWithIndex { resourceGroup, resourceTypes, index ->
resourceTypes.each { resourceType ->
def count = counters.get(resourceType.id);
if (count != null && count > 0) {
def data = [null] * categories.size;
data[index] = count;
series.add("{ name: _('${resourceType.name}'), data:[${data.join(',')}] }" as String);
}
};
};
return [
visible: "true",
chart: "{ type: 'column' }",
title: "{ text: 'Overview' }",
legend: "{ layout: 'vertical', align: 'right', verticalAlign: 'top', floating: true, maxHeight: 200, backgroundColor: 'white', borderColor: '#CCC', borderWidth: 1, shadow: false, navigation: { animation: true } }",
xAxis: "{ categories: [${categories.join(',')}] }" as String,
yAxis: "{ allowDecimals: false, min: 0, title: { text: 'Resources' }, stackLabels: { enabled: true, style: { fontWeight: 'bold', color: 'gray' } } }",
tooltip: "{ headerFormat: '<b>{point.key}: </b>', pointFormat: '{point.stackTotal}<br><span style=\"color:{series.color}\">?</span> {series.name}: {point.y}'",
plotOptions: "{ column: { stacking: 'normal', dataLabels: { enabled: true, zIndex: 5, color: 'white', style: { textShadow: '0 0 3px black' } } } }",
series: "[ ${series.join(',')} ]" as String,
localization: "{ de: {${localeDE.join(',')}}, en: {${localeEN.join(',')}}}" as String
];
Code-Beispiel 88: ResourceDashboardOverview1.groovy
Das folgende Chart wird mit dem obigen Skript definiert.
Abbildung 571: Beispiel für ein Chart-Widget
Es gibt die gleichen Konfigurationsattribute wie für das Web Client Dashboard. Siehe Abschnitt Konfigurationsattribute für Widgets.