diff --git a/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls b/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls index 5f5c80e..136fa16 100644 --- a/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls +++ b/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls @@ -22,11 +22,27 @@ public inherited sharing class ${NAME} return (List<${SObject_API_Name}>) getRecords(); } + public Map getById() + { + return new Map(get${NAME}()); + } + public I${NAME} selectById(Set ids) { return new ${NAME}(getRecords(ids)); } + private I${NAME} get${NAME}ByIdField(Schema.SObjectField sObjectField) + { + Map> sObjectsById = getSObjectsById(sObjectField); + Map result = new Map(); + for (Id idValue : sObjectsById.keySet()) + { + result.put(idValue, new ${NAME}(sObjectsById.get(idValue))); + } + return result; + } + private I${NAME} selectBy(fflib_Criteria criteria) { return new ${NAME}(getRecords(criteria)); diff --git a/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls.child.1.cls b/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls.child.1.cls index 5804dad..3ecb6ea 100644 --- a/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls.child.1.cls +++ b/dev-tools/assets/intelliJ/fileTemplates/AEPE - Domain Structure.cls.child.1.cls @@ -2,5 +2,6 @@ public interface I${NAME} extends fflib_ISObjects { List<${SObject_API_Name}> get${NAME}(); + Map getById(); I${NAME} selectById(Set ids); } \ No newline at end of file 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 faa28ee..1164dc9 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 @@ -703,8 +703,8 @@ public virtual class fflib_SObjects2 * @return Returns a map with the records mapped to the given String field value * * @example - * Account account = Account.newInstance(records); - * Map accountByName = account.getSObjectsByStringField(Account.AccountName); + * Accounts accounts = Account.newInstance(records); + * Map> accountByName = accounts.getSObjectsByStringField(Account.AccountName); */ @TestVisible protected virtual Map> getSObjectsByStringField(Schema.SObjectField sObjectField) diff --git a/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls b/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls index f8cd7a2..c854fcb 100644 --- a/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls +++ b/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls @@ -112,7 +112,6 @@ private class fflib_SObjects2Test domain.getDoubleFieldValues(Account.BillingLatitude); domain.getDoubleFieldValues(Account.BillingLatitude, criteria); domain.getSObjectByIdField(Account.Id); - domain.getSObjectsByIdField(Account.Id); domain.getSObjectByStringField(Account.Name); domain.getSObjectsByStringField(Account.Name); domain.getStringFieldByStringField(Account.Name, Account.AccountNumber); @@ -516,6 +515,27 @@ private class fflib_SObjects2Test System.assertEquals(accountName, (String) results.get(0).get(Schema.Account.Name)); } + @IsTest + static void itShouldGetRecordsByIdFieldValues() + { + final Id accountIdA = fflib_IDGenerator.generate(Schema.Account.SObjectType); + final Id accountIdB = fflib_IDGenerator.generate(Schema.Account.SObjectType); + List records = new List { + new Contact(AccountId = accountIdA), + new Contact(AccountId = accountIdA), + new Contact(AccountId = accountIdB), + new Contact(AccountId = accountIdB), + new Contact(AccountId = accountIdB) + }; + fflib_SObjects2 domain = new fflib_SObjects2(records); + + Map> results = domain.getSObjectsByIdField(Schema.Contact.AccountId); + + System.assertEquals(2, results.size()); + System.assertEquals(2, results.get(accountIdA).size()); + System.assertEquals(3, results.get(accountIdB).size()); + } + @IsTest static void itShouldSetField() {