Newer Version Available
Code Examples: Dispatcher Console Custom Actions
Creating Apex Classes
When you create an Apex class to link to a dispatcher console custom action, implement one of the following three interfaces in your class.
| Interface | Description |
|---|---|
| CustomGanttServiceResourceAction | For actions on service resources. The parameters are the service
resource record ID, the service territory member record ID reflected
on the Gantt, and the start and end dates of the current Gantt view.
No additional parameters are included. Use the following format: String action(Id resourceId, Id stmId, Datetime strGanttStartDate, Datetime strGanttEndDate, Map<String, Object> additionalParameters) |
| CustomGanttServiceAppointmentAction | For actions on service appointments. The parameters are the
service appointment record IDs—used for bulk
actions—and the start and end dates of the current Gantt
view. No additional parameters are included. The
Map<String, Object> additionalParameters
input parameter is reserved for future use but must be included to
run the code. Use the following format: String action(List<Id> serviceAppointmentsIds, Datetime strGanttStartDate, Datetime strGanttEndDate, Map<String, Object> additionalParameters) When this action is implemented, multiple service appointments can be returned. In your method, we recommend creating an if statement to check how many IDs are returned. First, validate that at least one ID was returned: serviceAppointmentsIds.size()>1. Then, you can take different actions depending on whether 0, 1, or more appointment IDs were returned. |
| CustomGanttResourceAbsenceAction | For actions on resource absences. The parameters are the resource
absence record ID, the absence type (‘na’ or ‘break’), and the start
and end dates of the current Gantt view. No additional parameters
are included. The Map<String, Object>
additionalParameters input parameter is reserved for
future use but must be included to run the code. Use the following format: String action(Id absenceId, String absenceType, Datetime strGanttStartDate, Datetime strGanttEndDate, Map<String, Object> additionalParameters) |
These functions must be global and require that a string be returned. If the string isn’t empty, it is used in the Gantt notification shown when a user clicks the related action.
Code Example: Service Resource Custom Action
This action creates a resource absence of type Non Availability for the selected service resource that spans the days visible on the Gantt.
1global class BlockResourceVisibleTime implements FSL.CustomGanttServiceResourceAction {
2
3 global String action(Id resourceId, Id stmId, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
4
5 ResourceAbsence na = new ResourceAbsence();
6
7 // get Resource Absence record type - NA
8 RecordType recordTypeNA = [
9 SELECT
10 Id, SobjectType, Name
11 FROM
12 RecordType
13 WHERE
14 DeveloperName =: 'Non_Availability'
15 AND
16 SObjectType =: ResourceAbsence.getSobjectType().getDescribe().getName()
17 ];
18
19 na.RecordTypeId = recordTypeNA.Id;
20 na.ResourceId = resourceId;
21 na.FSL__Approved__c = true;
22 na.Start = ganttStartDate;
23 na.End = ganttEndDate;
24
25 insert na;
26
27 ServiceResource resource = [SELECT Name FROM ServiceResource WHERE Id =: resourceId];
28
29 return 'Blocked availability to ' + resource.Name + ' from ' + ganttStartDate.format() + ' to ' + ganttEndDate.format();
30
31 }
32
33}Code Example: Service Appointment Custom Action
This action toggles the In Jeopardy field between True and False.
1global class toggleServiceAppointmentJeopardy implements FSL.CustomGanttServiceAppointmentAction {
2
3 global String action(List<Id> serviceAppointmentsIds, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
4
5 List<ServiceAppointment> saList = [SELECT FSL__InJeopardy__c, AppointmentNumber FROM ServiceAppointment WHERE Id in : serviceAppointmentsIds];
6 String reply = '';
7 List<String> saNames = new List<String>();
8
9 for (ServiceAppointment s : saList) {
10 s.FSL__InJeopardy__c = !s.FSL__InJeopardy__c;
11 saNames.add(s.AppointmentNumber);
12 }
13
14 upsert saList;
15
16 reply = String.join(saNames, ', ');
17 return 'Service Appointments successfully processed: ' + reply;
18 }
19
20}Code Example: Resource Absence Custom Action
For resource absences of type NA, this action creates a duplicate absence on the following day.
1global class copyAbsenceToNextDay implements FSL.CustomGanttResourceAbsenceAction {
2
3 global String action(Id absenceId, String absenceType, Datetime ganttStartDate, Datetime ganttEndDate, Map<String, Object> additionalParameters) {
4
5 ResourceAbsence resourceAbsence = [SELECT Id, AbsenceNumber, Start, End, ResourceId, RecordTypeId, FSL__Approved__c FROM ResourceAbsence WHERE Id =: absenceId LIMIT 1];
6
7 ResourceAbsence raClone = resourceAbsence.clone(false, true, false, false);
8 raClone.Start = resourceAbsence.Start.addDays(1);
9 raClone.End = resourceAbsence.End.addDays(1);
10 raClone.ResourceId = resourceAbsence.ResourceId;
11 raClone.RecordTypeId = resourceAbsence.RecordTypeId;
12 raClone.FSL__Approved__c = true;
13 insert raClone;
14
15 return 'Resource Absence successfully copied.';
16 }
17
18}Creating Visualforce Pages
When you create a Visualforce page, use the following GET parameters.
| For actions on... | Description |
|---|---|
| Service appointments | Use the following format: services [if multiple], id
(comma delimited if multiple), start (current Gantt start date,
string), end (current Gantt end date,
string) Example for a Visualforce page used to update a single service appointment: ?id=08p4E000000Kj5hQAC&start=5-7-2018&end=5-8-2018 Example for a Visualforce page used to update multiple service appointments: ?services=08p4E000000Kj5hQAC,08p4E000430Kj5hAPP&start=5-7-2018&end=5-8-2018 |
| Service resources | Use the following format: id, stm (ID of service
resource’s current service territory member record), start
(current Gantt start date, string), end (current Gantt end date,
string) Example: ?id=0Hn4E0000001OMQSA2&stm=0Hu4E0000005cpPSAQ&start=5-7-2018&end=5-8-2018 |
| Resource absences | Use the following format: id, type (’break’ or ‘na’),
start (current Gantt start date, string), end (current Gantt end
date, string) Example: ?id=0Hw4E00000091HSSAY&type=break&start=5-7-2018&end=5-8-2018 |
To close the Visualforce lightbox from your code, use: parent.postMessage('closeLightbox','*');