Merge pull request #20 from JAertgeerts/main

Add getIdFieldByStringField()
This commit is contained in:
William Velzeboer
2022-01-12 11:34:49 +00:00
committed by GitHub
3 changed files with 57 additions and 1 deletions
+13
View File
@@ -29,6 +29,7 @@ Protected methods
- [getDoubleFieldValues](#getdoublefieldvalues)
- [getFieldByField](#getfieldbyfield)
- [getFieldsByField](#getfieldsbyfield)
- [getIdFieldByStringField](#getidfieldbystringfield)
- [getIdFieldByIdField](#getidfieldbyidfield)
- [getIdFieldsByIdField](#getidfieldsbyidfield)
- [getIdFieldValues](#getidfieldvalues)
@@ -138,6 +139,18 @@ Contacts contacts = Contacts.newInstance(records);
Map<Object, Set<Object>> contactIdByAccountId = contacts.getFieldsByField(Contact.Id, Contact.AccountId);
```
<br/><br/>
#### getIdFieldByStringField
Get a map with the string field as the key and the ID as values. Key fields containing null values are omitted.
`protected Map<String, Id> getIdFieldByStringField(Schema.SObjectField valueField, Schema.SObjectField keyField)`
_Example_
```apex
Contacts contacts = Contacts.newInstance(records);
Map<String, Id> accountIdByContactId = contacts.getIdFieldByStringField(Contact.Id, Contact.Name);
```
<br/><br/>
#### getIdFieldByIdField
Get a map with the values of two Id fields. Key fields containing null values are omitted.
@@ -397,6 +397,35 @@ public virtual class fflib_SObjects2
return getRecords().get(0);
}
/**
* Get a map with the values of a String field as key and Id field
* Key fields containing null values are omitted
*
* @param valueField The Id field to use as the Value of the Map
* @param keyField The String field to use as the Key of the map
*
* @return Returns a map with the values of two fields
*
* @example
* Contacts contacts = Contacts.newInstance(records);
* Map<String, Id> accountIdByContactId = contacts.getIdFieldByStringField(Contact.Id, Contact.Name);
*/
@TestVisible
protected virtual Map<String, Id> getIdFieldByStringField(Schema.SObjectField valueField, Schema.SObjectField keyField)
{
Map<String, Id> result = new Map<String, Id>();
for (SObject record : getRecords())
{
if (record.get(keyField) == null) continue;
result.put(
(String) record.get(keyField),
(Id) record.get(valueField)
);
}
return result;
}
/**
* Get a map with the values of two Id fields
* Key fields containing null values are omitted
@@ -121,6 +121,20 @@ private class fflib_SObjects2Test
// todo - add assertions
}
@IsTest
static void itShouldReturnStringById()
{
final String accountName = 'My Account';
final Id accountId = fflib_IDGenerator.generate(Schema.Account.SObjectType);
final Account record = new Account(Id = accountId, Name = accountName);
fflib_SObjects2 domain = new fflib_SObjects2(new List<Account>{ record });
System.Test.startTest();
Map<String, Id> nameById = domain.getIdFieldByStringField(Schema.Account.Id, Schema.Account.Name);
System.Test.stopTest();
System.assert(nameById.containsKey(accountName));
System.assertEquals(accountId, nameById.get(accountName));
}
@IsTest
static void itShouldReturnStringFieldByIdField()
{