Operational Excellence - Automatiseringspatronen
Lees meer over EPS Kisten van 75 x 70cm (50 x 200 cm) → Automatisering en efficiëntie
Patronen
| Waar te zoeken | Hoe goed eruitziet |
|---|---|
| Platform | Dashboards | ✅ Alle meetgegevens gerelateerd aan KPI’s zijn opgenomen in minstens één dashboard |
| Platform | Documentatie | ✅ Outputs voor elke automatisering zijn meetbaar en tijdgebonden |
| Platform | Documentatie | ✅ Verantwoordelijke belanghebbenden worden vermeld voor elke KPI |
Anti-patronen
| Waar te zoeken | Hoe slecht eruitziet |
|---|---|
| Platform | Dashboards | ⚠️ KPI-rapportage bestaat niet of dashboards ontbreken meetgegevens die zijn gerelateerd aan bepaalde KPI’s |
| Platform | Documentatie | ⚠️ KPI’s bestaan zonder verantwoordelijke belanghebbenden |
| Platform | Documentatie | ⚠️ KPI’s bestaan niet voor automatiseringen of hebben onduidelijke tijdsbestekken voor metingen |
Patronen
| Waar te zoeken | Hoe goed eruitziet |
|---|---|
| Platform | Stroom | ✅ Flow Builder wordt gebruikt voor door records geactiveerde automatisering (ter vervanging van Processamensteller en werkstroomregels) |
| Platform | Stroom | ✅ Door records geactiveerde stromen met uitvoering vóór opslaan worden gebruikt voor veldpopulatie vóór het maken van records |
| Platform | Stroom | ✅ Stromen afhandelen beslissingslogica, lussen, API-aanroepen, DML-bewerkingen en complexe combinatie van meerdere stappen |
| Platform | Stroom | ✅ Stroomtransactiecontrole wordt gebruikt voor het uitvoeren van tussentijdse wijzigingen indien nodig |
| Platform | Stroom | ✅ Foutafhandeling is geïmplementeerd voor elegant foutherstel in stromen |
| Platform | Stroom | ✅ Reactieve schermstromen bieden dynamische gebruikerservaringen |
| Platform | Stroom | ✅ Declaratieve automatisering wordt gekozen wanneer zakelijke gebruikers of beheerders logica moeten wijzigen zonder tussenkomst van de ontwikkelaar |
| Platform | Stroom | ✅ Variabelen verwijzen niet naar hard-coded waarden (voor recordtypen, gebruikers, enz.) |
| Platform | Stroom | ✅ Stroomt handlogica naar Apex in contexten met groot gegevensvolume |
| Platform | Stroom | ✅ Substromen worden gebruikt voor secties van processen die moeten worden hergebruikt binnen het bedrijf |
| Platform | Stroom | ✅ Alle automatisch gestarte stromen gebruiken beslissings- en / of onderbrekingselementen om invoercriteria te evalueren en oneindige lussen of uitvoeringen voor grote gegevensvolumes te voorkomen |
| Platform | Stroom | ✅ Gebruikers worden alleen gevraagd om gegevens te verstrekken wanneer bestaande systeemgegevens niet kunnen worden gebruikt |
| Platform | Stroom | ✅ Stromen zijn georganiseerd in een hiërarchische structuur die bestaat uit een hoofdstroom en ondersteunende substromen |
| Platform | Stroom | ✅ Alle gebruikersinvoer heeft een duidelijk doel binnen de stroom |
| Platform | Stroom | ✅ Elke stroom dient een enkel, specifiek doel |
| Platform | Stroom | ✅ Elke stap voert een specifieke, fijnmazige taak |
| Platform | Stroom | ✅ Alle stromen gestart in gebruikerscontext abstracte systeemcontexttransacties naar substromen, consistent geplaatst na element Onderbreking om nieuwe transactie te maken |
| Platform | Stroom | ✅ Alle door records geactiveerde stromen hebben triggervolgordewaarden ingevuld |
| Platform | Stroom | ✅ Stromen met externe systeemaanroepen of langlopende processen gebruiken asynchrone paden |
| Platform | Stroom | ✅ Complexe reeksen van gerelateerde gegevensbewerkingen worden gemaakt met Orchestrator (in plaats van meerdere substromen aanroepen binnen monolithische stroom) |
| Platform | Validatie | ✅ Gegevensintegriteit wordt afgedwongen op platformniveau met behulp van validatieregels, duplicaatregels en verplichte velden |
| Platform | Validatie | ✅ Validatieregels voorkomen ongeldige gegevensinvoer vóór opslaan (efficiënter dan triggervalidatie) |
| Platform | Goedkeuringsprocessen | ✅ Routering van goedkeuring in meerdere stappen verwerkt parallelle en sequentiële goedkeuringstrajecten met gedelegeerde goedkeurende personen |
| Platform | Goedkeuringsprocessen | ✅ Goedkeuringsarchitectuur houdt rekening met uitzonderingsscenario’s (alle goedkeurende personen op vakantie, dringende bedrijfsvereiste die de normale goedkeuring omzeilt) |
Anti-patronen
| Waar te zoeken | Hoe slecht eruitziet |
|---|---|
| Platform | Stroom | ⚠️ Processamensteller en werkstroomregels die worden gebruikt voor nieuwe automatisering (Flow Builder is de strategische richting) |
| Platform | Stroom | ⚠️ Programmatische automatisering die wordt gebruikt wanneer zakelijke gebruikers of beheerders logica moeten wijzigen zonder tussenkomst van de ontwikkelaar |
| Platform | Stroom | ⚠️ Stromen hebben geen foutafhandeling, wat resulteert in slecht foutherstel |
| Platform | Stroom | ⚠️ Variabelen hebben hard-coded waarden |
| Platform | Stroom | ⚠️ Stromen moeten handmatig worden gedeactiveerd voordat bulkgegevens worden geladen |
| Platform | Stroom | ⚠️ Delen van een stroom worden herhaald binnen stromen in plaats van substromen te gebruiken |
| Platform | Stroom | ⚠️ Stromen activeren “onverwerkte uitzondering” kennisgevingen |
| Platform | Stroom | ⚠️ Zelfs eenvoudige stromen veroorzaken regelmatig fouten met betrekking tot beheerlimieten |
| Platform | Stroom | ⚠️ Stromen vereisen extra invoer om context te bieden |
| Platform | Stroom | ⚠️ Stromen dienen meerdere doelen |
| Platform | Stroom | ⚠️ Groepen gerelateerde stappen bevatten functionaliteit die overlapt met groepen stappen in andere stromen |
| Platform | Stroom | ⚠️ Stromen vragen om gebruikersinvoer wanneer opgeslagen gegevens in plaats daarvan kunnen worden gebruikt |
| Platform | Stroom | ⚠️ Stromen vereisen invoer waarvan de gegevens niet worden gebruikt |
| Platform | Stroom | ⚠️ DML uitvoeren met behulp van verzameling die wordt uitgevoerd vanuit de schermcomponent (met behulp van de instelling “De ID’s en alle veldwaarden uit een record of recordverzameling gebruiken” voor element Maken, Bijwerken of Verwijderen wanneer verzameling wordt uitgevoerd vanuit de schermcomponent) |
| Platform | Stroom | ⚠️ Door records geactiveerde stromen gebruiken helemaal geen triggervolgordekenmerken of gebruiken triggervolgordewaarden niet consistent |
| Platform | Stroom | ⚠️ Asynchrone paden niet consistent of helemaal niet gebruikt |
| Platform | Stroom | ⚠️ Grote, monolithische stromen proberen complexe reeksen gerelateerde gegevensbewerkingen te coördineren (met of zonder substromen) |
| Platform | Goedkeuringsprocessen | ⚠️ Goedkeuringsarchitectuur houdt geen rekening met uitzonderingsscenario’s (alle goedkeurende personen op vakantie, dringende bedrijfsvereisten) |
| Platform | Validatie | ⚠️ Gegevensintegriteit alleen afgedwongen in triggers in plaats van validatieregels (triggervalidatie minder efficiënt en complexer) |
Patronen
| Waar te zoeken | Hoe goed eruitziet |
|---|---|
| Platform | Apex | ✅ Trigger handler framework dwingt single-trigger-per-object, bulkverwerking, scheiding van zorgen en recursieve uitvoering preventie |
| Platform | Apex | ✅ Trigger handlers delegeren aan serviceklassen voor bedrijfslogica, met behoud van duidelijke scheiding van zorgen |
| Platform | Apex | ✅ Triggers gebruiken recursiebescherming met behulp van statische vlaggen of speciale recursiecontroleklasse |
| Platform | Apex | ✅ Toekomstige Apex wordt spaarzaam gebruikt, voor aanroepen of systeemobject DML |
| Platform | Apex | ✅ Asynchrone Apex aanroepen gebruiken Queueable om complexe DML ‘keten’ over transacties |
| Platform | Apex | ✅ Batch Apex wordt gebruikt voor grote gegevensvolumes (verwerkt grote hoeveelheden gegevens met speciale beheerlimieten per blok) |
| Platform | Apex | ✅ Batchtaken hebben foutafhandeling die mislukte records registreert zonder de volledige batchuitvoering te stoppen |
| Platform | Apex | ✅ Bulk-API wordt alleen gebruikt wanneer grote hoeveelheden gegevens moeten worden verwerkt (eigen SOAP- en REST-API’s die worden gebruikt voor kleinere hoeveelheden gegevens) |
| Platform | Apex | ✅ Wachtrij Apex wordt gebruikt voor complexe workflow doeltreffende combinatie, externe aanroepen met opnieuw proberen logica, en verwerking profiteren van asynchrone limieten |
| Platform | Apex | ✅ Geplande Apex voert verwerking volgens vaste planningen voor ‘s nachts onderhoud, dagelijkse rapportage, periodieke integratiesynchronisatie en op tijd gebaseerde bedrijfsregels |
| Platform | Ontwerpstandaarden | ✅ Gebruikscases voor synchrone en asynchrone bewerkingen binnen automatiseringen worden duidelijk beschreven als onderdeel van ontwerpnormen |
| Platform | Documentatie | ✅ Geplande en potentiële uitvoeringstrajecten voor automatiseringen worden duidelijk beschreven |
Anti-patronen
| Waar te zoeken | Hoe slecht eruitziet |
|---|---|
| Platform | Apex | ⚠️ Meerdere triggers voor één object met onvoorspelbare uitvoeringsvolgorde en overlappende logica |
| Platform | Apex | ⚠️ Bedrijfslogica direct ingebed in triggerbestanden waardoor testen moeilijk wordt |
| Platform | Apex | ⚠️ Geen triggerhandlerframework of inconsistente triggerpatronen binnen objecten |
| Platform | Apex | ⚠️ Batch Apex taken hebben een zeer klein bereik (bijv. bereikgrootte = 1) |
| Platform | Apex | ⚠️ Batch Apex gebruikt voor externe aanroepen (grote volumes Salesforce-gegevens gepusht naar extern systeem met behulp van Batch Apex) |
| Platform | Apex | ⚠️ Asynchrone Apex voorzieningen willekeurig gebruikt (Toekomstige methoden en Queueable Apex inconsistent of door elkaar gebruikt) |
| Platform | Apex | ⚠️ Async Apex zelden gebruikt |
| Platform | Apex | ⚠️ Databasebewerkingen hebben geen duidelijke, consistente logica voor het doorgeven van uitvoering aan Batch Apex wanneer dat nodig is |
| Platform | Ontwerpstandaarden | ⚠️ Gebruikscases voor synchrone en asynchrone bewerkingen worden niet behandeld |
| Platform | Documentatie | ⚠️ Het aanroepen van automatisering is niet gedocumenteerd |
Patronen
| Waar te zoeken | Hoe goed eruitziet |
|---|---|
| Platform | Platform-events | ✅ Platform Events worden gebruikt voor event-gestuurde automatisering die uitgevers ontkoppelt van abonnees |
| Platform | Platform-events | ✅ Uitgevers zijn zich niet bewust van abonnees en publiceren fire-and-forget |
| Platform | Platform-events | ✅ Meerdere abonnees reageren onafhankelijk van elkaar op events via door platformevents geactiveerde stromen, Apex triggers of externe integraties |
| Platform | Platform-events | ✅ Replay-ID’s worden gebruikt om gemiste events opnieuw af te spelen vanaf elk punt in de 72-uurs bewaarperiode |
| Platform | Platform-events | ✅ Platform-events maken communicatie tussen organisaties, kennisgevingen van externe systemen en interne werkstroomcombinaties mogelijk |
Anti-patronen
| Waar te zoeken | Hoe slecht eruitziet |
|---|---|
| Platform | Platform-events | ⚠️ Directe koppeling tussen uitgevers en abonnees die samenstelbare automatisering verhinderen |
| Platform | Platform-events | ⚠️ Upgrade van accountlaag roept opportunityupdate, accountteamkennisgeving en gegevensmagazijnsynchronisatie rechtstreeks in één transactie aan (nauwe koppeling vereist wijzigingen in accountlogica telkens wanneer nieuwe verwerking verderop in de stroom nodig is) |
| Platform | Apex | ⚠️ Onmiddellijk publiceren Platform-events die adhoc worden gebruikt (realtime events die worden gebruikt in plaats van Publiceren na verbintenis, ongeacht publicatieordervereisten of risico’s van recordvergrendeling) |
Patronen
| Waar te zoeken | Hoe goed eruitziet |
|---|---|
| Platform | Apex | ✅ SOQL-instructies gebruiken positieve logica vergelijking operatoren (INCLUDES, IN) als primaire of alleen logica |
| Platform | Apex | ✅ SOQL vermijdt = NULL, != NULL of gebruikt ze spaarzaam na positieve vergelijking operatoren |
| Platform | Apex | ✅ SOQL gebruikt geen LIMIT 1 |
| Platform | Apex | ✅ SOQL gebruikt geen ALL ROWS trefwoord |
| Platform | Apex | ✅ SOQL verschijnt niet binnen lussen |
| Platform | Apex | ✅ Jokertekencriteria worden weergegeven in SOSL (niet SOQL) |
| Platform | Apex | ✅ SOQL-instructies vermijden LIKE of gedeeltelijke tekstvergelijkingen |
| Platform | Apex | ✅ SOQL is verpakt in try-catch |
| Platform | Apex | ✅ Variabelen verwijzen niet naar hard-coded waarden (voor recordtypen, gebruikers, enz.) |
| Platform | Apex | ✅ Elke klasse dient een enkel, specifiek doel |
| Platform | Apex | ✅ Elke methode voert een specifieke, fijnmazige taak |
| Platform | Apex | ✅ Alle invoervariabelen hebben een duidelijk doel binnen de klasse |
| Platform | Apex | ✅ Code-uitvoering vereist een minimaal aantal resources |
Anti-patronen
| Waar te zoeken | Hoe slecht eruitziet |
|---|---|
| Platform | Apex | ⚠️ SOQL-instructies gebruiken NOT, NOT IN als primaire of alleen vergelijkingsoperator (niet-selectief) |
| Platform | Apex | ⚠️ SOQL-instructies gebruiken trefwoord ALL ROWS (niet-selectief) |
| Platform | Apex | ⚠️ SOQL-instructies gebruiken = NULL, != NULL als primaire of alleen vergelijkingsoperator (niet-selectief) |
| Platform | Apex | ⚠️ Variabelen hebben hard-coded waarden |
| Platform | Apex | ⚠️ SOQL wordt weergegeven binnen lussen |
| Platform | Apex | ⚠️ SOQL-instructies gebruiken vaak LIKE en jokerfiltercriteria (niet-selectief) |
| Platform | Apex | ⚠️ SOQL niet verpakt in try-catch |
| Platform | Apex | ⚠️ SOQL-instructies gebruiken LIMIT 1 (niet-selectief) |
| Platform | Apex | ⚠️ SOSL zelden of niet consistent gebruikt voor jokertekenselectiecriteria |
| Platform | Apex | ⚠️ Klassen dienen meerdere doelen |
| Platform | Apex | ⚠️ Methoden voeren meerdere taken uit of methoden voeren taken uit die niet overeenkomen met het opgegeven doel van de klasse waarvan ze deel uitmaken |
| Platform | Apex | ⚠️ Invoervariabelen worden eigenlijk niet gebruikt in methoden |
| Platform | Apex | ⚠️ Methoden halen onnodig gegevens op uit de database of uit externe systemen |
Patronen
| Waar te zoeken | Hoe goed eruitziet |
|---|---|
| Platform | Apex | ✅ Aangepaste uitzonderingen worden gebruikt om geavanceerde foutberichten en logica te maken |
| Platform | Apex | ✅ Code wraps alle DML, SOQL, aanroepen en andere kritieke processtappen in try-catch |
| Platform | Apex | ✅ Databaseklassemethoden mogen uitsluitend worden gebruikt voor alle gegevensbewerkingen (in plaats van DML) |
| Platform | Apex | ✅ In asynchrone en bulk contexten, Database klasse methoden worden gebruikt in plaats van DML |
| Platform | Aura | ✅ JavaScript wraps alle gegevensbewerkingen en kritieke processtappen in try-catch |
| Platform | Aura | ✅ Binnen try-catch blokken, native JavaScript Error wordt gebruikt in gooien instructies (geen gebruik van $A.error()) |
| Platform | Aura | ✅ Alle herstelbare foutlogica wordt weergegeven binnen catch en biedt duidelijke gebruikersberichten |
| Platform | Stroom | ✅ Stromen met gegevensbewerkingen, aanroepen en andere kritieke verwerkingslogica hebben foutpaden voor alle belangrijke acties |
| Platform | Stroom | ✅ Schermstromen gebruiken consistent foutconnectoren om fouten aan gebruikers te tonen |
| Platform | Stroom | ✅ Aangepaste foutberichten worden geconfigureerd voor fouten die op het scherm worden weergegeven |
| Platform | Lightning webcomponenten (LWC) | ✅ JavaScript wraps alle gegevensbewerkingen en kritieke processtappen in if () /else if () blokken |
| Platform | Lightning webcomponenten (LWC) | ✅ Alle @wire gebruiken data en error die door de API worden geleverd |
| Platform | Lightning webcomponenten (LWC) | ✅ Alle if (error)/else if (error) statements bevatten logica om fouten te verwerken en informatieve berichten te bieden |
Anti-patronen
| Waar te zoeken | Hoe slecht eruitziet |
|---|---|
| Platform | Apex | ⚠️ DML, SOQL, aanroepen of andere kritieke processtappen niet consistent verpakt in probeerblokken |
| Platform | Apex | ⚠️ Er worden geen Databaseklassemethoden gebruikt |
| Platform | Apex | ⚠️ Gegevensbewerkingen uitsluitend uitgevoerd met DML |
| Platform | Apex | ⚠️ System.debug worden weergegeven in productiecode (en zijn niet voorzien van opmerkingen) |
| Platform | Aura | ⚠️ JavaScript verpakt gegevensbewerkingen en kritieke processtappen niet consistent in try-catch |
| Platform | Aura | ⚠️ Componenten gebruiken $A.error() |
| Platform | Aura | ⚠️ Herstelbare foutlogica wordt niet consistent weergegeven binnen catch en foutberichten aan gebruikers zijn niet duidelijk |
| Platform | Stroom | ⚠️ Stromen gebruiken foutpaden niet consistent of helemaal niet |
| Platform | Stroom | ⚠️ Aangepaste foutberichten niet gebruikt, waardoor gebruikers het standaardbericht “Er heeft zich een onverwerkte fout voorgedaan in deze stroom” zien |
| Platform | Lightning webcomponenten (LWC) | ⚠️ @wire gebruiken geen data en error die door de API worden geleverd (of gebruiken deze niet consistent) |
| Platform | Lightning webcomponenten (LWC) | ⚠️ Indien überhaupt gebruikt, bevatten if (error)/else if (error) instructies geen logica om fouten te verwerken en nuttige foutberichten te geven |
| Platform | Lightning webcomponenten (LWC) | ⚠️ JavaScript gebruikt niet consistent if ()/else if () blokkeert met gegevensbewerkingen of kritieke processtappen |