Een Overzicht van Asynchrone Verwerking in Salesforce

Bij het uitvoeren van een proces in Salesforce is de eerste vraag die je moet stellen of dit synchroon of asynchroon moet worden uitgevoerd. Als de taak kan worden vertraagd en geen onmiddellijk resultaat vereist, is het altijd voordelig om gebruik te maken van de asynchrone processen van Salesforce, omdat ze aanzienlijke voordelen bieden voor je technische architectuur.

Wat Is Asynchrone Verwerking?

Asynchrone processen draaien in hun eigen thread, waardoor de taak kan worden voltooid zonder dat de gebruiker hoeft te wachten. Hier zijn de belangrijkste voordelen:

1. Verbeterde Gebruikerservaring en Prestaties

Aangezien asynchrone processen op de achtergrond draaien, hoeven gebruikers niet te wachten tot ze zijn voltooid. Dit stelt gebruikers in staat om hun werk ongestoord voort te zetten, terwijl ook de paginalaadtijden en de algehele systeemprestaties worden verbeterd.

2. Hogere Limieten

Salesforce legt strenge limieten op aan synchrone transacties, zoals het aantal queries of DML-operaties per transactie. Asynchrone verwerking biedt extra uitvoeringslimieten, waardoor je meer ruimte hebt om je operaties te schalen.

3. Schaalbaarheid

Door complexe of resource-intensieve taken uit te besteden om op de achtergrond uit te voeren, helpt asynchrone verwerking je bedrijf efficiënt te schalen zonder de systeemprestaties in gevaar te brengen.

Hier zijn de verschillende tools die Salesforce biedt voor asynchrone verwerking.

Belangrijke overwegingen

Tot nu toe hebben we asynchrone verwerking verkend, de voordelen ervan, en de verschillende tools die Salesforce biedt voor deze taken. Er zijn echter verschillende belangrijke factoren om te overwegen voordat je asynchrone verwerking kiest voor de behoeften van je bedrijf.

1. Asynchrone Verwerking Heeft Geen SLA

Houd er rekening mee dat asynchrone processen geen gegarandeerde Service Level Agreement (SLA) hebben. Ze worden uitgevoerd in hun eigen thread wanneer er resources beschikbaar zijn, wat betekent dat er geen garantie is dat de taak binnen een specifiek tijdsbestek zal worden voltooid. Daarom is het belangrijk om asynchrone verwerking te vermijden voor bedrijfsprocessen die tijdgevoelig zijn.

2. Kies het Juiste Gereedschap voor de Klus

Zoals eerder vermeld, biedt Salesforce verschillende tools voor asynchrone verwerking, elk ontworpen voor verschillende gebruiksdoeleinden. Het begrijpen van de sterke en zwakke punten van elk gereedschap zal je helpen het meest geschikte gereedschap te kiezen voor jouw specifieke behoeften.

3. Maak Je Code Bulkbestendig

Hoewel Salesforce hogere uitvoeringslimieten biedt voor asynchrone processen, is het nog steeds cruciaal om je operaties te bulkificeren. Dit zorgt ervoor dat je code efficiënt meerdere records kan verwerken, binnen de limieten van het platform blijft en de prestaties behoudt.

4. Implementeer Foutafhandeling en Monitoring

Aangezien asynchrone taken op de achtergrond worden uitgevoerd, zijn robuuste foutafhandeling en monitoring essentieel. Gebruik try-catch-blokken en log fouten naar aangepaste objecten voor gemakkelijker bijhouden. Implementeer ook retry-logica om intermitterende storingen, zoals API-oproep problemen, te beheren om de betrouwbaarheid van uw processen te garanderen.

Diepgaande Verkenning van Asynchrone Tools

Laten we elk van de asynchrone tools in Salesforce van dichterbij bekijken.

Toekomstige Methoden

Toekomstige methoden worden gebruikt voor bewerkingen die onafhankelijk kunnen worden uitgevoerd in hun eigen thread. Een veelvoorkomend gebruik is het uitvoeren van externe webservice-oproepen waarbij de gebruiker niet hoeft te wachten tot de bewerking is voltooid.

Om een toekomstige methode te definiëren, markeer je de methode eenvoudig met de @future-annotatie.

Java

 

public class FutureClass {
@future
 public static void myFutureMethod(list recordIds){
   //code voor langlopende bewerking
 }  
}

Belangrijke punten over toekomstige methoden:

  • Statisch. Toekomstige methoden moeten statisch zijn.
  • Returntype Void. Ze kunnen alleen void retourneren.
  • Primitieve gegevenstypen. Toekomstige methoden kunnen alleen primitieve gegevenstypen accepteren (bijv. String, Integer, Id). Ze kunnen geen complexe objecten als parameters accepteren.
  • Oproepen. Als de toekomstige methode een webservice-oproep moet uitvoeren, moet je het attribuut callout=true opnemen in de annotatie om de methode toe te staan de oproep uit te voeren.
Java

 

public class FutureClass {
@future(callout = true)
 public static void myFutureMethod(){
   //oproep hier
 }  
}

Wachtrijbare Apex

Vergelijkbaar met toekomstige methoden maakt Queueable Apex het mogelijk om bewerkingen uit te voeren in hun eigen thread, waardoor het ideaal is voor langdurige taken. Het maakt gebruik van de Apex jobwachtrij en biedt een flexibelere en krachtigere benadering voor asynchrone verwerking in vergelijking met toekomstige methoden.

