pse.ResourceAssignmentServiceglobal with sharing class ResourceAssignmentService
Contains methods and structures to hold, unhold, and assign resources against resource requests. EnumsSchedulingStrategy
RepeatModesDefines the period for which the schedule pattern will be repeated. Like WEEKS or MONTHS.
ResponseStatusDefines the status of the response returned.
Methods
holdResourceRequestsglobal static List<pse.ResourceAssignmentService.ResourceAssignmentResponse> holdResourceRequests(List<pse.ResourceAssignmentService.ResourceAssignmentRequest> resourceAssignRequests) Enables you to hold the resources on a resource request. You must have the Resource Request Entry permission control assigned to hold resources. Input Parameters
Return ValueReturns the list of pse.ResourceAssignmentService.ResourceAssignmentResponse. 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.
/*
***************************************************************************************************************************
Example 1: Holding a resource on a resource request with resource availability.
***************************************************************************************************************************
/*
pse__Resource_Request__c resReq = [SELECT Id, pse__Resource__c, pse__Start_Date__c FROM pse__Resource_Request__c WHERE Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Resource__c;
resAssignRequest.StartDate = resReq.pse__Start_Date__c;
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.holdResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 2: Holding a resource on a resource request with custom start date and level schedule strategy.
***************************************************************************************************************************
/*
pse__Resource_Request__c resReq = [SELECT Id, pse__Resource__c FROM pse__Resource_Request__c WHERE Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Resource__c;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.holdResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 3: Holding a resource on a resource request with custom hours on week days.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 4);
customHours.put('sun', 0);
pse__Resource_Request__c resReq = [SELECT Id, pse__Resource__c FROM pse__Resource_Request__c WHERE Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Resource__c;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.EndDate = Date.newInstance(2023, 02, 04);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.holdResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 4: Holding a resource on a resource request with custom hours on week days and repeat schedule pattern for specified frequency by weeks.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 0);
customHours.put('sun', 0);
pse__Resource_Request__c resReq = [SELECT Id, pse__Resource__c FROM pse__Resource_Request__c WHERE Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Resource__c;
resAssignRequest.StartDate = Date.newInstance(2024, 10, 01);
resAssignRequest.EndDate = Date.newInstance(2024, 10, 31);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
resAssignRequest.Frequency = 2;
resAssignRequest.Mode = ResourceAssignmentService.RepeatModes.WEEKS;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.holdResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 4: Holding a resource on a resource request with strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
* UseDefaultStrategy flag is used to get scheduling strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
***************************************************************************************************************************
/*
pse__Resource_Request__c resReq = [SELECT Id, pse__Resource__c FROM pse__Resource_Request__c WHERE Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Resource__c;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.UseDefaultStrategy = true;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.holdResourceRequests(requestList);
assignResourceRequestsglobal static List<pse.ResourceAssignmentService.ResourceAssignmentResponse> assignResourceRequests(List<pse.ResourceAssignmentService.ResourceAssignmentRequest> resourceAssignRequests) This services enables you to create Assignment with the requested resource on the Resource Request. You must have the Resource Request Entry and Staffing permission control assigned to create assignments. If scheduling strategy is not defined and the UseDefaultStrategy field is selected, then scheduling strategy is retrieved from the Default Scheduling Strategy field of the Assignment Settings custom setting. If Default Scheduling Strategy field is blank, then the 'Calculate End Date, Level Schedule' strategy will be used. Input Parameters
Return ValueReturns the list of pse.ResourceAssignmentService.ResourceAssignmentResponse. 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.
/*
***************************************************************************************************************************
Example 1: Create an Assignment from a Resource Request, respecting the resource's availability.
***************************************************************************************************************************
/*
pse__Resource_Request__c resReq = [SELECT Id, pse__Staffer_Resource__c, pse__Start_Date__c FROM pse__Resource_Request__c WHERE pse__Resource_Held__c = true AND Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Staffer_Resource__c;
resAssignRequest.StartDate = resReq.pse__Start_Date__c;
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.assignResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 2: Create an Assignment from a Resource Request with custom start date and level schedule strategy.
***************************************************************************************************************************
/*
pse__Resource_Request__c resReq = [SELECT Id, pse__Staffer_Resource__c FROM pse__Resource_Request__c WHERE pse__Resource_Held__c = true AND Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Staffer_Resource__c;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.assignResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 3: Create an Assignment from a Resource Request with custom hours on week days.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 4);
customHours.put('sun', 0);
pse__Resource_Request__c resReq = [SELECT Id, pse__Staffer_Resource__c FROM pse__Resource_Request__c WHERE pse__Resource_Held__c = true AND Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Staffer_Resource__c;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.EndDate = Date.newInstance(2023, 02, 04);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.assignResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 4: Create an assignment from a resource request with strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
* UseDefaultStrategy flag is used to get scheduling strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
***************************************************************************************************************************
/*
pse__Resource_Request__c resReq = [SELECT Id, pse__Staffer_Resource__c, pse__Start_Date__c FROM pse__Resource_Request__c WHERE pse__Resource_Held__c = true AND Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Staffer_Resource__c;
resAssignRequest.StartDate = resReq.pse__Start_Date__c;
resAssignRequest.UseDefaultStrategy = true;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.assignResourceRequests(requestList);
/*
***************************************************************************************************************************
Example 5: Create an Assignment from a Resource Request with custom hours on week days and repeat schedule pattern for specified frequency by weeks.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 0);
customHours.put('sun', 0);
pse__Resource_Request__c resReq = [SELECT Id, pse__Staffer_Resource__c FROM pse__Resource_Request__c WHERE pse__Resource_Held__c = true AND Id = 'a1nDS000001j8fnYAA'];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Staffer_Resource__c;
resAssignRequest.StartDate = Date.newInstance(2024, 10, 01);
resAssignRequest.EndDate = Date.newInstance(2024, 10, 31);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
resAssignRequest.Frequency = 2;
resAssignRequest.Mode = ResourceAssignmentService.RepeatModes.WEEKS;
List<pse.ResourceAssignmentService.ResourceAssignmentRequest> requestList = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
List<pse.ResourceAssignmentService.ResourceAssignmentResponse> responseList = pse.ResourceAssignmentService.assignResourceRequests(requestList);
assignResourceRequestsAsyncglobal static void assignResourceRequestsAsync(pse.ResourceAssignmentService.ResourceAssignmentRequestDetail resourceAssignmentRequestDetail) This services enables you to create Assignment asyncronously with the requested resource on the Resource Request. You must have the Resource Request Entry and Staffing permission control assigned to create assignments. If scheduling strategy is not defined and the UseDefaultStrategy field is selected, then scheduling strategy is retrieved from the Default Scheduling Strategy field of the Assignment Settings custom setting. If Default Scheduling Strategy field is blank, then the 'Calculate End Date, Level Schedule' strategy will be used. Input Parameters
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.
/*
***************************************************************************************************************************
Example 1: Create an Assignment from a Resource Request, respecting the resource's availability.
***************************************************************************************************************************
/*
Id heldResourceRequestId = 'a1nDS000001j8fnYAA';
pse__Resource_Request__c resReq = [SELECT Id, pse__Resource__c, pse__Start_Date__c FROM pse__Resource_Request__c WHERE Id = :heldResourceRequestId];
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resReq.Id;
resAssignRequest.ResourceId = resReq.pse__Resource__c;
resAssignRequest.StartDate = resReq.pse__Start_Date__c;
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.assignResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 2: Create an Assignment from a Resource Request with custom start date and level schedule strategy.
***************************************************************************************************************************
/*
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.assignResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 3: Create an Assignment from a Resource Request with custom hours on week days.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 4);
customHours.put('sun', 0);
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.EndDate = Date.newInstance(2023, 02, 04);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.assignResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 4: Create an assignment from a resource request with strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
* UseDefaultStrategy flag is used to get scheduling strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
***************************************************************************************************************************
/*
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.UseDefaultStrategy = true;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.assignResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 5: Create an Assignment from a Resource Request with custom hours on week days and repeat schedule pattern for specified frequency by weeks.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 0);
customHours.put('sun', 0);
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2024, 10, 01);
resAssignRequest.EndDate = Date.newInstance(2024, 10, 31);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
resAssignRequest.Frequency = 2;
resAssignRequest.Mode = ResourceAssignmentService.RepeatModes.WEEKS;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.assignResourceRequestsAsync(req);
holdResourceRequestsAsyncglobal static void holdResourceRequestsAsync(pse.ResourceAssignmentService.ResourceAssignmentRequestDetail resourceAssignmentRequestDetail) This service enables you to hold resources on the resource requests asynchronously. You must assign the Resource Request Entry permission control to hold resources. Input Parameters
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.
/*
***************************************************************************************************************************
Example 1: Holding a resource on a resource request with resource availability.
***************************************************************************************************************************
/*
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.holdResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 2: Holding a resource on a resource request with custom start date and level schedule strategy.
***************************************************************************************************************************
/*
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_LEVEL_SCHEDULE;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.holdResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 3: Holding a resource on a resource request with custom hours on week days.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 4);
customHours.put('sun', 0);
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.EndDate = Date.newInstance(2023, 02, 04);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.holdResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 4: Holding a resource on a resource request with custom hours on week days and repeat schedule pattern for specified frequency by weeks.
***************************************************************************************************************************
/*
Map<String, Decimal> customHours = new Map<String, Decimal>();
customHours.put('mon', 8);
customHours.put('tue', 8);
customHours.put('wed', 8);
customHours.put('thu', 8);
customHours.put('fri', 8);
customHours.put('sat', 0);
customHours.put('sun', 0);
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2024, 10, 01);
resAssignRequest.EndDate = Date.newInstance(2024, 10, 31);
resAssignRequest.Strategy = pse.ResourceAssignmentService.SchedulingStrategy.CALCULATE_END_DATE_CUSTOM_SCHEDULING;
resAssignRequest.CustomHours = customHours;
resAssignRequest.Frequency = 2;
resAssignRequest.Mode = ResourceAssignmentService.RepeatModes.WEEKS;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.holdResourceRequestsAsync(req);
/*
***************************************************************************************************************************
Example 4: Holding a resource on a resource request with strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
* UseDefaultStrategy flag is used to get scheduling strategy from the Default Scheduling Strategy field of the Assignment Settings custom setting.
***************************************************************************************************************************
/*
Id resourceRequestId = 'a1nDS000001j8fnYAA';
Id resourceId = 'a1nDS000001d4fnYAA';
pse.ResourceAssignmentService.ResourceAssignmentRequest resAssignRequest = new pse.ResourceAssignmentService.ResourceAssignmentRequest();
resAssignRequest.ResourceRequestId = resourceRequestId;
resAssignRequest.ResourceId = resourceId;
resAssignRequest.StartDate = Date.newInstance(2023, 01, 29);
resAssignRequest.UseDefaultStrategy = true;
pse.ResourceAssignmentService.ResourceAssignmentRequestDetail req = new pse.ResourceAssignmentService.ResourceAssignmentRequestDetail();
req.ResourceAssignmentRequests = new List<pse.ResourceAssignmentService.ResourceAssignmentRequest>{resAssignRequest};
req.SendErrorEmail = true;
pse.ResourceAssignmentService.holdResourceRequestsAsync(req);
unholdResourceRequestsglobal static List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignResponse> unholdResourceRequests(List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest> resourceUnholdRequests) Enables you to update the provided resource requests to unhold by updating the fields of the resource request. You must have the Resource Request Entry permission control assigned to hold resources. If an error occurs while processing any resource request, updates to other resource requests are rolled back and an error is returned. Input Parameters
Return ValueReturns the list of pse.ResourceAssignmentService.ResourceUnholdOrUnassignResponse. 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.
/*
* Unholding resources on resource requests.
/*
List<pse__Resource_Request__c> heldResourceRequests = [SELECT Id FROM pse__Resource_Request__c WHERE pse__Resource_Held__c = true AND pse__Project__c = 'a1o6s000000uu0SAAQ' LIMIT 2];
pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest resourceUnholdRequest1 = new pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest();
resourceUnholdRequest1.ResourceRequestId = heldResourceRequests[0].Id;
resourceUnholdRequest1.Status = 'Ready to Staff';
pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest resourceUnholdRequest2 = new pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest();
resourceUnholdRequest2.ResourceRequestId = heldResourceRequests[1].Id;
resourceUnholdRequest2.Status = 'Draft';
List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest> resourceUnholdRequests = new List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest>{resourceUnholdRequest1, resourceUnholdRequest2};
List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignResponse> resourceUnholdResponses = pse.ResourceAssignmentService.unholdResourceRequests(resourceUnholdRequests);
Id unheldResourceRequestId1 = resourceUnholdResponses[0].ResourceRequestId;
Id unheldResourceRequestId2 = resourceUnholdResponses[1].ResourceRequestId;
unassignResourceRequestsglobal static List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignResponse> unassignResourceRequests(List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest> resourceUnassignRequests) Updates the provided resource requests to unassign by updating the fields of the resource request. If an error occurs when unassigning any resource request, the process is rolled back and an error is returned. Input Parameters
Return ValuePse.ResourceAssignmentService.ResourceUnholdOrUnassignResponse. 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.
/*
* Unassigning resources on resource requests.
/*
List<pse__Resource_Request__c> assignedResourceRequests = [SELECT Id FROM pse__Resource_Request__c WHERE pse__Assignment__c != NULL AND pse__Project__c = 'a1o6s000000uu0SAAQ' LIMIT 2];
pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest resourceUnassignRequest1 = new pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest();
resourceUnassignRequest1.ResourceRequestId = assignedResourceRequests[0].Id;
resourceUnassignRequest1.Status = 'Ready to Staff';
pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest resourceUnassignRequest2 = new pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest();
resourceUnassignRequest2.ResourceRequestId = assignedResourceRequests[1].Id;
resourceUnassignRequest2.Status = 'Draft';
List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest> resourceUnassignRequests = new List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequest>{resourceUnassignRequest1, resourceUnassignRequest2};
List<pse.ResourceAssignmentService.ResourceUnholdOrUnassignResponse> resourceUnassignResponses = pse.ResourceAssignmentService.unassignResourceRequests(resourceUnassignRequests);
Id unassignResourceRequestId1 = resourceUnassignResponses[0].ResourceRequestId;
Id unassignResourceRequestId2 = resourceUnassignResponses[1].ResourceRequestId;
splitAssignmentToResourceRequestglobal static pse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponse splitAssignmentToResourceRequest(pse.ResourceAssignmentService.SplitAssignmentToResourceRequestRequest splitRequest) Splits the assignment into a new resource request using the resource request's start date as the assignment's split date. A day before the start date of the new resource request is the end date of the current assignment. If an error occurs, the response provides the result and details of the error message. Input Parameters
Return ValuePse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponse 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.
/*
***************************************************************************************************************************
Example 1: A bulk request for Split Assignment to new Resource Request, with partial success and failure.
***************************************************************************************************************************
*/
// Valid fields of Resource Request
List<SObjectField> additionalFields = new List<SObjectField>{
pse__Resource_Request__c.pse__Notes__c,
pse__Resource_Request__c.pse__Milestone__c
};
// Details for request 1
Id assignmentIdToSplit1 = 'a1eDK000001aVCDYA2'; //Assignment must have a Resource Request with Resource Skill Request
Id projectIdForNewRR1 = 'a1vDK0000015M2fYAE';
Id regionIdForNewRR1 = 'a1zDK000001SxxyYAC';
Id milestoneIdForNewRR1 = 'a1rDK000006TNYbYAO'; //This Milestone must belong to project projectIdForNewRR1
Date startDateForNewRR1 = Date.newInstance(2025, 05, 10); // Must be within the assignment start/end date
Date endDateForNewRR1 = Date.newInstance(2025, 06, 20); //Date must be greater than startDateForNewRR1
// Details for request 2
Id assignmentIdToSplit2 = 'a1eDK000001aVBmYAM'; //Assignment must have a Resource Request with Resource Skill Request
Id projectIdForNewRR2 = 'a1vDK0000015M2fYAE';
Id regionIdForNewRR2 = 'a1zDK000001SxxyYAC';
Date startDateForNewRR2 = Date.newInstance(2024, 12, 05); // Must be within the assignment start/end date
Date endDateForNewRR2 = Date.newInstance(2024, 12, 20); // Must be greater than startDateForNewRR2
// Details for request 3
Id assignmentIdToSplit3 = 'a1eDK000001aVBlYAM'; //Assignment must have a Resource Request with Resource Skill Request
Id projectIdForNewRR3 = 'a1vDK0000015M2fYAE';
Id regionIdForNewRR3 = 'a1zDK000001SxxyYAC';
Date startDateForNewRR3 = Date.newInstance(2025, 09, 10); //Start date must be outside the assignment start/end date
Date endDateForNewRR3 = Date.newInstance(2025, 10, 20); //Date must be greater than startDateForNewRR3
pse.ResourceAssignmentService.SplitAssignmentToResourceRequestRequest splitRequest = new pse.ResourceAssignmentService.SplitAssignmentToResourceRequestRequest();
splitRequest.setAdditionalFields(additionalFields);
// Request having clone skills and schedule as false.
pse.ResourceAssignmentService.RequestDetail requestDetail1 = new pse.ResourceAssignmentService.RequestDetail();
requestDetail1.SourceAssignmentId = assignmentIdToSplit1;
requestDetail1.StartDate = startDateForNewRR1;
requestDetail1.EndDate = endDateForNewRR1;
requestDetail1.ProjectId = projectIdForNewRR1;
requestDetail1.ResourceRole = 'Project Manager';
requestDetail1.RequestedHours = 700;
requestDetail1.RegionId = regionIdForNewRR1;
requestDetail1.CloneSkills = false;
requestDetail1.CloneSchedule = false;
requestDetail1.additionalFieldApiWithValues = new Map<pse.ResourceAssignmentService.AdditionalField, String>{
splitRequest.getAdditionalFields()[0] => 'Not cloning skills and schedules',
splitRequest.getAdditionalFields()[1] => milestoneIdForNewRR1
};
// Request for cloning skills and schedule
pse.ResourceAssignmentService.RequestDetail requestDetail2 = new pse.ResourceAssignmentService.RequestDetail();
requestDetail2.SourceAssignmentId = assignmentIdToSplit2;
requestDetail2.StartDate = startDateForNewRR2;
requestDetail2.EndDate = endDateForNewRR2;
requestDetail2.ProjectId = projectIdForNewRR2;
requestDetail2.ResourceRole = 'Consultant';
requestDetail2.RequestedHours = 450;
requestDetail2.RegionId = regionIdForNewRR2;
requestDetail2.additionalFieldApiWithValues = new Map<pse.ResourceAssignmentService.AdditionalField, String>{
splitRequest.getAdditionalFields()[0] => 'Cloning skills and schedule'
};
// Request having invalid start date
pse.ResourceAssignmentService.RequestDetail requestDetail3 = new pse.ResourceAssignmentService.RequestDetail();
requestDetail3.SourceAssignmentId = assignmentIdToSplit3;
requestDetail3.StartDate = startDateForNewRR3;
requestDetail3.EndDate = endDateForNewRR3;
requestDetail3.ProjectId = projectIdForNewRR3;
requestDetail3.ResourceRole = 'Consultant';
requestDetail3.RequestedHours = 450;
requestDetail3.RegionId = regionIdForNewRR3;
requestDetail3.additionalFieldApiWithValues = new Map<pse.ResourceAssignmentService.AdditionalField, String>{
splitRequest.getAdditionalFields()[0] => 'Invalid request'
};
splitRequest.RequestDetails = new List<pse.ResourceAssignmentService.RequestDetail>{ requestDetail1, requestDetail2, requestDetail3 };
pse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponse response = pse.ResourceAssignmentService.splitAssignmentToResourceRequest(
splitRequest
);
System.debug('Response: ' + response);
Integer index = 1;
for(pse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponseDetail responseDetail : response.ResponseDetails) {
System.debug('ResponseDetail for request ' + (index++) +': ' + responseDetail);
}
/*
***************************************************************************************************************************
Example 2: Split an Assignment to new Resource Request, with invalid additional fields.
***************************************************************************************************************************
*/
List<SObjectField> additionalFields = new List<SObjectField>{
pse__Resource_Request__c.pse__Notes__c,
pse__Assignment__c.pse__Schedule__c // Invalid additional field
};
Id assignmentIdToSplit = 'a1eDK000001aVCDYA2';
Id projectIdForNewRR = 'a1vDK0000015M2fYAE';
Id regionIdForNewRR = 'a1zDK000001SxxyYAC';
String resourceRoleForNewRR = 'Project Manager';
Integer requestedHoursForNewRR = 700;
Date startDateForNewRR = Date.newInstance(2025, 05, 10); // Must be within the assignment start/end date
Date endDateForNewRR = Date.newInstance(2025, 06, 05);
pse.ResourceAssignmentService.SplitAssignmentToResourceRequestRequest splitRequest = new pse.ResourceAssignmentService.SplitAssignmentToResourceRequestRequest();
splitRequest.setAdditionalFields(additionalFields);
pse.ResourceAssignmentService.RequestDetail requestDetail = new pse.ResourceAssignmentService.RequestDetail();
requestDetail.SourceAssignmentId = assignmentIdToSplit;
requestDetail.StartDate = startDateForNewRR;
requestDetail.EndDate = endDateForNewRR;
requestDetail.ProjectId = projectIdForNewRR;
requestDetail.ResourceRole = resourceRoleForNewRR;
requestDetail.RequestedHours = requestedHoursForNewRR;
requestDetail.RegionId = regionIdForNewRR;
requestDetail.CloneSkills = false;
requestDetail.CloneSchedule = false;
requestDetail.additionalFieldApiWithValues = new Map<pse.ResourceAssignmentService.AdditionalField, String>{
splitRequest.getAdditionalFields()[0] => 'not cloning skills and schedules'
};
splitRequest.RequestDetails = new List<pse.ResourceAssignmentService.RequestDetail>{ requestDetail };
pse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponse response = pse.ResourceAssignmentService.splitAssignmentToResourceRequest(
splitRequest
);
System.debug('Response: ' + response);
pse.ResourceAssignmentService.ResourceAssignmentRequestglobal with sharing class ResourceAssignmentRequest Contains parameters for holding a resource on a resource request or assigning a resource request to a resource. The CustomHours and PercentAlloc fields are required for the CALCULATE_END_DATE_CUSTOM_SCHEDULING and PERCENT_ALLOCATION scheduling strategies, respectively. Properties
pse.ResourceAssignmentService.ResourceAssignmentResponseglobal with sharing class ResourceAssignmentResponse Returns information related to the resource request ID and resource ID. Properties
pse.ResourceAssignmentService.ResourceUnholdOrUnassignRequestglobal with sharing class ResourceUnholdOrUnassignRequest Contains parameters for unholding or unassigning the resource on a resource request. Properties
MethodsResourceUnholdOrUnassignRequestglobal ResourceUnholdOrUnassignRequest() pse.ResourceAssignmentService.ResourceUnholdOrUnassignResponseglobal with sharing class ResourceUnholdOrUnassignResponse Returns information related to the resource request. Properties
pse.ResourceAssignmentService.AdditionalFieldglobal with sharing class AdditionalField The SObjectField details to be added in the request parameter using the setAdditionalFields method. pse.ResourceAssignmentService.SplitAssignmentToResourceRequestRequestglobal with sharing class SplitAssignmentToResourceRequestRequest Contains parameters related to request details for splitting assignments to resource requests. Properties
Methods
setAdditionalFieldsglobal void setAdditionalFields(List<SObjectField> fields) This method enables users to set additional fields which are not provided in the given request. getAdditionalFieldsglobal List<pse.ResourceAssignmentService.AdditionalField> getAdditionalFields() This method retrieves the list of the fields added to the setAdditionalFields method. The returned list of AdditionalField must be used as a key in AdditionalFieldApiWithValues of RequestDetails. SplitAssignmentToResourceRequestRequestglobal SplitAssignmentToResourceRequestRequest() pse.ResourceAssignmentService.RequestDetailglobal with sharing class RequestDetail Contains information related to the new resource request created after splitting assignments. Properties
MethodsRequestDetailglobal RequestDetail() pse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponseglobal with sharing class SplitAssignmentToResourceRequestResponse Contains information related to the new resource request created after splitting assignments or an error message when the split action was not successful. Properties
MethodsSplitAssignmentToResourceRequestResponseglobal SplitAssignmentToResourceRequestResponse() pse.ResourceAssignmentService.SplitAssignmentToResourceRequestResponseDetailglobal with sharing class SplitAssignmentToResourceRequestResponseDetail Contains the Assignment ID and the details of the new resource request created after the split or an error message when the split action was not successful. Properties
MethodsSplitAssignmentToResourceRequestResponseDetailglobal SplitAssignmentToResourceRequestResponseDetail() pse.ResourceAssignmentService.ResourceAssignmentRequestDetailglobal with sharing class ResourceAssignmentRequestDetail Contains parameters for assigning or holding resource requests in asynchronous mode. Properties
MethodsResourceAssignmentRequestDetailglobal ResourceAssignmentRequestDetail() Determines the number of times the process should be retried in case of record lock/unavailable. No need to make it global as user input is not excepted. |