Revenue Management API Developer Reference

ffrr.RevenueScheduleService

global with sharing class RevenueScheduleService

Contains methods for Revenue Schedule operations.

Methods

generate

global static List<Id> generate(Set<Id> sourceRecordIds)

Takes a set of input source recordIds and generates and inserts multiple ffrr__RevenueRecognitionSchedule__c and multiple associated ffrr__RevenueRecognitionScheduleLine__c. The schedules and lines are populated with information from the source records, as defined by the associated ffrr__Settings__c, using the calculation type from the associated ffrr__Template__c.
Note: The appropriate ffrr__Settings__c and ffrr__Template__c must be set up for the source records, and the source record types.

Input Parameters

Name Type Description
sourceRecordIds Set<Id> Ids of the source records to generate the ffrr__RevenueSchedule__c records from.

Return Value

The Ids of the created ffrr__RevenueSchedule__c records.

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.

// In this example the Revenue Schedule Service is used to create a Revenue Schedule for each
// source record Id passed in to the service method, and return a list of associated Revenue Schedule Ids
// If any of the sources are not set up for revenue recognition then no schedules will be generated.

// Retrieve the Ids of the Performance Obligations that will be used as the source Ids from which to generate Revenue Schedules
List<ffrr__PerformanceObligation__c> sourceRecords = [SELECT Id FROM ffrr__PerformanceObligation__c WHERE ffrr__AccountName__c = 'FF'];
Set<Id> sourceRecordIds = new Set<Id>();

for( ffrr__PerformanceObligation__c sourceRecord : sourceRecords )
{
    sourceRecordIds.add(sourceRecord.Id);
}

// Get the List of Revenue Schedule Ids that have been generated by this service
List<Id> revenueScheduleIds = ffrr.RevenueScheduleService.generate(sourceRecordIds);

generate

global static Map<Id, ffrr.RevenueScheduleService.GenerateResult> generate(Set<Id> sourceRecordIds, ffrr.RevenueScheduleService.GenerateConfig config)

Takes a set of input source recordIds and a configuration and generates and inserts multiple ffrr__RevenueRecognitionSchedule__c and multiple associated ffrr__RevenueRecognitionScheduleLine__c. The schedules and lines are populated with information from the source records, as defined by the associated ffrr__Settings__c, using the calculation type from the associated ffrr__Template__c.
Note: The appropriate ffrr__Settings__c and ffrr__Template__c must be set up for the source records, and the source record types.

Input Parameters

Name Type Description
sourceRecordIds Set<Id> Ids of the source records to generate the ffrr__RevenueSchedule__c records from.
config ffrr.RevenueScheduleService.GenerateConfig GenerateConfig used to specify how the generate process behaves, specifically if ffrr__RevenueSchedule__c generation stops on errors.

Return Value

The Ids of the created ffrr__RevenueSchedule__c records.

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.

// In this example the Revenue Schedule Service is used to create a Revenue Schedule for each
// source record Id passed in to the service method, and return a map of source Ids to associated results.
// The generate method is called with a GenerateConfig object that sets the all or none parameter to false.
// If a source is not set up for revenue recognition then no schedules will be generated for it.
// If a source is set up for revenue recognition then a schedule will be generated for it.

// Retrieve the Ids of the Performance Obligations that will be used as the source Ids from which to generate Revenue Schedules
List<ffrr__PerformanceObligation__c> sourceRecords = [SELECT Id FROM ffrr__PerformanceObligation__c WHERE ffrr__AccountName__c = 'FF'];
Set<Id> sourceRecordIds = new Set<Id>();

for( ffrr__PerformanceObligation__c sourceRecord : sourceRecords )
{
    sourceRecordIds.add(sourceRecord.Id);
}

ffrr.RevenueScheduleService.GenerateConfig config = new ffrr.RevenueScheduleService.GenerateConfig();
config.allOrNone = false;

// Get the results that have been generated by this service
Map<Id, ffrr.RevenueScheduleService.GenerateResult> results = ffrr.RevenueScheduleService.generate(sourceRecordIds, config);

for(Id sourceId : results.keySet()) {
  ffrr.RevenueScheduleService.GenerateResult result = results.get(sourceId);
  // Log the Id of the source record for which this result is associated with
  System.debug('Source Record Id ' + result.sourceRecordId);
  // Log the Id of the schedule  that was generated
  System.debug('Schedule Id ' + result.scheduleId);
  // Log the status of the generate for this source record Id
  System.debug('Success ' + result.success);
  // Log any errors that were thrown
  for(String e : result.errors) {
    System.debug('error: ' + e);
  }
}

