Verwerking van records in bulk om CPU-limieten te vermijden, voorbeeld
Leer hoe u stromen refactoren geeft om bulkverwerkingspatronen te gebruiken die Apex_CPU_TIME_LIMIT_EXCEEDED fouten voorkomen. Dit voorbeeld toont het verschil tussen inefficiënt en geoptimaliseerd stroomontwerp.
Vereiste editions
| Ondersteunde editions weergeven. |
| Vereiste gebruikersmachtigingen | |
|---|---|
| Een stroom openen, bewerken, maken, activeren of deactiveren met behulp van alle stroomtypen, elementen en voorzieningen die beschikbaar zijn in Flow Builder, inclusief Einstein en Agentforce voor Flow: | Stroom beheren |
In dit voorbeeld ziet u hoe u een stroom die Data Manipulation Language (DML) binnen een lus uitvoert, transformeert in een bulkstroom die records efficiënt verwerkt. Bekijk een vergelijking vóór en na en leer de beginselen van bulkverwerking van stromen.
Scenario
Stel een door records geactiveerde stroom samen die wordt uitgevoerd wanneer een opportunity wordt gesloten. Voor elke gesloten gewonnen opportunity maakt de stroom een vervolgtaak voor elk lid van het opportunityteam. De stroom:
- Haalt alle opportunityteamleden op.
- Maakt een taak die is toegewezen aan elk teamlid.
- Werkt efficiënt, zelfs wanneer gebruikers meerdere opportunities tegelijk bijwerken.
- Voorkomt Apex_CPU_TIME_LIMIT_EXCEEDED fouten tijdens bulkbewerkingen.
Salesforce hanteert één CPU-tijdlimiet van 10.000 milliseconden (10 seconden) per synchrone transactie. Elk stukje automatisering in die transactie (Apex triggers, stromen, werkstroomregels en processen) wordt uit hetzelfde budget gehaald. Een inefficiënt stroomontwerp verergert het probleem. Andere automatiseringen in de transactie trekken eerst het gedeelde budget op, terwijl een inefficiënte stroom meer verbruikt dan nodig is van wat er overblijft.
De volgorde waarin stromen worden uitgevoerd, is afhankelijk van het stroomtype. Dit voorbeeld gebruikt een door records geactiveerde stroom na opslaan, die later in de volgorde wordt uitgevoerd dan stromen vóór opslaan. Zie Triggers en volgorde van uitvoering voor details over de uitvoeringsvolgorde.
Inefficiënte aanpak: DML-bewerkingen binnen een lus
Deze benadering veroorzaakt CPU-limietfouten bij het verwerken van meerdere opportunities.
Stroomstructuur: De stroom begint met een door records geactiveerde stroom voor het object Opportunity die wordt uitgevoerd na een recordupdate wanneer Fase gelijk is aan "Gesloten gewonnen". De stroom gebruikt Records ophalen om opportunityteamleden op te halen voor de activerende record en doorloopt vervolgens de verzameling. Binnen de lus maakt een element Records maken één taak voor elk teamlid.
Waarom deze benadering mislukt:
- Elke lusherhaling voert een afzonderlijke DML-bewerking uit.
- Een opportunity met 5 teamleden resulteert in 5 DML-bewerkingen.
- Wanneer gebruikers 20 opportunities tegelijk bijwerken, verwerkt de stroom alle opportunities in één transactie.
- 20 opportunities × 5 teamleden elk = 100 DML-bewerkingen in één transactie.
- De cumulatieve CPU-tijd van 100 DML-bewerkingen overschrijdt de beheerlimiet.
- Resultaat: Apex_CPU_TIME_LIMIT_EXCEEDED fout.
Efficiënte aanpak: Op verzameling gebaseerde bulkverwerking
Deze benadering verwerkt records efficiënt, ongeacht het volume.
Stroomstructuur: De stroom begint met een door records geactiveerde stroom voor het object Opportunity en gebruikt Records ophalen om opportunityteamleden op te halen. De stroom maakt een recordvariabele Taak en een recordverzamelingsvariabele Taak. De recordvariabele bevat de huidige taak waaraan de stroom werkt, terwijl de recordverzameling de te maken taken bevat. De stroom loopt door de teamleden. Binnen de lus stelt een element Toewijzing elke taakrecord samen door waarden in te stellen voor de recordvariabele Taak en relateert de taak aan het huidige teamlid in de lus. Een ander element Toewijzing voegt de waarden van de recordvariabele Taak toe aan de recordverzameling Taak. Nadat de lus is voltooid, maakt één element Records maken alle taken uit de verzameling.
Waarom dit werkt:
- De lus stelt een verzameling taakrecords samen zonder DML-bewerkingen uit te voeren.
- Er vindt slechts één DML-bewerking plaats nadat de lus is voltooid.
- Een opportunity met 5 teamleden resulteert nog steeds in slechts 1 DML-bewerking (waarbij 5 taken tegelijk worden gemaakt).
- Wanneer gebruikers 20 opportunities tegelijk bijwerken, voert de stroom in totaal 20 DML-bewerkingen uit (één per opportunity).
- Aanzienlijke reductie in CPU-tijdverbruik.
- Resultaat: Stroom wordt met succes voltooid zonder beheerlimieten te bereiken.
Prestatievergelijking
| Scenario | Inefficiënt (DML in lus) | Efficiënt (bulkgedrukt) |
|---|---|---|
| 1 opportunity met 5 teamleden | 5 DML-bewerkingen | 1 DML-bewerking |
| 20 opportunities (bulkupdate) met elk 5 teamleden | 100 DML-bewerkingen (Waarschijnlijk mislukt met CPU-limietfout) |
20 DML-bewerkingen (Voltooid met succes) |
| 100 opportunities (gegevens laden) met elk 3 teamleden | 300 DML-bewerkingen (Zeker mislukt) |
100 DML-bewerkingen (Voltooid met succes) |
Belangrijkste beginselen van bulkverwerking
- Voer nooit DML-bewerkingen uit binnen lussen. Verzamel altijd records in een verzamelingsvariabele tijdens de lus en voer vervolgens DML uit nadat de lus is voltooid.
- Ontwerp voor bulkbewerkingen vanaf het begin. Stel dat door records geactiveerde stromen meerdere records tegelijkertijd verwerken.
- Gebruik recordverzamelingsvariabelen. Op verzameling gebaseerde DML-bewerkingen zijn aanzienlijk efficiënter dan afzonderlijke bewerkingen.
- Test met realistische volumes. De foutopsporingsmodus met één record onthult geen problemen met bulkbewerkingen. Test met de wizard Gegevens importeren, de Data Loader of bulkupdates.
- Bewaak prestaties. Controleer foutopsporingslogboeken om te bepalen welke stromen beheerlimieten benaderen voordat ze mislukken in productie.
Stappen op hoog niveau
Bekijk de stappen van dit voorbeeld. Volg ze in de juiste volgorde of ga naar een sectie voor meer specifieke instructies.
- De stroom maken
Stel de door records geactiveerde stroom in voor uitvoering wanneer opportunities worden gesloten. - Resources maken
Maak de variabelen die nodig zijn voor bulkverwerking. - Teamleden ophalen
Haal de records voor opportunityteamleden op voor verwerking door middel van een element Records ophalen. - Een beslissing toevoegen om te controleren op teamleden
Voeg een element Beslissing toe om verwerking te voorkomen wanneer er geen teamleden zijn. - Een luselement toevoegen
Voeg een element Lus toe voor herhaling door teamleden. - Taakrecords samenstellen binnen de lus
Vul veldwaarden in voor de recordvariabele TaskRecord voor elk teamlid binnen de lus. - Taken toevoegen aan de verzameling
Voeg elke taakrecord toe aan de verzamelingsvariabele TasksToCreate voor bulksgewijs maken. - Alle taken maken na de lus
Gebruik één element Records maken om alle taken in één bewerking te maken. - Foutafhandeling toevoegen
Configureer foutenbeheer om fouten vast te leggen en te melden. - Testen met bulkgegevens
Het testen van bulkstromen vereist het simuleren van bulkbewerkingen. - Meer optimaliseringstechnieken
Optimaliseer bulkstromen verder met deze technieken. - Bestaande stromen converteren
Converteer stromen met DML-bewerkingen (Data Manipulation Language) in lussen naar bulkpatronen.
De stroom maken
Stel de door records geactiveerde stroom in voor uitvoering wanneer opportunities worden gesloten.
-
Open de lijstweergave Stromen.
- Geef vanuit Set-up Stromen op in het vak Snel zoeken en selecteer vervolgens Stromen.
- Selecteer vanuit de app Automatisering het tabblad Stromen.
- Klik vanaf het tabblad Stromen in een Lightning app op het actiemenu en selecteer Stroom openen.
-
Een door records geactiveerde stroom maken.
- Klik vanuit de Automation Lightning app op Nieuw. Zoek naar en selecteer Door record geactiveerde stroom.
- Klik vanuit Set-up op Nieuwe stroom, zoek naar en selecteer Door record geactiveerde stroom.
Het deelvenster Start configureren wordt geopend. -
Configureer het element Start.
- Selecteer bij Object Opportunity.
- Selecteer bij De stroom activeren wanneer Een record wordt bijgewerkt.
- Selecteer in de sectie Invoervoorwaarden instellen, Voor voorwaardevereisten, Aan alle voorwaarden wordt voldaan (AND).
- Selecteer bij Veld Fase.
- Selecteer voor Operator Is gelijk aan.
- Selecteer bij Waarde Gesloten gewonnen.
- Selecteer bij Stroom optimaliseren Acties en gerelateerde records.
Resources maken
Maak de variabelen die nodig zijn voor bulkverwerking.
-
Maak voor het samenstellen van elke taak een recordvariabele voor het samenstellen van taakrecords.
-
Klik voor het openen van de Toolbox op
.
- Klik op Nieuwe resource en selecteer vervolgens Variabele.
- Geef bij API-naam TaskRecord op.
- Selecteer bij Gegevenstype de optie Record.
- Selecteer bij Object Taak.
- Klik op Gereed.
-
Klik voor het openen van de Toolbox op
-
Maak voor het opslaan van alle taken een recordverzamelingsvariabele voor alle taken.
- Klik op Nieuwe resource en selecteer vervolgens Variabele.
- Geef bij API-naam TasksToCreate op.
- Selecteer bij Gegevenstype de optie Record.
- Selecteer bij Object Taak.
- Selecteer Meerdere waarden toestaan (verzameling).
- Klik op Gereed.
Teamleden ophalen
Haal de records voor opportunityteamleden op voor verwerking door middel van een element Records ophalen.
-
Klik op
en zoek en selecteer vervolgens Records ophalen.
-
Configureer het element.
- Geef bij Label Opportunityteamleden ophalen op.
-
Selecteer bij Object Opportunitycontactpersoonsrol.
In dit voorbeeld slaat de stroom teamleden op in het object Opportunitycontactpersoonsrol. Een object dat opportunities koppelt aan contactpersonen.
- Selecteer Opportunity-ID in de sectie Records opportunitycontactpersoonsrol filteren, Voor veld.
- Selecteer voor Operator Is gelijk aan.
- Selecteer bij Waarde Opportunity activeren en vervolgens Opportunity-ID.
- Selecteer Alle records bij Hoeveel records moeten worden opgeslagen.
- Selecteer Automatisch alle velden opslaan bij Recordgegevens opslaan.
Een beslissing toevoegen om te controleren op teamleden
Voeg een element Beslissing toe om verwerking te voorkomen wanneer er geen teamleden zijn.
-
Klik op
en zoek en selecteer vervolgens Beslissing.
-
Configureer de beslissing.
- Geef bij Label Gevonden teamleden? op.
- De API-naam wordt automatisch ingevuld.
- Geef bij Uitkomstlabel Ja op.
- De API-naam wordt automatisch ingevuld.
- Selecteer bij Resource Opportunitycontactpersoonsrollen van opportunityteamleden ophalen.
- Selecteer voor Operator Is null.
- Selecteer bij Waarde Onwaar.
- Klik op Standaarduitkomst.
- Geef bij Label Nee op.
Een luselement toevoegen
Voeg een element Lus toe voor herhaling door teamleden.
-
Klik in het pad Ja op
en zoek vervolgens naar en selecteer Loop.
-
Configureer de lus.
- Geef bij Label de tekst Geletterd door teamleden op.
- De API-naam wordt automatisch ingevuld.
-
Selecteer bij Verzamelingsvariabele Opportunitycontactpersoonsrol van Opportunityteamleden ophalen.
Deze resource wordt weergegeven als enkelvoudig, zelfs als deze meerdere records bevat.
- Selecteer bij Richting Eerste item tot laatste item.
Taakrecords samenstellen binnen de lus
Vul veldwaarden in voor de recordvariabele TaskRecord voor elk teamlid binnen de lus.
-
Klik na Voor elk op
en zoek en selecteer vervolgens Toewijzing.
-
Configureer de toewijzing.
- Geef bij Label Taakrecord samenstellen op.
- De API-naam wordt automatisch ingevuld.
- Selecteer bij Variabele TaskRecord en selecteer vervolgens Onderwerp.
- Selecteer voor Operator Is gelijk aan.
- Geef bij waarde Vervolg op gesloten opportunity op.
- Klik op + Toewijzing toevoegen.
-
Blijf toewijzingen toevoegen en waarden instellen.
Resource Operator Waarde TaskRecord>Status Is gelijk aan Niet gestart TaskRecord>Priority Is gelijk aan Hoog TaskRecord>Toegewezen aan ID Is gelijk aan Huidig item uit Lus>Contactpersoons-ID TaskRecord>Gerelateerd aan ID Is gelijk aan Opportunity activeren>Opportunity-ID
Taken toevoegen aan de verzameling
Voeg elke taakrecord toe aan de verzamelingsvariabele TasksToCreate voor bulksgewijs maken.
-
Klik na het element Toewijzing, en nog steeds in de lus, op
en zoek vervolgens naar en selecteer Toewijzing.
-
Configureer de toewijzing.
- Geef bij Label Taak toevoegen aan verzameling op.
- Selecteer bij Variabele TasksToCreate.
- Selecteer bij Operator Toevoegen.
- Selecteer bij Waarde TaskRecord en vervolgens Gehele resource.
Alle taken maken na de lus
Gebruik één element Records maken om alle taken in één bewerking te maken.
-
Nadat de lus is beëindigd, klikt u op
en zoekt u vervolgens naar en selecteert u Records maken.
-
Configureer het element.
- Geef bij Label Alle taken maken op.
- Selecteer bij Hoe recordveldwaarden in te stellen Vanuit een recordvariabele.
- Selecteer Meerdere bij Hoeveel records te maken.
- Selecteer bij Recordverzameling TasksToCreate.
- Sla de stroom op.
- Geef bij Label Taken maken voor opportunityteamleden op.
- De API-naam wordt automatisch ingevuld.
Foutafhandeling toevoegen
Configureer foutenbeheer om fouten vast te leggen en te melden.
-
Als u fouten wilt beheren, voegt u een foutpad toe aan het element Records maken.
- Klik op de drie puntjes op het element Alle taken maken en selecteer Fouttraject toevoegen.
-
Als u Salesforce-beheerders wilt informeren over fouten in het fouttraject, voegt u een actie E-mail verzenden toe.
-
Klik op het defectenpad op
en zoek vervolgens naar en selecteer E-mail verzenden.
- Geef bij Label Admin informeren over fout op.
- De API-naam wordt automatisch ingevuld.
- Geef bij Ontvangersadressen het e-mailadres op van degene die u de kennisgeving wilt laten ontvangen.
- Geef bij Onderwerp Een stroom heeft uw aandacht nodig
- Geef bij Hoofdtekst De stroom Taken maken voor opportunityteamleden had een fout op. Dit is de fout: .
- Klik op Een resource invoegen.
- Selecteer Stroom uitvoeren en selecteer vervolgens Foutbericht.
-
Klik op het defectenpad op
- Sla uw werk op.
Testen met bulkgegevens
Het testen van bulkstromen vereist het simuleren van bulkbewerkingen.
- Gebruik voor het testen van een afzonderlijke record de foutopsporingsmodus om één opportunity bij te werken en te controleren of de stroom taken correct maakt.
- Activeer de stroom.
-
Gebruik voor het testen van bulkbewerkingen in een sandbox de wizard Gegevens importeren, de Data Loader of een lijstweergave om meerdere opportunities tegelijk bij te werken.
- Maak tussen 10 en 20 testopportunities.
- Voeg teamleden toe aan elke opportunity.
- Gebruik de Data Loader of in bulk bijwerken om de fase te wijzigen in "Gesloten gewonnen" voor alle opportunities tegelijk.
- Controleer of de stroom alle taken zonder fouten maakt.
- Als u de prestaties wilt controleren, controleert u het Apex foutopsporingslogboek om te bevestigen dat het CPU-tijdverbruik binnen aanvaardbare limieten ligt.
Meer optimaliseringstechnieken
Optimaliseer bulkstromen verder met deze technieken.
Invoervoorwaarden gebruiken om uitvoering te beperken
Voeg voorwaarden toe aan het element Start van de stroom om ervoor te zorgen dat deze alleen wordt uitgevoerd wanneer dat nodig is. Verwerk bijvoorbeeld alleen opportunities boven een bepaald bedrag of uit specifieke recordtypen.
After-Save overwegen voor niet-kritieke bewerkingen
Door records geactiveerde stromen na opslaan kunnen vervolgtaken maken nadat u de opportunity hebt opgeslagen. Ze worden asynchroon uitgevoerd en hebben hogere beheerlimieten.
Batchproces voor zeer grote volumes
Als opportunities regelmatig tientallen teamleden hebben, gebruikt u een geplande stroom die gesloten opportunities in batches verwerkt in plaats van in real-time.
Bestaande stromen converteren
Converteer stromen met DML-bewerkingen (Data Manipulation Language) in lussen naar bulkpatronen.
Als u bestaande stromen met DML-bewerkingen in lussen hebt, volgt u deze stappen om ze te converteren.
- Als u DML-bewerkingen in lussen wilt vinden, identificeert u alle elementen Records maken, Records bijwerken en Records verwijderen binnen lussen.
-
Voer voor elk DML-element de conversie uit.
- Maak voor het samenstellen van records een recordvariabele voor dat objecttype.
- Als u de records wilt opslaan die u wilt verwerken, maakt u een recordverzamelingsvariabele voor dat objecttype.
- Gebruik voor het opslaan van veldwaarden voor de records een element Toewijzing om waarden toe te wijzen aan de recordvariabele.
- Gebruik voor het verzamelen van de te verwerken records een toewijzing om de recordvariabele toe te voegen aan de recordverzameling.
- Als u efficiënt records wilt maken, voegt u na de lus één DML-element toe dat de gehele recordverzameling verwerkt.
- Test voor het verifiëren van de conversie grondig met bulkgegevens om te controleren of de refactoring correct werkte.

