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 f229323..faa28ee 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 @@ -585,6 +585,34 @@ public virtual class fflib_SObjects2 .getLongFieldValues(sObjectField); } + @TestVisible + protected virtual List getRecords(Schema.SObjectField sObjectField, Set values) + { + List result = new List(); + for (SObject record : getRecords()) + { + if (values?.contains((Id) record.get(sObjectField))) + { + result.add(record); + } + } + return result; + } + + @TestVisible + protected virtual List getRecords(Schema.SObjectField sObjectField, Set values) + { + List result = new List(); + for (SObject record : getRecords()) + { + if (values?.contains((String) record.get(sObjectField))) + { + result.add(record); + } + } + return result; + } + /** * Get a map with the record mapped to the given Id field value * Key fields containing null values are omitted diff --git a/sfdx-source/apex-extensions/main/unitOfWork/classes/fflib_SObjectUnitOfWork2.cls b/sfdx-source/apex-extensions/main/unitOfWork/classes/fflib_SObjectUnitOfWork2.cls new file mode 100644 index 0000000..2d39517 --- /dev/null +++ b/sfdx-source/apex-extensions/main/unitOfWork/classes/fflib_SObjectUnitOfWork2.cls @@ -0,0 +1,18 @@ +public virtual with sharing class fflib_SObjectUnitOfWork2 + extends fflib_SObjectUnitOfWork + implements fflib_ISObjectUnitOfWork +{ + public fflib_SObjectUnitOfWork2(List sObjectTypes) + { + super(sObjectTypes); + } + public fflib_SObjectUnitOfWork2(List sObjectTypes, IDML dml) + { + super(sObjectTypes, dml); + } + + public virtual void registerDirty(fflib_ISObjects domain) + { + registerDirty(domain.getRecords()); + } +} \ No newline at end of file diff --git a/sfdx-source/apex-extensions/main/unitOfWork/classes/fflib_SObjectUnitOfWork2.cls-meta.xml b/sfdx-source/apex-extensions/main/unitOfWork/classes/fflib_SObjectUnitOfWork2.cls-meta.xml new file mode 100644 index 0000000..f928c8e --- /dev/null +++ b/sfdx-source/apex-extensions/main/unitOfWork/classes/fflib_SObjectUnitOfWork2.cls-meta.xml @@ -0,0 +1,5 @@ + + + 53.0 + Active + 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 00d97b2..f8cd7a2 100644 --- a/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls +++ b/sfdx-source/apex-extensions/tests/classes/domains/fflib_SObjects2Test.cls @@ -482,6 +482,40 @@ private class fflib_SObjects2Test System.assert(domain.getFirstSObject().get('Rating') == 'Warm'); } + @IsTest + static void itShouldGetRecordByIdFieldValues() + { + final Id accountId = fflib_IDGenerator.generate(Schema.Account.SObjectType); + List records = new List { + new Account(Id = accountId), + new Account(Id = fflib_IDGenerator.generate(Schema.Account.SObjectType)), + new Account(Id = fflib_IDGenerator.generate(Schema.Account.SObjectType)) + }; + fflib_SObjects2 domain = new fflib_SObjects2(records); + + List results = domain.getRecords(Schema.Account.Id, new Set {accountId}); + + System.assertEquals(1, results.size()); + System.assertEquals(accountId, results.get(0).Id); + } + + @IsTest + static void itShouldGetRecordByStringFieldValues() + { + final String accountName = 'Test'; + List records = new List { + new Account(Name = accountName), + new Account(Name = accountName + 'A'), + new Account(Name = 'Demo') + }; + fflib_SObjects2 domain = new fflib_SObjects2(records); + + List results = domain.getRecords(Schema.Account.Name, new Set {accountName}); + + System.assertEquals(1, results.size()); + System.assertEquals(accountName, (String) results.get(0).get(Schema.Account.Name)); + } + @IsTest static void itShouldSetField() {