generateAsync

global static Id generateAsync()

Generates and inserts multiple ffrr__RevenueRecognitionSchedule__c and multiple associated ffrr__RevenueRecognitionScheduleLine__c asynchronously for all the valid objects available in the Org. The schedules and lines are populated with information from the source records, as defined by the associated ffrr__Settings__c, using the calculation type from the associated ffrr__Template__c.
Note: The appropriate ffrr__Settings__c and ffrr__Template__c must be set up for the source records, and the source record types.

Return Value

Id of the executing fferpcore__ProcessRun__c record.

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.

// In this example the Revenue Schedule Service is used to asynchronously create a Revenue Schedule for each
// available source record in the org, and return the Async Apex Job Id.
// If a source is not set up for revenue recognition then no schedules will be generated for it.
// If a source is set up for revenue recognition then a schedule will be generated for it.

// Get the Id of Async Apex Job generating the Revenue Schedules
Id batchJobId = ffrr.RevenueScheduleService.generateAsync();

// Get AsyncApexJob status
List<AsyncApexJob> batchJob = [SELECT Id, Status FROM AsyncApexJob WHERE Id = :batchJobId];

generateAsync

global static Id generateAsync(Set<Id> sourceRecordIds)

Takes a set of input source recordIds and generates and inserts multiple ffrr__RevenueRecognitionSchedule__c and multiple associated ffrr__RevenueRecognitionScheduleLine__c asynchronously. The schedules and lines are populated with information from the source records, as defined by the associated ffrr__Settings__c, using the calculation type from the associated ffrr__Template__c.
Note: The appropriate ffrr__Settings__c and ffrr__Template__c must be set up for the source records, and the source record types.

Input Parameters

Name Type Description
sourceRecordIds Set<Id> Ids of the source records to generate the ffrr__RevenueSchedule__c records from.

Return Value

Id of the executing fferpcore__ProcessRun__c record.

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.

// In this example the Revenue Schedule Service is used to asynchronously create a Revenue Schedule for each
// source record Id passed in to the service method, and return the Async Apex Job Id.
// If a source is not set up for revenue recognition then no schedules will be generated for it.
// If a source is set up for revenue recognition then a schedule will be generated for it.

// Retrieve the Ids of the Performance Obligations that will be used as the source Ids from which to generate Revenue Schedules
List<ffrr__PerformanceObligation__c> sourceRecords = [SELECT Id FROM ffrr__PerformanceObligation__c WHERE ffrr__AccountName__c = 'FF'];
Set<Id> sourceRecordIds = new Set<Id>();

for( ffrr__PerformanceObligation__c sourceRecord : sourceRecords )
{
    sourceRecordIds.add(sourceRecord.Id);
}

// Get the Id of Async Apex Job generating the Revenue Schedules
Id batchJobId = ffrr.RevenueScheduleService.generateAsync(sourceRecordIds);

// Get AsyncApexJob status
List<AsyncApexJob> batchJob = [SELECT Id, Status FROM AsyncApexJob WHERE Id = :batchJobId];

recognize

global static ffrr.RevenueScheduleService.RecognizeResult recognize(Set<Id> revenueScheduleLineIds, ffrr.RevenueScheduleService.RecognitionInformation recognitionInformation)

Recognizes revenue for the given revenue schedule lines.

Input Parameters

Name Type Description
revenueScheduleLineIds Set<Id> Set<Id> of the revenue schedule lines from which to recognize revenue.

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.

// In this example the Revenue Schedule Service is used to create a Revenue Recognition Transaction for each
// Revenue Schedule Line Id passed in to the service method.
// The recognize method is called with a RecognitionInformation object that sets the recognition date.

// Retrieve the Ids of the Revenue Schedule Lines that will be used to create Revenue Recognition Transactions from.
Map<Id, ffrr__RevenueScheduleLine__c> scheduleLinesByIds = new Map<Id, ffrr__RevenueScheduleLine__c>([SELECT Id, Name FROM ffrr__RevenueScheduleLine__c]);