Om Queueable Apex te implementeren, moet uw klasse de Queueable-interface implementeren. De klasse moet altijd een execute-methode definiëren, die de logica voor de asynchrone bewerking bevat.

Java

 

public class QueueableClass implements Queueable{
public void execute(QueueableContext context){
  //langdurige bewerking
}
}

U kunt Queueable Apex uitvoeren door System.enqueueJob() aan te roepen, wat de taak aan de wachtrij toevoegt en een taak-ID retourneert. Deze taak-ID kan worden gebruikt om de status van de taak te controleren door het AsyncApexJob-object te bevragen.

Java

 

ID jobID = System.enqueueJob(new QueueableClass());

Belangrijke punten over Queueable Apex:

  • Niet-primitieve gegevenstypen. In tegenstelling tot toekomstige methoden kunt u niet-primitieve gegevenstypen gebruiken als lidvariabelen in een Queueable-klasse.
  • Taakkoppeling. Queueable-taken kunnen worden gekoppeld, waardoor u een tweede taak kunt starten vanuit een al uitgevoerde taak, waardoor een reeks asynchrone bewerkingen ontstaat.

Batch Apex

Wanneer u asynchrone bewerkingen moet uitvoeren op een groot aantal records, is Batch Apex de ideale oplossing. Het verdeelt uw grote gegevensset in kleinere, beheersbare brokken voor verwerking.

Om Batch Apex te implementeren, moet uw klasse de Database.Batchable interface implementeren. De Batch Apex-klasse moet drie methoden definiëren: start, execute en finish.

1. Start Methode

Deze methode wordt uitgevoerd aan het begin van de batchtaak. Het moet de SOQL-query bevatten om het grote gegevensbestand te verzamelen en een QueryLocator retourneren. De governorengrens op het totale aantal records opgehaald door een SOQL-query wordt omzeild in de start methode bij het gebruik van Batch Apex.

Java

 

public Database.QueryLocator start(Database.BatchableContext bc) {}

2. Execute Methode

De execute methode wordt opgeroepen voor elke batch met records. Let op dat de volgorde waarin records worden verwerkt niet gegarandeerd is.

Java

 

public void execute(Database.BatchableContext bc, list<Object>){}

3. Finish Methode

De finish methode wordt opgeroepen nadat alle batches met records zijn verwerkt. Het wordt meestal gebruikt voor nabewerkingstaken, zoals het verzenden van meldings-e-mails. Elke uitvoering van de batchtaak wordt beschouwd als een enkele transactie en governorengrenzen worden gereset voor elke batch.

Om een batchtaak te starten, gebruikt u de Database.executeBatch methode. Dit voegt de batchtaak toe aan de asynchrone wachtrij.

De Database.executeBatch methode neemt twee parameters:

  1. Een instantie van de Batch Apex-klasse.
  2. Een optionele batchgrootteparameter, die het aantal records per batch specificeert. De maximale batchgrootte die u kunt specificeren is 2000.
Java

 

ID batchprocessid = Database.executeBatch(new BatchApex(),2000);

Beste Praktijken bij het Gebruiken van Asynchroon Apex

Voorkom het Triggeren van Toekomstige of Queuebare Methoden in Hoogvolumeprocessen

Wees voorzichtig bij het triggeren van toekomstige of queuebare methoden vanuit processen die de dagelijkse asynchrone limieten kunnen uitputten, zoals Apex-triggers. Deze processen kunnen snel beschikbare asynchrone middelen verbruiken.

Optimaliseer Prestaties

Zorg ervoor dat de prestaties van toekomstige of queuebare methoden zijn geoptimaliseerd. Dit omvat:

  • Het optimaliseren van queries om de verwerkingstijd te verkorten.
  • Het minimaliseren van de duur van webservice-aanroepen.
  • Het stroomlijnen van gerelateerde logica, zoals triggers of flows, om knelpunten te voorkomen.

Gebruik Batch Apex voor Grote Hoeveelheden Gegevens

Bij het verwerken van grote aantallen records, geef altijd de voorkeur aan Batch Apex boven toekomstige of queuebare methoden. Batch Apex is ontworpen om enorme datasets efficiënt te verwerken, terwijl toekomstige en queuebare methoden beter geschikt zijn voor kleinere taken.

Queuebare Apex Biedt Meer Flexibiliteit

Queuebare Apex biedt meer controle over de uitvoering van taken in vergelijking met toekomstige methoden, zoals de mogelijkheid om taken aan elkaar te koppelen of grotere hoeveelheden gegevens efficiënter te verwerken.

Conclusie

In conclusie is asynchrone Apex in Salesforce een krachtig hulpmiddel voor het verwerken van langlopende, resource-intensieve processen met behoud van systeemprestaties en gebruikerservaring. Door de verschillende asynchrone methoden te begrijpen die beschikbaar zijn, zoals Future Methods, Queueable Apex, en Batch Apex, en door best practices te volgen, kunt u efficiënte, schaalbare oplossingen ontwerpen die zowel uw code als de resources van uw systeem optimaliseren. Denk eraan om factoren zoals governor limieten, prestatieoptimalisatie en foutafhandeling te overwegen om ervoor te zorgen dat uw asynchrone taken soepel en betrouwbaar verlopen.

Source:
https://dzone.com/articles/asynchronous-processing-salesforce-overview