Skripte des Typs Widget
Mit Widget-Skripten werden Widgets, die auf Dashboards angezeigt werden, implementiert (sieheDashboards). Sie implementieren die Logik, mit der die im Widget gezeigten Daten abgerufen und vorbereitet werden. Ein Widget-Skript muss die Daten im für den jeweiligen Widget-Typ erforderlichen Format zurückgeben.
Widget-Skripte werden für folgende Widget-Typen verwendet:
Für Widget-Skripte gelten folgende allgemeine Prinzipien:
- Wenn Sie Attributwerte sowohl im Widget-Skript als auch in der Seitenanpassung setzen, überschreiben die im Skript gesetzten Werte die in der Seitenanpassung eingegebenen Werte.
- Die Ergebnisse der Methoden, die Daten abrufen, hängen vom Kontext ab. Standardmäßig wird das Skript mit Benutzerberechtigungen ausgeführt. Wenn Sie Daten benötigen, die im Benutzerkontext nicht verfügbar sind, müssen Sie das Skript mit Administratorberechtigungen ausführen (Checkbox mit Administratorrechten starten in der Seitenanpassung).
Beispiel: Sie möchten die Anzahl der eskalierten Vorgänge aller Bearbeiter anzeigen. Deshalb muss das Skript alle Vorgänge abrufen und nicht nur die Vorgänge, die der aktuelle Benutzer sehen darf. - Das Widget-Skript wird jedes Mal ausgeführt, wenn die Seite mit dem entsprechenden Widget geöffnet wird. Komplexe Skripte können die Systemperformance beeinträchtigen. Wenn komplexe Skripte in Verwendung sind, wird empfohlen, das Dashboard in Tabs zu unterteilen und solche Widgets in einem Tab zu platzieren, der nicht direkt geöffnet wird.
Die folgenden Abschnitte beschreiben die Rückgabewerte der unterschiedlichen Widget-Typen.
Diagramm-Widgets
Diagramm-Widgets basieren auf der Bibliothek Highcharts. Das Skript muss eine HashMap mit den Attributen, die gesetzt werden sollen, zurückgeben. Eine detaillierte Beschreibung der verfügbaren Attribute finden Sie in Diagramm-Widgets.
Das folgende Beispiel zeigt das Skript, das für das Standarddiagramm-Widget, das die Anzahl der Vorgänge in der aktuellen Sicht anzeigt, verwendet wird.
import com.consol.cmas.common.model.ticket.*;
import com.consol.cmas.common.model.ticket.view.*;
import java.util.*;
import java.util.Map.Entry;
if (viewId == -1) {
return [visible: 'false']
}
def engineerLocale = engineerService.getCurrentLocale()
def view = viewService.getById(viewId)
def viewName = localizationService.getLocalizedProperty(View.class, "name", viewId, engineerLocale)
ViewCriteria allCriteria = new ViewCriteria(view,
ViewAssignmentParameter.allTickets(),
ViewGroupParameter.allTickets(),
new ViewOrderParameter())
def allTickets = ticketService.getCountForView(allCriteria)
ViewCriteria ownCriteria = new ViewCriteria(view,
ViewAssignmentParameter.allTickets(engineerService.getCurrent()),
ViewGroupParameter.onlyOwnTickets(),
new ViewOrderParameter())
def ownTickets = ticketService.getCountForView(ownCriteria)
ViewCriteria unassignedCriteria = new ViewCriteria(view,
ViewAssignmentParameter.allUnassignedTickets(),
ViewGroupParameter.onlyUnassignedTickets(),
new ViewOrderParameter())
def unassignedTickets = ticketService.getCountForView(unassignedCriteria)
def data = []
data.add("{name: _('all'), data:[${allTickets}]}" as String)
data.add("{name: _('own'), data:[${ownTickets}]}"as String)
data.add("{name: _('unassigned'), data:[${unassignedTickets}]}"as String)
return [series: "[${data.join(',')}]" as String,
visible: 'true',
chart: "{type: 'column'}", title: "{text: '${viewName}'}" as String,
tooltip:"{headerFormat:''}" ,
localization:"de: {all:'Alle',own:'Eigene',unassigned:'Unzugewiesene'},"+ "en: {all:'All', own:'Own', unassigned: 'Unassigned'}"];
Code-Beispiel 13: Skript für das Standarddiagramm-Widget ticketsInViewDataWidget.groovy
Das folgende Beispiel zeigt das Skript eines Trichter-Widgets. Zur Veranschaulichung werden statische Daten verwendet.
return [title: "{text: _('title')}",
chart: "{type: 'funnel', \
marginLeft: '50', \
marginRight: '150'}",
plotOptions: "{series:{ height: '90%', \
width: '85%', \
neckWidth: '20%', \
neckHeight: '20%', \
dataLabels: {enabled:'true', \
format: '<b>{point.name}</b> ({point.y:,.0f})', \
softConnector: 'true'}}}",
visible: "true",
series: "[{name: _('users'), \
data: [[_('visits') , 15654], \
[_('downloads'), 4064], \
[_('requests') , 1987]]}]",
localization: "de: {title: 'Vertriebstrichter', \
users: 'Individuelle Benutzer', \
visits: 'Seitenaufrufe', \
downloads: 'Downloads', \
requests: 'Anfrage Preisliste'}, \
en: {title: 'Salesfunnel', \
users: 'Unique users', \
visits: 'Page visits', \
downloads: 'Downloads', \
requests: 'Requests for price list'}"
]
Code-Beispiel 14: Skript für ein Vertriebstrichterdiagramm mit Demo-Daten
KPI-Widgets
KPI-Widgets basieren auf der Bibliothek jquery-kpiwidget. Das Skript muss eine HashMap mit den Attributen, die die KPI-Darstellung definieren, zurückgeben. Eine detaillierte Beschreibung der verfügbaren Attribute finden Sie in KPI-Widgets.
import com.consol.cmas.common.model.ticket.*
import java.util.*
import com.consol.cmas.common.model.DateRange
TicketCriteria crt = new TicketCriteria()
def to_date = new Date()
def from_date = to_date - 7
def range = new DateRange(from_date,to_date)
crt.setCreationDateRange(range)
// crt.setStatus(TicketCriteria.Status.OPEN)
ticketcount = ticketService.getByCriteria(crt).size()
switch (ticketcount) {
case 0..25:
trendline = 'down'
break
case 26..50:
trendline = 'flat'
break
default:
trendline = 'up'
}
return[value: ticketcount as String, trend: trendline, visible: 'true']
Code-Beispiel 15: Skript für ein KPI-Widget, mit dem die Anzahl der in der letzten Woche geöffneten Vorgänge berechnet wird
Tabellen-Widgets
Tabellen-Widgets basieren auf der Bibliothek Datatables. Das Skript muss eine HashMap mit den Attributen, die gesetzt werden sollen, zurückgeben. Eine detaillierte Beschreibung der verfügbaren Attribute finden Sie in Tabellen-Widgets.
// provide some dummy data for display
def rawdata = [
[firstname:'Homer' , lastname:'Simpson' , title:'Nuclear disaster' , level:'3' , hired:'25.03.1989'],
[firstname:'Zaphod' , lastname:'Beeblebrox' , title:'President of the Galaxy', level:'0' , hired:'12.09.1979'],
[firstname:'Sheldon' , lastname:'Cooper' , title:'Mad scientist' , level:'321', hired:'01.04.2006'],
[firstname:'Robin' , lastname:'Scherbatsky', title:'Anchorwoman' , level:'25' , hired:'10.09.2004'],
[firstname:'Elmer' , lastname:'Fudd' , title:'Duck hunter' , level:'1' , hired:'15.12.1962'],
[firstname:'Eric' , lastname:'Cartman' , title:'Pupil' , level:'10' , hired:'23.02.1995'],
[firstname:'Mickey' , lastname:'Mouse' , title:'Private investigator' , level:'111', hired:'04.11.1932'],
[firstname:'Wilma' , lastname:'Flintstone' , title:'Housewife' , level:'64' , hired:'07.01.1964'],
[firstname:'Charlie' , lastname:'Harper' , title:'Composer' , level:'12' , hired:'16.07.2001'],
[firstname:'Daenerys', lastname:'Targaryen' , title:'Mother of dragons' , level:'238', hired:'08.05.2010'],
[firstname:'Lara' , lastname:'Croft' , title:'Tomb Raider' , level:'239', hired:'10.12.1991'],
[firstname:'Henry' , lastname:'Jones' , title:'Archeologist' , level:'109', hired:'08.06.1942']
]
// prepare the data for display
def tabledata = []
rawdata.each { element ->
tabledata.add("""
{'firstname': '${element['firstname']}',
'lastname' : '${element['lastname']}' ,
'jobtitle' : '${element['title']}' ,
'expertise': '${element['level']}' ,
'hiredate' : '${element['hired']}' }
""")
}
// return the table information including the data
return [
"columns": """[
{title: 'First name' , data: 'firstname'},
{title: 'Last name' , data: 'lastname' },
{title: 'Job title' , data: 'jobtitle' },
{title: 'Expertise level', data: 'expertise'},
{title: 'Hire date' , data: 'hiredate' }
]""",
"options": """{
'order': []
}""",
"data": "[${tabledata.join(",")}]" as String
]
Code-Beispiel 16: Skript für Tabellen-Widget