Operational Excellence - Automatiseringspatronen


Lees meer over EPS Kisten van 75 x 70cm (50 x 200 cm) → Automatisering en efficiëntie

Patronen

Waar te zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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 zoekenHoe 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