Manchmal kann es erforderlich sein, dem Bearbeiter, der gerade mit ConSol CM arbeitet, Meldungen oder Benachrichtigungen anzuzeigen. Meldungen können Sie für Informationen über den Prozess oder Änderungen, die ein Bearbeiter bei der Arbeit an einem Objekt vornimmt, verwenden. Um den Bearbeiter über Ereignisse zu informieren, die nicht das aktuelle Objekt betreffen, können Sie eine Systembenachrichtigung erzeugen.
In den folgenden Abschnitten erfahren Sie, wie Sie Meldungen und Benachrichtigungen für den Web Client implementieren können.
Die wichtigste Methode, die für die Anzeige von Meldungen im Web Client verwendet werden kann, ist addValidationError() des Objekts workflowApi. Sie kann in Workflow-Skripten oder Skripten des Typs Workflow, die aus dem Workflow aufgerufen aber im Admin Tool gespeichert werden, verwendet werden.
Alternativ zu den in diesem Handbuch beschriebenen Methoden können Fehlermeldungen auch über das Action Framework implementiert werden. Weitere Informationen hierzu finden Sie im ConSol CM Administratorhandbuch.
Die Stelle, an der die Meldungen angezeigt werden, hängt von den Parametern ab, die an die Methode übergeben werden. Es gibt zwei Möglichkeiten:
Im folgenden Beispiel wird eine einfache Fehlermeldung angezeigt, wenn der Bearbeiter auf eine Workflow-Aktivität klickt, um ein Ticket zu schließen, das noch offene Child-Tickets hat. Der Text ist nicht lokalisiert, er kann also nicht in mehrsprachigen Umgebungen verwendet werden.
// only when all child tickets are closed, the parent ticket (this ticket) can be closed
import com.consol.cmas.common.model.ticket.Ticket
Ticket ticket = workflowApi.getTicket()
List<Ticket> ch_tickets = workflowApi.getChildTickets()
Boolean all_closed = true
ch_tickets.each() { ch_tic ->
Boolean closed = ch_tic.getScopeInfo().isClosedOrDeleted()
log.info 'Child Ticket {$ch_tic.id} is ' + closed
if (closed == false) {
all_closed = false
}
}
def text = "Please close all child tickets first. Then you can close the ticket";
if (!all_closed) {
workflowApi.addValidationError("INFO",text)
} else {
log.info "Ticket ${ticket.id} was closed."
}
Code-Beispiel 95: Prüfen, ob alle Child-Tickets geschlossen sind und dem Bearbeiter eine Meldung anzeigen, nicht lokalisierte Version
Um den im Web Client angezeigten Text zu lokalisieren, können Sie mit Bezeichnungen arbeiten. Die Bezeichnungen werden im Admin Tool in der Navigationsgruppe Globale Konfiguration, Navigationselement Bezeichnungen definiert. Eine detaillierte Einführung zum Thema Bezeichnungen finden Sie im ConSol CM Administratorhandbuch.
Im folgenden Beispiel wird eine Fehlermeldung angezeigt, wenn der Bearbeiter auf eine Workflow-Aktivität klickt, um ein Ticket zu akzeptieren, obwohl ihm schon zu viele offene Tickets zugewiesen sind. Der auf der GUI angezeigte Text besteht aus zwei Bestandteilen:
Im Kommentar ist die alternative Lösung mit einer einfachen Textmeldung dargestellt.
// Engineer can only accept ticket if he does not have too many tickets already
def curr_eng = workflowApi.currentEngineer
def max_tics = configurationService.getValue("custom-servicedesk","engineer.max.open.tickets")
// look for open tickets of current engineer
def engs = []
engs.add(curr_eng.id)
TicketCriteria tic_crit = new TicketCriteria()
tic_crit.engineerCriteria = TicketCriteria.EngineerCriteria.assigned(engs as Set)
tic_crit.status = TicketCriteria.Status.OPEN
List<Ticket> open_eng_tics = ticketService.getByCriteria(tic_crit)
def tic_number = open_eng_tics.size
def loc = engineerService.currentLocale
if (tic_number > max_tics) {
log.info 'Too many tickets for engineer ' + engineerService.current + '. Current number is ' + tic_number
// get text from labels defined in AT:
def infoText1 = messageProviderService.getMessage("info.wfl.toManyTicketsError1", loc)
def infoText2 = messageProviderService.getMessage("info.wfl.toManyTicketsError2", loc) + max_tics
// alternative solution: workflowApi.addValidationError("INFO","You have too many tickets (" + tic_number + ") already, so you cannot accept another ticket. Maximum allowed number is " + max_tics)
workflowApi.addValidationError("INFO",infoText1 + " " + infoText2)
} else {
ticket.setEngineer(curr_eng)
}
workflowApi.reinitializeTrigger("defaultScope/Service_Desk/TimeTriggerDesiredDeadline")
Code-Beispiel 96: Skript der Aktivität "Neues Ticket (Ticket annehmen)", Arbeitsbelastung des Bearbeiters wird überprüft
Sie können auch mit lokalisierten Werten arbeiten, indem Sie die Spracheinstellung, wie im folgenden Beispiel gezeigt, prüfen. Der Hauptunterschied zwischen diesem und dem vorherigen Beispiel ist, dass die Bezeichnungen einfach im Admin Tool von einem CM-Administrator geändert werden können. Im Gegensatz dazu kann der Text bei der in diesem Abschnitt gezeigten Lösung nur durch die Installation einer neuen Version des Workflows geändert werden. Sie können entscheiden, welche Lösung am besten zu Ihren Anforderungen passt.
// only when all child tickets are closed, the parent ticket (this ticket) can be closed
import com.consol.cmas.common.model.ticket.Ticket
Ticket ticket = workflowApi.getTicket()
List<Ticket> ch_tickets = workflowApi.getChildTickets()
Boolean all_closed = true
ch_tickets.each() { ch_tic ->
Boolean closed = ch_tic.getScopeInfo().isClosedOrDeleted()
log.info 'Child Ticket {$ch_tic.id} is ' + closed
if (closed == false) {
all_closed = false
}
}
def text
def mylocale = engineerService.getCurrentLocale().toString()
log.info "LOCALE IS NOW $mylocale"
if (mylocale.startsWith('en')) {
text = "Please close all child tickets first. Then you can close the ticket";
} else if (mylocale.startsWith('de')) {
text= "Bitte erst alle Child Tickets abschließen. Dann können Sie das Ticket abschließen"
} else { //default
text = "Please close child tickets."
}
if (!all_closed) {
workflowApi.addValidationError("INFO",text)
} else {
println "Ticket ${ticket.id} was closed."
}
Code-Beispiel 97: Prüfen, ob alle Child-Tickets geschlossen sind und dem Bearbeiter eine Meldung anzeigen
Beim Ausfüllen eines ACFs können auch Meldungen angezeigt werden, die sich auf einzelne Felder beziehen. Dadurch können Sie prüfen, ob ein Datenfeld korrekt ausgefüllt wurde, und eine Meldung anzeigen, wenn ein Wert fehlt oder falsch ist.
Das folgende Beispiel zeigt die allgemeine Syntax, die für derartige Validierungsmeldungen verwendet wird. Wenn ein Ticketfeld angegeben ist, wird die Meldung neben diesem Feld im ACF angezeigt.
workflowApi.addValidationError(ticket.getField("GROUP_NAME", "FIELD_NAME"), "Value is not valid! Please enter a new one.")
Die Benachrichtigungen werden angezeigt, wenn der Bearbeiter im Kopfbereich des Web Clients neben dem Link zum Benutzerprofil auf das Glocken-Symbol klickt. Wenn der Benutzer im Browser Benachrichtigungen erlaubt, können sie auch in der Windows-Taskleiste erscheinen.
Abbildung 179: ConSol CM Web Client - Benachrichtigung mit Ticket-Link
Wenn eine E-Mail zu einem Ticket eintrifft, können Sie ein Overlay zum Ticket-Icon hinzufügen und dem zugewiesenen Bearbeiter eine Benachrichtigung senden. Zu diesem Zweck brauchen Sie nur einen Mail-Trigger hinzufügen, der mit einer automatischen Aktivität verbunden ist, in der das Overlay hinzugefügt und die Benachrichtigung gesendet wird. Die Benachrichtigung kann einen Link zum Ticket enthalten.
Das Skript für die Aktivität könnte wie folgt aussehen:
def myEngineer = workflowApi.engineer.name
def myTicket = workflowApi.ticket.name
if (myEngineer) {
broadcasterService.notificationBuilder().
withSenderName("System").
withMessage("Email received in your ticket").
withNature("INFO").
withOrigin(myTicket).
withOriginContext("TICKET").
addRecipientName(myEngineer).
build().
send();
}
Code-Beispiel 98: Workflow-Skript zum Senden einer Benachrichtigung