Skip to content

Instantly share code, notes, and snippets.

@adtennant
Created May 12, 2016 09:00
Show Gist options
  • Save adtennant/d821ea2426bbfa44465a6d2fa8499808 to your computer and use it in GitHub Desktop.
Save adtennant/d821ea2426bbfa44465a6d2fa8499808 to your computer and use it in GitHub Desktop.
Replacing your Apex Triggers with Processes and Invocable Actions
trigger DefaultEntitlement on Case (before insert, before update) {
Set<Id> accountIds = new Set<Id>();
for (Case c : Trigger.new){
if (c.EntitlementId == null && c.AccountId != null) {
accountIds.add(c.AccountId);
}
}
if(accountIds.size() > 0) {
List <Entitlement> entitlements = [
SELECT StartDate, EndDate, AccountId, AssetId
FROM Entitlement
WHERE AccountId in :accountIds
AND StartDate <= TODAY
AND EndDate >= TODAY
];
if(entitlements.size() > 0) {
Map<Id, Entitlement> entitlementsByAccountId = new Map<Id, Entitlement>();
for(Entitlement e : entitlements) {
entitlementsByAccountId.put(e.AccountId, e);
}
for(Case c : Trigger.new) {
if(c.EntitlementId == null && c.AccountId != null) {
Entitlement e = entitlementsByAccountId.get(c.AccountId);
if(e != null) {
c.EntitlementId = e.Id;
if(c.AssetId == null && e.AssetId != null) {
c.AssetId = e.AssetId;
}
}
}
}
}
}
}
public class DefaultEntitlementAction {
@InvocableMethod(label='Update Default Entitlements' description='Determines the default Entitlement for the Case and returns the updated Cases.')
public static void updateDefaultEntitlements(List<Case> casesToUpdate) {
List<Case> cases = [
SELECT AccountId, EntitlementId, AssetId
FROM Case
WHERE Id :new Map<Id, Case>(casesToUpdate).keySet()
];
Set<Id> accountIds = new Set<Id>();
for (Case c : cases){
if (c.EntitlementId == null && c.AccountId != null) {
accountIds.add(c.AccountId);
}
}
if(accountIds.size() > 0) {
List <Entitlement> entitlements = [
SELECT StartDate, EndDate, AccountId, AssetId
FROM Entitlement
WHERE AccountId in :accountIds
AND StartDate <= TODAY
AND EndDate >= TODAY
];
if(entitlements.size() > 0) {
Map<Id, Entitlement> entitlementsByAccountId = new Map<Id, Entitlement>();
for(Entitlement e : entitlements) {
entitlementsByAccountId.put(e.AccountId, e);
}
for(Case c : cases){
if(c.EntitlementId == null && c.AccountId != null) {
Entitlement e = entitlementsByAccountId.get(c.AccountId);
if(e != null) {
c.EntitlementId = e.Id;
if(c.AssetId == null && e.AssetId != null) {
c.AssetId = e.AssetId;
}
}
}
}
update cases;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment