Sub Queries
public Contact getRelatedDetails(Id userId){
fflib_QueryFactory qf = new fflib_QueryFactory(Contact.sObjectType);
qf.selectField('name').selectField('Id').setCondition('Id In (Select ContactId from User where Id=:userId)');
qf.subselectQuery('Goals__r').selectField('Id');
qf.subselectQuery('Account_Client__r').selectField('Id').selectField('External_Id__c').selectField('Institution_Account__c').setCondition('Status__c=\'Active\'');
Contact bpContact = Database.query(qf.toSOQL());
return bpContact;
}
Pagination with Ordering
public List<Goal__c> selectByUserIdAndPageNumber(Id userId, Integer pageNumber){
Integer calcOffset = pageNumber * 200;
fflib_QueryFactory goalQueryFactory = newQueryFactory();
fflib_QueryFactory.Ordering ordering = new fflib_QueryFactory.Ordering(Goal__c.CreatedDate, fflib_QueryFactory.SortOrder.DESCENDING, false);
goalQueryFactory.addOrdering(ordering);
List<fflib_QueryFactory.Ordering> orderings = goalQueryFactory.getOrderings();
orderings.remove(0);
String queryWithOffSet = goalQueryFactory.setCondition('Client__c in (Select ContactId from User where Id=:userId)').setLimit(maxGoalsPerPage).toSOQL() + ' offset ' + calcOffset;
return (List<Goal__c>) Database.query(queryWithOffSet);
}
Aggregate Query
public List<AggregateResult> getAggregateDetails(List<Id> securityIds){
String selectedACLevel = 'Level_1__c';
String formatQuery = String.format('Select {0} sumOfAllocPercent, {1} from Classification__c where Security__c IN :securityIds Group By {2}', new String[]{'sum(Asset_Percent__c)', selectedACLevel, selectedACLevel});
List<AggregateResult> aggregateResultForAC= (List<AggregateResult>) Database.query(formatQuery);
return aggregateResultForAC;
}