From 2051e8f381d353b7d8bc46ae5f3a9e47d9c30fd4 Mon Sep 17 00:00:00 2001 From: William Velzeboer <6429417+wimvelzeboer@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:00:40 +0000 Subject: [PATCH] Change fflib_SObjects2 to fflib_ISObjects2 for getParentFieldById methods (#75) --- .../classes/domains/fflib_ISObjects2.cls | 6 +- .../classes/domains/fflib_SObjects2.cls | 65 +++++++++++++++---- 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/sfdx-source/apex-extensions/main/default/classes/domains/fflib_ISObjects2.cls b/sfdx-source/apex-extensions/main/default/classes/domains/fflib_ISObjects2.cls index 6e1778d..8f771bd 100644 --- a/sfdx-source/apex-extensions/main/default/classes/domains/fflib_ISObjects2.cls +++ b/sfdx-source/apex-extensions/main/default/classes/domains/fflib_ISObjects2.cls @@ -30,7 +30,11 @@ public interface fflib_ISObjects2 extends fflib_ISObjects { Map> getChildIdsById(Map domainsByRelationshipField); - Map getParentIdById(Map domainsByRelationshipField); + Map getParentBooleanFieldById(Schema.SObjectField valueField, Map domainsByRelationshipField); + Map getParentDecimalFieldById(Schema.SObjectField valueField, Map domainsByRelationshipField); + Map getParentIdById(Map domainsByRelationshipField); + Map getParentIdFieldById(Schema.SObjectField valueField, Map domainsByRelationshipField); + Map getParentStringFieldById(Schema.SObjectField valueField, Map domainsByRelationshipField); // DEPRECATED METHODS Map getGrandParentIdById(List relatedDomains); diff --git a/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls b/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls index 73dc37c..619a560 100644 --- a/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls +++ b/sfdx-source/apex-extensions/main/default/classes/domains/fflib_SObjects2.cls @@ -131,12 +131,12 @@ public virtual class fflib_SObjects2 */ public virtual Map getParentStringFieldById( Schema.SObjectField valueField, - Map domainsByRelationshipField) + Map domainsByRelationshipField) { Map parentIdByChildId = getParentIdById(domainsByRelationshipField); - List domains = domainsByRelationshipField.values(); - fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1); + List 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 getParentDecimalFieldById( Schema.SObjectField valueField, - Map domainsByRelationshipField) + Map domainsByRelationshipField) { Map parentIdByChildId = getParentIdById(domainsByRelationshipField); - List domains = domainsByRelationshipField.values(); - fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1); + List 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 getParentBooleanFieldById( Schema.SObjectField valueField, - Map domainsByRelationshipField) + Map domainsByRelationshipField) { Map parentIdByChildId = getParentIdById(domainsByRelationshipField); - List domains = domainsByRelationshipField.values(); - fflib_SObjects2 lastGrandParentDomain = domains.get(domains.size() - 1); + List 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 accountNameByCaseId = + * casesDomain.getParentBooleanFieldById( + * Schema.Account.Name, + * new Map + * { + * Schema.Case.ContactId => contactDomain, + * Schema.Contact.AccountId => accountDomain + * }); + */ + public virtual Map getParentIdFieldById( + Schema.SObjectField valueField, + Map domainsByRelationshipField) + { + Map parentIdByChildId = getParentIdById(domainsByRelationshipField); + + List 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 getParentIdById(Map domainsByRelationshipField) + public virtual Map getParentIdById(Map domainsByRelationshipField) { // Clone the domain map as we are about to modify it within this method - Map domains = domainsByRelationshipField.clone(); + Map domains = domainsByRelationshipField.clone(); // Takes the highest related domain from the domains Schema.SObjectField relationshipField = new List(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 result = getIdFieldByIdField(