SObject UnitOfWork - wimvelzeboer/fflib-apex-extensions GitHub Wiki
Table of Contents
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
Account record = new Account(Name = "My Account");
unitOfWork.registerNew(record);
unitOfWork.commitWork();
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
Account accountRecord = [SELECT Name FROM Account LIMIT 1];
accountRecord.Name = 'Another Name';
unitOfWork.registerDirty(accountRecord);
unitOfWork.commitWork();
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
Account accountRecord = [SELECT Id FROM Account LIMIT 1];
unitOfWork.registerDeleted(accountRecord);
unitOfWork.commitWork();
Example with new records:
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
Account accountRecord = new Account(Name = "My Account");
unitOfWork.registerNew(accountRecord);
Contact contactRecord = new Contact(LastName = 'Smith');
unitOfWork.registerNew(contactRecord, Contact.AccountId, accountRecord);
unitOfWork.commitWork();
Example with existing records:
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
Account accountRecord = [SELECT Id FROM Account LIMIT 1];
Contact contactRecord = [SELECT Id FROM Contact LIMIT 1];
unitOfWork.registerDirty(contactRecords, Contact.AccountId, accountRecord);
unitOfWork.commitWork();
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
message.setOrgWideEmailAddressId(orgWideEmailAddressId);
message.setTemplateID(templateId);
message.setTargetObjectId(contract.Account__r.PersonContactId);
message.setWhatId(contract.Id);
message.setSaveAsActivity(true);
unitOfWork.registerEmail(message);
unitOfWork.commitWork();
public with sharing class MyService
{
public void myMethod()
{
fflib_ISObjectUnitOfWork unitOfWork =
Application.UnitOfWork.newInstance(new ElevatedDML());
Account record = new Account(Name = "My Account");
unitOfWork.registerNew(record);
unitOfWork.commitWork();
}
public without sharing class ElevatedDML extends fflib_SObjectUnitOfWork.SimpleDML {}
}
public with sharing class MyService
{
public void myMethod()
{
fflib_ISObjectUnitOfWork unitOfWork =
Application.UnitOfWork.newInstance(
new List<Schema.SObjectType>
{
Account.SObjectType,
Contact.SObjectType
});
Account accountRecord = new Account(Name = "My Account");
unitOfWork.registerNew(accountRecord);
Contact contactRecord = new Contact(LastName = 'Smith');
unitOfWork.registerNew(contactRecord, Contact.AccountId, accountRecord);
unitOfWork.commitWork();
}
}
public with sharing class AccountsServiceImpl
implements IAccountsService
{
public void setRating(Set<Id> ids, String rating)
{
setRating(Accounts.newInstance(ids), rating);
}
public void setRating(List<Account> records, String rating)
{
setRating(Accounts.newInstance(records), rating);
}
public void setRating(IAccounts accounts, String rating)
{
fflib_ISObjectUnitOfWork unitOfWork = Application.UnitOfWork.newInstance();
setRating(unitOfWork, accounts, rating);
unitOfWork.commitWork();
}
public void setRating(
fflib_ISObjectUnitOfWork unitOfWork,
IAccounts accounts,
String rating)
{
accounts.setRating(rating);
unitOfWork.registerDirty(accounts.getRecords());
}