ffrr.RevenueScheduleService.RecognitionInformation recognitionInformation = new ffrr.RevenueScheduleService.RecognitionInformation();
recognitionInformation.setRecognitionDate(Date.newInstance(2022, 01, 31));

// Get the results that have been generated by this service
ffrr.RevenueScheduleService.RecognizeResult result = ffrr.RevenueScheduleService.recognize(scheduleLinesByIds.keySet(), recognitionInformation);

for(Id successfulLineId : result.getSuccessfulLineIds()) {
  System.debug('Successful Line Id ' + successfulLineId);
}
for(Id invalidLineId : result.getInvalidLineIds()) {
  System.debug('Invalid Line Id ' + invalidLineId);

  for(String error : result.getErrorsForId(invalidLineId)) {
    System.debug('Error ' + error);
  }
}

recognizeAsync

global static Id recognizeAsync(ffrr.RevenueScheduleService.RecognitionFilters recognitionFilters, ffrr.RevenueScheduleService.RecognitionInformation recognitionInformation)

Recognizes all revenue on all revenue schedule lines up until today.

Input Parameters

Name Type Description
recognitionFilters ffrr.RevenueScheduleService.RecognitionFilters Configurable object allowing recognition take into account customisation.
recognitionInformation ffrr.RevenueScheduleService.RecognitionInformation Configurable object allowing recognition take into account customisation.

Return Value

Id of the executing fferpcore__ProcessRun__c record.

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.

// In this example the Revenue Schedule Service is used to asynchronously create a Revenue Recognition Transaction with associated lines for each
// source record type and revenue stream based on the Revenue Schedule Line Id passed in to the service method.
// If the provided ffrr.RecognitionFilters configuration object has no fromDate all valid records from start of time will be retrieved
// If the provided ffrr.RecognitionFilters configuration object has no untilDate all valid records until end of time will be retrieved
// If the provided ffrr.RecognitionFilters configuration object has no revenueScheduleLineIds all valid records will be retrieved in conjunction of the fromDate and untilDate

// Retrieve the Ids of the Revenue Schedule Lines that will be used to create Revenue Recognition Transactions from.
Map<Id, ffrr__RevenueScheduleLine__c> scheduleLinesByIds = new Map<Id, ffrr__RevenueScheduleLine__c>([SELECT Id, Name FROM ffrr__RevenueScheduleLine__c]);

ffrr.RevenueScheduleService.RecognitionFilters recognitionFilters = new ffrr.RevenueScheduleService.RecognitionFilters();
recognitionFilters.setFromDate(Date.newInstance(2022, 01, 01));
recognitionFilters.setUntilDate(Date.newInstance(2022, 01, 31));

ffrr.RevenueScheduleService.RecognitionInformation recognitionInformation = new ffrr.RevenueScheduleService.RecognitionInformation();
recognitionInformation.setRecognitionDate(Date.newInstance(2022, 01, 31));

// Sets the optional revenue schedule line Ids to be taken into consideration when recognizing schedules
recognitionFilters.setRevenueScheduleLineIds(scheduleLinesByIds.keySet());

// Calls recognition service
ffrr.RevenueScheduleService.recognizeAsync(recognitionFilters, recognitionInformation);

ffrr.RevenueScheduleService.GenerateConfig

global with sharing class GenerateConfig

Class that contains the configuration to be used for generating schedules

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.

// Configure the way generate revenue schedules should be performed
ffrr.RevenueScheduleService.GenerateConfig config = new ffrr.RevenueScheduleService.GenerateConfig();

// Set the allOrNone configuration to false to continue with schedule generation process even if one or more of the schedules could not be created
config.allOrNone = false;

Properties

Name Type Description
allOrNone Boolean Boolean to specify whether the generation should be all or none. If true when a record is invalid then all schedules will fail to be generated. If false, only valid records will cause a schedule to be generated. If unset defaults to true.

Methods

GenerateConfig

global GenerateConfig()

ffrr.RevenueScheduleService.GenerateResult

global with sharing class GenerateResult

Class that contains the results given back from the generate method.

Properties

Name Type Description
sourceRecordId Id Id of the source record associated with these results.
scheduleId Id Id of the generated revenue schedule.
success Boolean Boolean to indicate whether the revenue schedule was generated.
errors List<String> List of errors that occurred when attempting to generate the revenue schedule.

ffrr.RevenueScheduleService.RecognitionFilters

