pse.ScheduleService
global with sharing class ScheduleService
A service that provides functionality relating to schedules. To understand schedules, call this service rather than query Schedule and ScheduleException separately and interpret the results. To make simple updates to existing schedules associated with assignments or resource requests, call this service rather than use DML on Schedule and ScheduleException separately.
Methods
getScheduledHoursForDates
global static Map<Id, pse.ScheduleService.HoursDetail> getScheduledHoursForDates(Set<Id> scheduleIds, Date startDate, Date endDate)
This method does all the logic of looking at the specified schedules and their schedule exceptions and working out how many hours the resources are scheduled to work on specific dates.
Input Parameters
scheduleIds |
Set<Id> |
The schedules to be queried. |
startDate |
Date |
The start of the period you are requesting data for. |
endDate |
Date |
The end of the period you are requesting data for. |
Return Value
A map keyed on Schedule Id. The values detail the scheduled hours after schedule exceptions have been considered.
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | Set<Id> scheduleIds = new Set<Id>{ 'a3W55000000pO2WEAU' };
Map<Id, pse.ScheduleService.HoursDetail> scheduleMap = pse.ScheduleService.getScheduledHoursForDates(
scheduleIds,
Date.newInstance( 2020 , 10 , 1 ),
Date.newInstance( 2020 , 10 , 31 )
);
pse.ScheduleService.HoursDetail firstSchedule = scheduleMap.get( 'a3W55000000pO2WEAU' );
String messageTemplate = 'Schedule runs from {0} to {1}\n' ;
String message = String.format(
messageTemplate,
new List<String>{
firstSchedule.scheduleStart.format(),
firstSchedule.scheduleEnd.format()
}
);
for (Integer day = 1 ; day<= 31 ; day++) {
Date queryDate = Date.newInstance( 2020 , 10 , day);
if (firstSchedule.dateToHours.containsKey(queryDate)) {
Decimal hoursScheduled = firstSchedule.dateToHours.get(queryDate);
message += queryDate + ' -> ' + hoursScheduled + '\n' ;
}
}
System.debug(message);
|
updateSchedules
global static List<pse.ScheduleService.UpdateScheduleResponse> updateSchedules(List<pse.ScheduleService.UpdateScheduleRequest> requests)
Amends the specified schedules and their schedule exceptions to change specific dates to the hours indicated in the request. If you want to make extensive changes to the schedule, such as changing the pattern for the whole scheduled period or altering the end date, we recommend that you use the pse.SchedulingStrategyService API. The return value contains one response for each request and indicates if the request was valid. For example, a request is invalid if you attempt to change a date outside the range of the schedule. Any DML errors are thrown as exceptions.
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Date specialDay = Date.newInstance( 2020 , 9 , 19 );
List<pse__Assignment__c> asmts = [
SELECT Id, pse__Schedule__c
FROM pse__Assignment__c
WHERE pse__Project__r.Name = 'Universal Internet'
];
List<pse.ScheduleService.UpdateScheduleRequest> requests = new List<pse.ScheduleService.UpdateScheduleRequest>();
for (Assignment__c asmt : asmts) {
pse.ScheduleService.UpdateScheduleRequest request = new pse.ScheduleService.UpdateScheduleRequest();
request.ScheduleId = asmt.pse__Schedule__c;
request.Hours = new Map<Date, Decimal>();
request.Hours.put(specialDay, 0 );
requests.add(request);
}
List<ScheduleService.UpdateScheduleResponse> responses = pse.ScheduleService.updateSchedules(
requests
);
for (ScheduleService.UpdateScheduleResponse response : responses) {
if (response.Success) {
} else {
System.debug(LoggingLevel.ERROR, response.Errors);
}
}
|
consolidateExceptionsOnSchedules
global static List<pse.ScheduleService.ConsolidateScheduleExceptionsResponse> consolidateExceptionsOnSchedules(Set<Id> scheduleIds)
This method looks at the specified schedules and schedule exceptions and then combines the exceptions which have identical hour patterns over consecutive weeks. The scheduled hours on each date will not change, but the number of schedule exception records used may be reduced.
Input Parameters
scheduleIds |
Set<Id> |
The Ids of schedules, for which the exceptions will be consolidated. |
Return Value
A list of responses has one response for each schedule which indicates if the request is valid. For example, a request is invalid if you attempt to correct a schedule having zero or one exception.
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | List<pse__Assignment__c> asmts = [
SELECT Id, pse__Schedule__c
FROM pse__Assignment__c
WHERE Name = 'FF-Implementation-Resource-1'
];
Set<Id> scheduleIds = new Set<Id>();
for (Assignment__c asmt : asmts) {
scheduleIds.add(asmt.pse__Schedule__c);
}
List<ScheduleService.ConsolidateScheduleExceptionsResponse> responses = pse.ScheduleService.consolidateExceptionsOnSchedules(
scheduleIds
);
for (ScheduleService.ConsolidateScheduleExceptionsResponse response : responses) {
if (response.Success) {
} else {
System.debug(LoggingLevel.ERROR, response.Errors);
}
}
|
pse.ScheduleService.HoursDetail
global inherited sharing class HoursDetail
Properties
dateToHours |
Map<Date, Decimal> |
Indicates how many hours are scheduled for each date in the range. The dates included in the map are the intersection of the scheduled period and the dates passed in the call to getScheduledHoursForDates.
|
scheduleStart |
Date |
The start date of the schedule.
|
scheduleEnd |
Date |
The end date of the schedule.
|
pse.ScheduleService.UpdateScheduleRequest
global inherited sharing class UpdateScheduleRequest
Use instances of this object with updateSchedules to edit schedules.
Properties
ScheduleId |
Id |
The Id of the schedule to be amended.
|
Hours |
Map<Date, Decimal> |
The keys are the dates to be amended, and the values are the new scheduled hours for each date. Only scheduled hours for dates included in this map are amended, scheduled hours for other dates are unchanged.
|
pse.ScheduleService.UpdateScheduleResponse
global inherited sharing class UpdateScheduleResponse
Response object returned from updateSchedules. Use the ScheduleId to match it to a request.
Properties
ScheduleId |
Id |
The Id of the updated schedule.
|
Success |
Boolean |
False if the request was invalid. True otherwise. Invalid requests will not be processed.
|
Errors |
List<String> |
Any validation errors with the request will be stored here.
|
pse.ScheduleService.ConsolidateScheduleExceptionsResponse
global inherited sharing class ConsolidateScheduleExceptionsResponse
Response object returned from consolidateExceptionsOnSchedules. Use the ScheduleId to match it to a request.
Properties
ScheduleId |
Id |
The ID of the updated schedule.
|
Success |
Boolean |
Returns true if the request is valid else returns false. Invalid requests are not processed and DML errors are thrown as exceptions.
|
Errors |
List<String> |
Any validation errors with the request are stored here.
|
|