Ressourcenaktionen sind Teil des ConSol CM Action Frameworks. Ressourcenaktionen sind Aktionen, die für eine Ressource ausgeführt werden, d. h. für ein im Ressourcenpool gespeichertes Objekt. Die Aktionen können automatisch vom System durchgeführt werden oder manuell von einem Bearbeiter mit den entsprechenden Berechtigungen angestoßen werden. Mögliche Anwendungsfälle für Ressourcenaktionen sind beispielsweise:
Sie können folgende Typen von Ressourcenaktionen verwenden:
Beachten Sie, dass nur Bearbeiter, die mindestens eine Rolle mit den folgenden Zugangsberechtigungen für den entsprechenden Ressourcentyp haben, die Ressourcenaktionen verwenden dürfen, d. h. nur bei ihnen werden die Aktivitäten im Web Client angezeigt!
Abbildung 516: ConSol CM Web Client - Ressourcenaktion (auf der Ressourcenseite)
Ressourcenaktionen werden als Groovy-Skripte definiert, die im Abschnitt Skripte und Templates des Admin Tools gespeichert werden.
Die Ausführung von Ressourcenaktionen kann mit Bedingungsskripten gesteuert werden, d. h. Sie können ein Bedingungsskript implementieren, das vor der Ressourcenaktion selber ausgeführt wird. Das Ausführungsscript wird nur ausgeführt, wenn das Bedingungsskript true zurückgibt.
Es gibt also zwei Arten von Skripten, mit denen Sie im Zusammenhang mit ConSol CM-Ressourcenaktionen arbeiten:
Führen Sie zur Implementierung einer Ressourcenaktion folgende drei Schritte durch:
In den folgenden Abschnitten sind diese drei Schritte detailliert beschrieben.
Erstellen Sie ein neues Admin-Tool-Skript des Typs Ressourcen-Aktion. Falls erforderlich, erstellen Sie ein anderes Skript des Typs Ressourcen-Bedingung.
Eine detaillierte Beschreibung der Admin-Tool-Skripte finden Sie im Abschnitt Admin-Tool-Skripte.
Abbildung 517: ConSol CM Admin Tool - Ressourcen-Ausführungsskripte im Bereich Skripte
// this script creates a new ticket for the resource from which the activity is executed, i.e., creates new ticket and links it to resource
// resource - ticket relation must be configured beforehand!
import com.consol.cmas.common.model.ticket.Ticket
import com.consol.cmas.common.model.customfield.Unit
import com.consol.cmas.common.model.resource.*
import com.consol.cmas.common.service.resource.*
import com.consol.cmas.common.model.ticket.Queue
import com.consol.cmas.common.model.resource.meta.*
println 'CreateTicketForResource.groovy started ...'
Ticket newtic = new Ticket()
Queue qu = queueService.getByName("ServiceDesk")
newtic.setQueue(qu)
newtic.setSubject("New Ticket for Resource: " + resource.getId())
newtic.set("helpdesk_standard.priority","low")
// use main contact person of the resource as main contact for the ticket
Unit maincont = new Unit()
def crit = new ResourceRelationWithTargetUnitCriteria()
crit.setResource(resource)
List<ResourceRelationWithTargetUnit> cont_list = resourceRelationService.getByCriteria(crit)
if (cont_list.size() == 0) {
//cmweb.rp.resource.action.no_contact_set has to be configured as label in the AT
return actionScriptResultFactory.getPostAction(PostActionType.FAILURE, "cmweb.rp.resource.action.no_contact_set")
} else {
def cont_rel = cont_list[0]
maincont = cont_rel.getTargetUnit()
}
ticketService.createWithUnit(newtic,maincont)
println 'New Ticket created for resource with ID' + resource.getId()
// link ticket to resource
def resRelationDefCriteria = new ResourceRelationDefinitionCriteria()
resRelationDefCriteria.addDefinitionName("PC_Desktop_to_Ticket_Relation")
def s_res_type = resource.getResourceType()
resRelationDefCriteria.addSourceResourceType(s_res_type)
resRelationDefCriteria.addTargetQueue(qu)
//log.info "resRelationDefCriteria = " + resRelationDefCriteria
//log.info "resRelationDefCriteria.definitionName = " + resRelationDefCriteria.getDefinitionsNames()
def resRelationDef = resourceRelationDefinitionService.getByCriteriaUniqueResult(resRelationDefCriteria)
def resRelation = new ResourceTicketRelation(resRelationDef, resource, newtic)
// log.info "resRelation" + resRelation
resourceRelationService.create(resRelation)
Code-Beispiel 77: Ressourcen-Ausführungsskript
Öffnen Sie zum Erstellen, Editieren oder Löschen von Ressourcenaktionen das Navigationselement Aktionen der Navigationsgruppe Ressourcen im Admin Tool.
Um eine neue Aktion zu erstellen oder hinzuzufügen, klicken Sie auf den Button Hinzufügen und geben Sie die erforderlichen Daten im Pop-up-Fenster ein.
Abbildung 518: ConSol CM Admin Tool - Erstellen einer Ressourcenaktion
Speichern Sie die Aktion. Danach können Sie sie Ressourcentypen zuweisen. Siehe folgenden Schritt.
Um bereits definierte Ressourcen-Ausführungs- und/oder Ressourcen-Bedingungsskripte den Ressourcentypen zuzuweisen, müssen die entsprechenden manuellen oder automatischen Aktionen einem Ressourcentyp zugewiesen werden. Öffnen Sie das Navigationselement Datenmodelle der Navigationsgruppe Ressourcen im Admin Tool. Wählen Sie den Ressourcentyp, den Sie editieren möchten, und klicken Sie auf den Button Bearbeiten, um das Pop-up-Fenster zu öffnen, in dem Sie die Ressourcenaktionen zuweisen können. Eine Aktion kann nur ein Ressourcen-Ausführungsskript enthalten oder sowohl ein Ressourcen-Ausführungsskript als auch ein Ressourcen-Bedingungsskript.
Im folgenden Beispiel (nächste Abbildung) wird eine manuelle Ressourcenaktion dem Ressourcentyp HP_Printer zugewiesen.
Abbildung 519: ConSol CM Admin Tool - Zuweisen von manuellen Ressourcenaktionen zu einem Ressourcentyp
Sie können Ressourcenaktionen folgender Aktionstypen zuweisen:
Als Bearbeiter (Benutzer) sind die beiden Ressourcenaktionstypen relevant für Sie, die als Aktivitäten im Web Client angezeigt werden:
Die Aktionen Löschen, Aktualisieren und Erzeugen laufen im Hintergrund.
Eine allgemeine Einführung in die Grundprinzipien, Klassen und Methoden für Ausführungs- und Bedingungsskripte finden Sie im Abschnitt Skripte für das Action Framework.
Anwendungsfall: Der Bearbeiter soll in der Lage sein, ein neues ServiceDesk-Ticket direkt auf der Ressourcenseite eines PCs zu erstellen. Das neue Ticket soll mit der Ressource (PC) verknüpft sein. Der Hauptkontakt des neuen ServiceDesk-Tickets soll die für den PC verantwortliche Person sein. Dies wird als Ressource-Kontakt-Relation im Ressourcentyp PC_Desktop implementiert. Um die Ressourcenaktion zu implementieren, führen Sie folgende Schritte durch.
Schreiben Sie das Ressourcen-Ausführungsskript:
// this script creates a new ticket for the resource from which the activity is executed, i.e., creates new ticket and links it to resource
// resource - ticket relation must be configured beforehand!
import com.consol.cmas.common.model.ticket.Ticket
import com.consol.cmas.common.model.customfield.Unit
import com.consol.cmas.common.model.resource.*
import com.consol.cmas.common.service.resource.*
import com.consol.cmas.common.model.ticket.Queue
import com.consol.cmas.common.model.resource.meta.*
import com.consol.cmas.core.server.service.action.*
println 'CreateTicketForResource.groovy started ...'
Ticket newtic = new Ticket()
Queue qu = queueService.getByName("ServiceDesk")
newtic.setQueue(qu)
def subj = resource.get("PC_Desktop_Fields_basic.name")
// newtic.setSubject("New Ticket for Resource: " + resource.getId())
newtic.setSubject("New Ticket for Resource: " + subj)
newtic.set("helpdesk_standard.priority","low")
// use main contact person of the resource as main contact for the ticket
Unit maincont = new Unit()
def crit = new ResourceRelationWithTargetUnitCriteria()
crit.setResource(resource)
List<ResourceRelationWithTargetUnit> cont_list = resourceRelationService.getByCriteria(crit)
if (cont_list.size() == 0) {
workflowApi.addValidationError("ERRROR","No contact set!")
} else {
def cont_rel = cont_list[0]
maincont = cont_rel.getTargetUnit()
}
ticketService.createWithUnit(newtic,maincont)
println 'New Ticket created for resource with ID' + resource.getId()
// link ticket to resource
def resRelationDefCriteria = new ResourceRelationDefinitionCriteria()
resRelationDefCriteria.addDefinitionName("PC_Desktop_to_Ticket_Relation")
def s_res_type = resource.getResourceType()
resRelationDefCriteria.addSourceResourceType(s_res_type)
resRelationDefCriteria.addTargetQueue(qu)
log.info "resRelationDefCriteria = " + resRelationDefCriteria
log.info "resRelationDefCriteria.definitionName = " + resRelationDefCriteria.getDefinitionsNames()
def resRelationDef = resourceRelationDefinitionService.getByCriteriaUniqueResult(resRelationDefCriteria)
def resRelation = new ResourceTicketRelation(resRelationDef, resource, newtic)
log.info "resRelation" + resRelation
resourceRelationService.create(resRelation)
// go to new ticket
return actionScriptResultFactory.getPostAction(PostActionType.GOTO_TICKET, newtic)
Code-Beispiel 78: Ressourcen-Ausführungsskript für PC_Desktops zur Erstellung eines neuen ServiceDesk-Tickets für den Kontakt, der für den PC zuständig ist
Erstellen Sie eine Ressourcenaktion, die auf dem Skript basiert:
Abbildung 520: ConSol CM Admin Tool - Erstellen einer Ressourcenaktion
Weisen Sie die Aktion dem richtigen Ressourcentyp zu:
Abbildung 521: ConSol CM Admin Tool - Zuweisen der Ressourcenaktion zum richtigen Ressourcentyp
Überprüfen Sie die Funktion mit dem Web Client:
Abbildung 522: ConSol CM Web Client - Ressourcenseite mit der Ressourcenaktion
Abbildung 523: ConSol CM Web Client - Mit der Ressourcenaktion erstelltes, neues ServiceDesk-Ticket
Abbildung 524: ConSol CM Web Client - Ressourcenseite mit einer oder mehreren Ticketrelationen (neues ServiceDesk-Ticket)
Das Action Framework bietet die Möglichkeit, ein ACF (Activity Control Form) zu öffnen, wenn ein Ticket erstellt wird. Mit dem ACF werden Daten für die folgende Workflow-Aktivität gesammelt, d. h. das Ticket kann erstellt und einfach durch den ersten Workflow-Schritt bewegt werden. Diese Funktion wird im folgenden Beispiel dargestellt. Für die Ressource HP-Drucker soll ein Wartungsticket erstellt werden. Während dieses Vorgangs soll ein ACF geöffnet werden, um nach Daten zu fragen, die danach in der nächsten Workflow-Aktivität verwendet werden.
Um die Ressourcenaktion zu implementieren, führen Sie folgende Schritte durch.
Schreiben Sie das Ressourcen-Ausführungsskripts:
// this script creates a new ticket for the resource from which the activity is executed, i.e., creates new ticket and links it to resource
// resource - ticket relation must be configured beforehand!
// CreateTicketForHP_PrinterWithACF.groovy
import com.consol.cmas.common.model.ticket.Ticket
import com.consol.cmas.common.model.customfield.Unit
import com.consol.cmas.common.model.resource.*
import com.consol.cmas.common.service.resource.*
import com.consol.cmas.common.model.ticket.Queue
import com.consol.cmas.common.model.resource.meta.*
import com.consol.cmas.core.server.service.action.*
import com.consol.cmas.common.service.*
println 'CreateTicketForHP_PrinterWithACF.groovy started ...'
Ticket newtic = new Ticket()
Queue qu = queueService.getByName("SpecialTasks")
newtic.setQueue(qu)
newtic.setSubject("New Ticket for HP Printer: " + resource.getId())
newtic.set("SpecialTasks_Fields.SpecialTasksPrio","normal")
// use main contact person of the resource as main contact for the ticket
Unit maincont = new Unit()
def crit = new ResourceRelationWithTargetUnitCriteria()
crit.setResource(resource)
List<ResourceRelationWithTargetUnit> cont_list = resourceRelationService.getByCriteria(crit)
if (cont_list.size() == 0) {
log.info("ERRROR in script CreateTicketForHP_PrinterWithACF -- No contact set!")
} else {
def cont_rel = cont_list[0]
maincont = cont_rel.getTargetUnit()
}
ticketService.createWithUnit(newtic,maincont)
println 'New Ticket created for resource with ID' + resource.getId()
// link ticket to resource
def resRelationDefCriteria = new ResourceRelationDefinitionCriteria()
resRelationDefCriteria.addDefinitionName("HP_Printer_ToTicket_Relation")
def s_res_type = resource.getResourceType()
resRelationDefCriteria.addSourceResourceType(s_res_type)
resRelationDefCriteria.addTargetQueue(qu)
log.info "resRelationDefCriteria = " + resRelationDefCriteria
log.info "resRelationDefCriteria.definitionName = " + resRelationDefCriteria.getDefinitionsNames()
def resRelationDef = resourceRelationDefinitionService.getByCriteriaUniqueResult(resRelationDefCriteria)
def resRelation = new ResourceTicketRelation(resRelationDef, resource, newtic)
log.info "resRelation" + resRelation
resourceRelationService.create(resRelation)
// go to new ticket, but fill ACF before
def executionContext = activityFormDefinitionService.getExecutionContext(newtic, "defaultScope/TaskInProgress/Aufgabe_annehmen")
if (!executionContext) {
return actionScriptResultFactory.getPostAction(PostActionType.FAILURE, "action.fail.wrong.activity")
}
// Modify entities from the execution context - not the original ones
// - since the user may still press cancel.
executionContext.ticket.add("SpecialTasks_Fields","Deadline", new Date());
return actionScriptResultFactory.getPostAction(PostActionType.GOTO_TICKET, newtic, executionContext);
Code-Beispiel 79: Ressourcen-Ausführungsskript, das ein Ticket mit ACF öffnet
Erstellen Sie eine Ressourcenaktion, die auf dem Skript basiert.
Abbildung 525: ConSol CM Admin Tool - Erstellen der Ressourcenaktion für das HP-Drucker-Wartungsticket
Weisen Sie die Aktion dem richtigen Ressourcentyp zu:
Abbildung 526: ConSol CM Admin Tool - Zuweisen der Ressourcenaktion zum richtigen Ressourcentyp (HP-Drucker)
Überprüfen Sie die Funktion mit dem Web Client:
Abbildung 527: ConSol CM Web Client - Ressourcenaktion für HP-Drucker
Abbildung 528: ConSol CM Web Client - Neues Wartungsticket für Ressource (HP-Drucker), ACF