global inherited sharing class RecognitionFilters

Identifies the information to be recognized by a recognize method.
Adding multiple filters, such as line ids and an until date will join the filter together with an AND. This means only RSL with Ids in your Id set and date =< untilDate will be processed.

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.

// Configure the way recognizing of Revenue Schedules should be performed
ffrr.RevenueScheduleService.RecognitionFilters recognitionFilters = new ffrr.RevenueScheduleService.RecognitionFilters();

// Sets the date (inclusive) dictating when we start taking Revenue Schedule Lines into consideration for recognition
recognitionFilters.setFromDate(Date.newInstance(2022, 01, 01));

// Sets the date (inclusive) dictating when we stop taking Revenue Schedule Lines into consideration for recognition
recognitionFilters.setUntilDate(Date.newInstance(2022, 01, 31));

// Sets the optional revenue schedule line Ids to be taken into consideration when recognizing schedules
// If passed in only those schedule lines will be recognized, otherwise all valid schedule lines will be recognized
Map<Id, ffrr__RevenueScheduleLine__c> scheduleLinesByIds = new Map<Id, ffrr__RevenueScheduleLine__c>([SELECT Id, Name FROM ffrr__RevenueScheduleLine__c]);
recognitionFilters.setRevenueScheduleLineIds(scheduleLinesByIds.keySet());

Methods

RecognitionFilters

global RecognitionFilters()

setFromDate

global void setFromDate(Date fromDate)

Sets the date (inclusive) dictating when we start taking Revenue Schedule Lines into consideration for recognition

Input Parameters

Name Type Description
fromDate Date Date from when Revenue Schedule Lines start getting taken into consideration for recognizing

setUntilDate

global void setUntilDate(Date untilDate)

Sets the date (inclusive) dictating when we stop taking Revenue Schedule Lines into consideration for recognition

Input Parameters

Name Type Description
untilDate Date Date until when Revenue Schedule Lines will be taken into consideration for recognizing

setRevenueScheduleLineIds

global void setRevenueScheduleLineIds(Set<Id> revenueScheduleLineIds)

Sets the optional revenue schedule line Ids to be taken into consideration when recognizing schedules If passed in only those schedule lines will be recognized, otherwise all valid schedule lines will be recognized

Input Parameters

Name Type Description
revenueScheduleLineIds Set<Id> Schedule Line id's to be recognized

setRevenueScheduleLineIds

global void setRevenueScheduleLineIds(List<Id> revenueScheduleLineIds)

Sets the optional revenue schedule line Ids to be taken into consideration when recognizing schedules If passed in only those schedule lines will be recognized, otherwise all valid schedule lines will be recognized

Input Parameters

Name Type Description
revenueScheduleLineIds List<Id> Schedule Line id's to be recognized

ffrr.RevenueScheduleService.RecognitionInformation

global inherited sharing class RecognitionInformation

Information required by the recognition process

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.

// Configure the way recognizing of Revenue Schedules should be performed
ffrr.RevenueScheduleService.RecognitionInformation recognitionInformation = new ffrr.RevenueScheduleService.RecognitionInformation();

// Sets the date which will appear on all the Revenue Recognition Transaction Lines as their recognition date
recognitionInformation.setRecognitionDate(Date.newInstance(2022, 01, 31));

// Gets the currently set recognitionDate
Date recognitionDate = recognitionInformation.getRecognitionDate();

Methods

RecognitionInformation

global RecognitionInformation()

setRecognitionDate

global void setRecognitionDate(Date recognitionDate)

Sets the date which will appear on all the Revenue Recognition Transaction Lines as their recognition date

Input Parameters

Name Type Description
recognitionDate Date Date determining what gets stamped on the revenue schedule lines as their recognition date

ffrr.RevenueScheduleService.RecognizeResult

global inherited sharing class RecognizeResult

Config to allow us to turn off sending of emails, useful for system tests to avoid salesforce limitations. Don't globally expose this parameter.

Methods

RecognizeResult

global RecognizeResult()

getSuccessfulLineIds

global Set<Id> getSuccessfulLineIds()

getInvalidLineIds

global Set<Id> getInvalidLineIds()

getErrorsForId

global Set<String> getErrorsForId(Id invalidID)

© Copyright 2009–2022 FinancialForce.com, inc. All rights reserved. Various trademarks held by their respective owners.