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 public interface fflib_ISObjects2 extends fflib_ISObjects
{ {
Map<Id, Set<Id>> getChildIdsById(Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField); 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 // DEPRECATED METHODS
Map<Id, Id> getGrandParentIdById(List<fflib_ISObjects2> relatedDomains); Map<Id, Id> getGrandParentIdById(List<fflib_ISObjects2> relatedDomains);
@@ -131,12 +131,12 @@ public virtual class fflib_SObjects2
*/ */
public virtual Map<Id, String> getParentStringFieldById( public virtual Map<Id, String> getParentStringFieldById(
Schema.SObjectField valueField, Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField) Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{ {
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField); Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_SObjects2> domains = domainsByRelationshipField.values(); List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1); fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue( return fflib_ArrayUtils.replaceValue(
parentIdByChildId, parentIdByChildId,
@@ -172,12 +172,12 @@ public virtual class fflib_SObjects2
*/ */
public virtual Map<Id, Decimal> getParentDecimalFieldById( public virtual Map<Id, Decimal> getParentDecimalFieldById(
Schema.SObjectField valueField, Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField) Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{ {
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField); Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_SObjects2> domains = domainsByRelationshipField.values(); List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1); fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue( return fflib_ArrayUtils.replaceValue(
parentIdByChildId, parentIdByChildId,
@@ -213,12 +213,12 @@ public virtual class fflib_SObjects2
*/ */
public virtual Map<Id, Boolean> getParentBooleanFieldById( public virtual Map<Id, Boolean> getParentBooleanFieldById(
Schema.SObjectField valueField, Schema.SObjectField valueField,
Map<Schema.SObjectField, fflib_SObjects2> domainsByRelationshipField) Map<Schema.SObjectField, fflib_ISObjects2> domainsByRelationshipField)
{ {
Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField); Map<Id, Id> parentIdByChildId = getParentIdById(domainsByRelationshipField);
List<fflib_SObjects2> domains = domainsByRelationshipField.values(); List<fflib_ISObjects2> domains = domainsByRelationshipField.values();
fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1); fflib_SObjects2 lastGrandParentDomain = (fflib_SObjects2) domains.get(domains.size() - 1);
return fflib_ArrayUtils.replaceValue( return fflib_ArrayUtils.replaceValue(
parentIdByChildId, parentIdByChildId,
@@ -227,6 +227,47 @@ public virtual class fflib_SObjects2
lastGrandParentDomain.getSObjectType().getDescribe().fields.getMap().get('Id'))); 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. * 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 * 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 // 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 // Takes the highest related domain from the domains
Schema.SObjectField relationshipField = Schema.SObjectField relationshipField =
new List<Schema.SObjectField>(domains.keySet()) new List<Schema.SObjectField>(domains.keySet())
.get(0); .get(0);
fflib_SObjects2 relatedDomain = domains.remove(relationshipField); fflib_ISObjects2 relatedDomain = domains.remove(relationshipField);
// Extract the Id values of the related SObjectType // Extract the Id values of the related SObjectType
Map<Id, Id> result = getIdFieldByIdField( Map<Id, Id> result = getIdFieldByIdField(