Action engine
Indice
- 1 Action Engine Configuration
- 1.1 General
- 1.2 Parameters
- 1.3 Events Managed
- 1.3.1 LDAP Message
- 1.3.2 Reporting distribution by mail
- 1.3.3 Resource on project association
- 1.3.4 Upload relations Resource-Projects
- 1.3.5 User Note Created
- 1.3.6 User Note Updated
- 1.3.7 Project Created
- 1.3.8 Project Updated
- 1.3.9 Service Created
- 1.3.10 Service Updated
- 1.3.11 Ticket Activity Created
- 1.3.12 Ticket Activity Updated
- 1.3.13 Ticket Created
- 1.3.14 Ticket Updated
- 1.3.15 Workflow Button
- 1.3.16 Incoming Message
- 1.3.17 Trigger Value Reched
- 1.4 VCE Condition
- 2 Task
- 3 Scripting Task Tutorial
Action Engine Configuration
Action Engine enabled the user to configured an Action and the activation condition. An action is composed by:
- General Information
- Trigger and Activation condition
- Parameters
- Tasks to execute
General
The following images shown the action' user interface and provide some more detail about this functionality
Parameters
TBC
Events Managed
Category / Class | General | Project | Service | Ticket |
---|---|---|---|---|
LDAP Events | LDAP Message | N/A | N/A | N/A |
MB Scheduler | Reporting distribution by mail
Resource on project association Upload relations Resource-Projects |
N/A | N/A | N/A |
User Note Events | User Note Created
User Note Updated |
N/A | N/A | N/A |
Internal System Events | N/A | Project Created
Project Updated |
Service Created
Service Updated |
Ticket Activity Created
Ticket Activity Updated Ticket Created Ticket Updated Workflow Button |
External System Events | N/A | N/A | N/A | Incoming Message |
OCE Events | N/A | N/A | N/A | Trigger Value Reached |
Company Events | Process File Upload | N/A | N/A | N/A |
LDAP Message
This event is raised when MB sends an itmSUITE internal Message to PMSM with type "Ldap Synchronization".
Reporting distribution by mail
This is an External Event, it is raised when MB sends an itmSUITE internal Message to PMSM with type "Reporting distribution by Mail".
Resource on project association
This is an External Event, it is raised when MB sends an itmSUITE internal Message to PMSM with type "Resource on Project Associations".
Upload relations Resource-Projects
This is an External Event, it is raised when MB sends an itmSUITE internal Message to PMSM with type "Upload relations Resources-Projects".
User Note Created
This is an Internal Event: it is raised when a User Note is created on Ticket.
User Note Updated
This is an Internal Event: it is raised when a User Note is updated on Ticket.
Project Created
This is an Internal Event: it is raised when a Project is created.
Project Updated
This is an Internal Event: it is raised when a Project is updated.
Service Created
This is an Internal Event: it is raised when a Service is created.
Service Updated
This is an Internal Event: it is raised when a Service is updated.
Ticket Activity Created
This is an Internal Event: it is raised when a Ticket Activity is created.
Ticket Activity Updated
This is an Internal Event: it is raised when a Ticket Activity is updated.
Ticket Created
This is an Internal Event: it is raised when a Ticket is created.
Ticket Updated
This is an Internal Event: it is raised when a Ticket is updated.
Workflow Button
This is an Internal Event: it is raised when a Custom Field with type "Command button" on a Ticket is pressed.
Incoming Message
This is an External Event.
When the incoming message is validated by EEM, the informations are sent to MB (Message Bus) that dispatch it to the itmSUITE® Action engine and a configured Action is activated.
Trigger Value Reched
This is an Internal Event: it is raised when a OCE Objective reach a trigger.
VCE Condition
Condition'tab enable the user to define a Boolean condition that should be verify before activate the action' . Generally the conditions works on input Parameter.
Task
Tasks tab enable the user to define one or more task that will be executed sequentially if the condition is valid. The system manage different type of task, the most flexible and powerful is Scripting task, based on Javascript framework, enable the user to call itmSUITE® primitive
Basic Task
TBC
Scripting Task
Scripting Task in a JavaScript editor: it allows to use many methods to perform a large set of operations on itmSUITE entities (Ticket, Service, CI etc...)
Action Engine can also send information towards third parties software using scripting tasks. This can be performed:
- Sending a preformatted mail
- Calling a third parties web services
Scripting Task Tutorial
Simple Event Handler
We need to define a function main, which accept two arguments:
* event * incomeParameters
Empty Task Handler
/** * @param event * @param incomeParameters */ function main(event, incomeParameters) { }
incomeParameters usage
/** * 1. print as warning event name and Task Income Parameters * 2. accessing to income parameter by name * @param event * @param incomeParameters */ function main(event, incomeParameters) { var message = " event: " + event.getClass().getSimpleName(); var entries = incomeParameters.entrySet().toArray(); for each (var obj in entries) { message = message + "\n" + "key:" + obj.getKey() + "\n" + "value:" + (obj.getValue().getValue() != null ? obj.getValue().getValue() : "null"); } //suppose we have parameter under "ticket" name //lets retrieve it var value = incomeParameters.getObjectValue("ticket"); message = message + "\n" + "ticket:" + value; //lets retrieve type of incomeParameters.getObjectValue("ticket") var type = incomeParameters.getParameterTypeModel("ticket"); message = message + "\n" + "ticket:" + type.getName(); taskRuntime.addWarning(message); }
taskRuntime
taskRuntime Provide access to:
* securityContext * entities and system services * system logger * to user messages (warnings and errors messages)
/** * print as warning resource full name and event name and dump the same * message as error and warning to system log * @param event * @param incomeParameters */ function main(event, incomeParameters) { var message = "user:" + taskRuntime.getSecurityContext().getResourceFullName() + " event: " + event.getClass().getSimpleName(); taskRuntime.addWarning(message); taskRuntime.getLogger().error(message); taskRuntime.getLogger().warn(message); }
Services
SystemService - provide access to PMSM's email internal service
/** * send an email to myEmail@host.com * @param event * @param incomeParameters */ function main(event, incomeParameters) { var systemService = taskRuntime.getService("SystemService"); var eventName = event.getClass().getSimpleName(); systemService.sendEmail("myEmail@host.com", "email send by scripting task:" + eventName, "TBD"); }
EntityFinderService - provide a set of finders for different entities
/** * invoke EntityFinderService for all supported entities and print result as PMSM warnings * @param event * @param incomeParameters */ function main(event, incomeParameters) { invokeEntityFinderService("Area", "test"); invokeEntityFinderService("Functionality", "test"); invokeEntityFinderService("Product", "test"); invokeEntityFinderService("Project", "test"); invokeEntityFinderService("Resource", "test"); invokeEntityFinderService("ResolutionCause", "test"); invokeEntityFinderService("Service", "test"); invokeEntityFinderService("SolutionGroup", "test"); invokeEntityFinderService("TargetEnvironment", "test"); invokeEntityFinderService("TicketAdmStatus", "enumeration.ticketadminstatus.unbillable"); invokeEntityFinderService("TicketArea", "test"); invokeEntityFinderService("TicketCategory", "test"); invokeEntityFinderService("TicketImpact", "test"); invokeEntityFinderService("TicketTopic", "test"); invokeEntityFinderService("TicketUrgency", "test"); invokeEntityFinderService("TicketActivityStatus", "enumeration.ticketactivity.running"); } function invokeEntityFinderService(entityName, name) { var service = taskRuntime.getService("EntityFinderService"); taskRuntime.addWarning("entityName:" + entityName+ " name:" + name+ " id:" + service.findIdByName entityName, name)); taskRuntime.addWarning("entityName:" + entityName + " name:" + name + " model:" + service.findModelByName(entityName, name)); taskRuntime.addWarning("entityName:" + entityName + " name:" + name + " entity:" + service.findEntityByName(entityName, name)); }
ResourceService - provide an extended finders for resource entity
var service = taskRuntime.getService("ResourceService"); /** * Resource service example * @param event * @param incomeParameters */ function main(event, incomeParameters) { var id = service.findIdByFullName("test test"); var name; if (id == null) { taskRuntime.addWarning("Resource not found"); } taskRuntime.addWarning("Resource id:" + id + " found"); createResource("new resource"); // createResource("new resource"); the second attempt shall fail, due resource duplication with the // same login } function createResource(login) { var resource = new com.kv4.psm.core.domain.model.ResourceModel(); resource = service.prepareNew(resource).result; resource.login = login; resource.name = login; resource.surname = login; resource = service.create(resource).result; taskRuntime.addWarning("Resource id:" + resource + " created"); }
TicketService - provide CRUD methods
Create:
/** * create a new WF ticket * @param event - any * @param incomeParameters */ function main(event, incomeParameters) { var ticketService = taskRuntime.getService("TicketService"); //create an empty WfTicketModel var ticket = new com.kv4.psm.core.domain.model.ticket.WFTicketModel(); //set required fields ticket.setProjectId(579); ticket.setTickettypeId(118); //send to service to fill "default" values ticket = ticketService.prepareNew(ticket).getResult(); //create an ticket ticket = ticketService.create(ticket).getResult(); //report the ticket id to user as warning message taskRuntime.addWarning("Ticket: " + ticket.getId() + " had been created"); }
Update:
importPackage(com.kv4.psm.core.domain.ticket); /** * Event:Ticket Updated * * update Ticket Priority to HIGH, * we can't directly set Priority since its calculable field we can manage via Impact and Urgency * fields * @param event * @param incomeParameters */ function main(event, incomeParameters) { //ticket id var ticketId = 14543; //retrieve the EntityFinderService var entityFinderService = taskRuntime.getService("EntityFinderService"); //retrieve ticket model var ticket = taskRuntime.getService("TicketService").findModelById(ticketId); if (ticket == null) { taskRuntime.raiseError("ticket is null"); } var ticketImpactId = entityFinderService.findIdByName("TicketImpact", "1 - ALL users impacted on 1 or more VBF"); var ticketUrgencyId = entityFinderService.findIdByName("TicketUrgency", "1 - Service needed now AND WA NOT available"); if (ticketImpactId == null || ticketUrgencyId) { taskRuntime.raiseError("ticketUrgency or ticketImpact is null"); } ticket.setTicketimpactId(ticketImpactId); ticket.setTicketurgencyId(ticketUrgencyId); //update ticket taskRuntime.getService("TicketService").update(ticket); taskRuntime.addWarning("Impact and Urgency had been updated by Action Engine"); }
Custom Fields
/** * Ticket Custom Fields * * @param event * @param incomeParameters */ function main(event, incomeParameters) { var ticketId = 14543; var ticketService = taskRuntime.getService("TicketService"); var ticket = ticketService.findModelById(ticketId); if (ticket == null) { taskRuntime.raiseError("ticket is null"); } //simple/primitive types //number type //taskRuntime.addWarning(ticket.getCustomFieldValues().get(new java.lang.Integer(1168))); to read need exactly define the Integer ticket.getCustomFieldValues().put(new java.lang.Integer(1168), "2,0"); //date type ticket.getCustomFieldValues().put(new java.lang.Integer(1163), "01-10-2012"); //datetime type var dateTimeValue = new com.kv4.psm.core.domain.model.workflow.DateTimeValue(); dateTimeValue.setDateString("01-10-2012"); dateTimeValue.setTimeString("10:00"); // alternative way setup datetime its using java.util.Date, in this case the dateTimeValue will contains current system time //var dateTimeValue = new com.kv4.psm.core.domain.model.workflow.DateTimeValue(new java.util.Date()); ticket.getCustomFieldValues().put(new java.lang.Integer(1165), dateTimeValue); //time type ticket.getCustomFieldValues().put(new java.lang.Integer(1164), "10:00"); //time text //single line ticket.getCustomFieldValues().put(new java.lang.Integer(1159), "single line"); //Multi Line ticket.getCustomFieldValues().put(new java.lang.Integer(1160), "Multi Line\nsecond one"); //Rich Text ticket.getCustomFieldValues().put(new java.lang.Integer(1161), "Multi Line
second one"); //check/radio/ boxes and Drop Down Tuple var ids = java.lang.reflect.Array.newInstance(java.lang.Integer, 2); //construct empty array with length 2 ids[0] = 196; ids[1] = 197; ticket.getCustomFieldValues().put(new java.lang.Integer(1162), ids); //Drop Down Plain ids = java.lang.reflect.Array.newInstance(java.lang.Integer, 1); //construct empty array with length 1 ids[0] = 196; ticket.getCustomFieldValues().put(new java.lang.Integer(1166), ids); //update ticket ticketService.update(ticket); }