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:

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