Change fflib_SObjects2 to fflib_ISObjects2 for getParentFieldById methods (#75)

This commit is contained in:
William Velzeboer
2026-01-20 12:00:40 +00:00
committed by GitHub
parent 5c14faa02e
commit 2051e8f381
2 changed files with 58 additions and 13 deletions
@@ -30,7 +30,11 @@
public interface fflib_ISObjects2 extends fflib_ISObjects
{
Map<Id, Set<Id>> getChildIdsById(Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField);
Map<Id, Id> getParentIdById(Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField);
Map<Id, Boolean> getParentBooleanFieldById(Schema.SObjectField valueField, Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField);
Map<Id, Decimal> getParentDecimalFieldById(Schema.SObjectField valueField, Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField);
Map<Id, Id> getParentIdById(Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField);
Map<Id, Id> getParentIdFieldById(Schema.SObjectField valueField, Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField);
Map<Id, String> getParentStringFieldById(Schema.SObjectField valueField, Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField);
// DEPRECATED METHODS
Map<Id, Id> getGrandParentIdById(List<fflib_ISObjects2> relatedDomains);
@@ -131,12 +131,12 @@ public virtual class fflib_SObjects2
*/
public virtual Map<Id, String> getParentStringFieldById(
Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField)
Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_SObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1);
List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue(
parentIdByChildId,
@@ -172,12 +172,12 @@ public virtual class fflib_SObjects2
*/
public virtual Map<Id, Decimal> getParentDecimalFieldById(
Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField)
Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_SObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1);
List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue(
parentIdByChildId,
@@ -213,12 +213,12 @@ public virtual class fflib_SObjects2
*/
public virtual Map<Id, Boolean> getParentBooleanFieldById(
Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField)
Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_SObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1);
List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue(
parentIdByChildId,
@@ -227,6 +227,47 @@ public virtual class fflib_SObjects2
lastGrandParentDomain.getSObjectType().getDescribe().fields.getMap().get('Id')));
}
/**
* Gets the field value from the last given grandparent domain by the record Id
*
* @param valueField The field use return as value for the map
* @param domainsByRelationshipField A Map of domains and the in hierarchical order from first parent to grandparent
*
* @return Returns a map with KEY: The Ids of the records in this domain,
* to the VALUE: The value of the given valueField of the last grandparent record listed in the relatedDomains,
* null if no grandparent exists.
*
* @example
* ICases casesDomain = Cases.newInstance(caseRecords);
* IContacts contactsDomain = Contacts.newInstance(contactRecords);
* IAccount accountDomain = Accounts.newInstance(accountRecords);
*
* // A map with key - Case.Id to value - Account.Id
* Map<Id, Object> accountNameByCaseId =
* casesDomain.getParentBooleanFieldById(
* Schema.Account.Name,
* new Map<Schema.SObjectField, fflib_SObjects2>
* {
* Schema.Case.ContactId => contactDomain,
* Schema.Contact.AccountId => accountDomain
* });
*/
public virtual Map<Id, Id> getParentIdFieldById(
Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue(
parentIdByChildId,
lastGrandParentDomain.getIdFieldByIdField(
valueField,
lastGrandParentDomain.getSObjectType().getDescribe().fields.getMap().get('Id')));
}
/**
* Creates a map between the record Ids of this domain to the last given grandparent domain.
*
@@ -250,16 +291,16 @@ public virtual class fflib_SObjects2
* Schema.Contact.AccountId => accountDomain
* });
*/
public virtual Map<Id, Id> getParentIdById(Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField)
public virtual Map<Id, Id> getParentIdById(Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{
// Clone the domain map as we are about to modify it within this method
Map<SObjectField, fflib_SObjects2> domains = domainsByRelationshipField.clone();
Map<SObjectField, fflib_ISObjects2> domains = domainsByRelationshipField.clone();
// Takes the highest related domain from the domains
Schema.SObjectField relationshipField =
new List<Schema.SObjectField>(domains.keySet())
.get(0);
fflib_SObjects2 relatedDomain = domains.remove(relationshipField);
fflib_ISObjects2 relatedDomain = domains.remove(relationshipField);
// Extract the Id values of the related SObjectType
Map<Id, Id> result = getIdFieldByIdField(