pse.ScheduleServiceglobal 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
getScheduledHoursForDatesglobal 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
Return ValueA map keyed on Schedule Id. The values detail the scheduled hours after schedule exceptions have been considered. Sample Code//Note: This sample code is for demonstration purposes only. It is not intended for //use in a production environment, is not guaranteed against defects or errors, and //is in no way optimized or streamlined. //Use the service to find scheduled hours in October for a specific schedule. 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); //Map does not contain keys for dates outside the scheduled period if (firstSchedule.dateToHours.containsKey(queryDate)) { Decimal hoursScheduled = firstSchedule.dateToHours.get(queryDate); message += queryDate + ' -> ' + hoursScheduled + '\n'; } } System.debug(message); updateSchedulesglobal 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//Note: This sample code is for demonstration purposes only. It is not intended for //use in a production environment, is not guaranteed against defects or errors, and //is in no way optimized or streamlined. //The Project Manager of Universal Internet has decided to put everybody's hours to zero on his birthday. //Now they have no reason to miss his party. 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) { //We could tell the person the good news } else { //His birthday is probably outside their schedule, we never checked. //But let's have a look at the messages anyway. System.debug(LoggingLevel.ERROR, response.Errors); } } consolidateExceptionsOnSchedulesglobal 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
Return ValueA 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//Note: This sample code is for demonstration purposes only. It is not intended for //use in a production environment, is not guaranteed against defects or errors, and //is in no way optimized or streamlined. //The schedule of an assignment 'FF-Implementation-Resource-1' has too many schedule exceptions with same hourly pattern over several weeks. //We want to correct the schedule by combining the schedule exceptions to reduce the count. 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) { //The exceptions have been updated as required. No further action is required.' } else { //There might be some validation failure occured on this schedule. //Let's have a look at the messages anyway. System.debug(LoggingLevel.ERROR, response.Errors); } } pse.ScheduleService.HoursDetailglobal inherited sharing class HoursDetail Properties
pse.ScheduleService.UpdateScheduleRequestglobal inherited sharing class UpdateScheduleRequest Use instances of this object with updateSchedules to edit schedules. Properties
pse.ScheduleService.UpdateScheduleResponseglobal inherited sharing class UpdateScheduleResponse Response object returned from updateSchedules. Use the ScheduleId to match it to a request. Properties
pse.ScheduleService.ConsolidateScheduleExceptionsResponseglobal inherited sharing class ConsolidateScheduleExceptionsResponse Response object returned from consolidateExceptionsOnSchedules. Use the ScheduleId to match it to a request. Properties
|