Driftsmæssig excellence - automatiseringsmønstre


Læs mere om veludviklet operativ excellence → Automatisering og effektivitet

Mønstre

Hvor skal du seHvad der ser godt ud
Platform | Dashboards✅ Alle metrikker, der er relateret til KPI’er, er inkluderet i mindst et dashboard
Platform | Dokumentation✅ Output for hver automatisering kan måles og er tidsbundet
Platform | Dokumentation✅ Ansvarlige interessenter er angivet for hver KPI

Anti-mønstre

Hvor skal du seHvad ser dårligt ud
Platform | Dashboards⚡️ KPI-rapportering findes ikke, eller dashboards mangler metrikker, der er relateret til nogle KPI’er
Platform | Dokumentation⚡️ KPI’er findes uden ansvarlige interessenter
Platform | Dokumentation⚡️ KPI’er findes ikke for automatiseringer eller har uklare tidsrammer for mål

Mønstre

Hvor skal du seHvad der ser godt ud
Platform | Forløb✅ Flow Builder bruges til registreringsudløst automatisering (erstatter Proceskonstruktør og arbejdsflowregler)
Platform | Forløb✅ Registreringsudløste forløb med før lagring-kørsel bruges til feltpopulation før registreringsoprettelse
Platform | Forløb✅ Forløb håndterer beslutningslogik, løkker, API-udkald, DML-handlinger og kompleks orkestrering med flere trin
Platform | Forløb✅ Forløbstransaktionskontrol bruges til at bekræfte mellemliggende ændringer, når der er behov for det
Platform | Forløb✅ Fejlhåndtering implementeres til praktisk fejlgendannelse i forløb
Platform | Forløb✅ Reaktive skærmforløb giver dynamiske brugeroplevelser
Platform | Forløb✅ Deklarativ automatisering vælges, når forretningsbrugere eller administratorer har brug for at redigere logik uden udviklerengagement
Platform | Forløb✅ Variabler refererer ikke til hardcodede værdier (for registreringstyper, brugere osv.)
Platform | Forløb✅ Forløbslogik, der er klar til Apex i store datamængdekontekster
Platform | Forløb✅ Underforløb bruges til afsnit af processer, der skal genbruges på tværs af forretningen
Platform | Forløb✅ Alle automatisk startede forløb bruger beslutnings- og/eller pauseelementer til at evaluere indtastningskriterier og forhindre uendelige løkker eller kørsler mod store datamængder
Platform | Forløb✅ Brugere bliver kun bedt om at angive data, når eksisterende systemdata ikke kan bruges
Platform | Forløb✅ Forløb er organiseret i en hierarkisk struktur, der består af et hovedforløb og underordnede underforløb
Platform | Forløb✅ Alle brugerinput har et tydeligt formål i forløbet
Platform | Forløb✅ Hvert forløb tjener et enkelt, specifikt formål
Platform | Forløb✅ Hvert trin udfører en specifik, detaljeret opgave
Platform | Forløb✅ Alle forløb, der startes i brugerkontekst, abstrakte systemkontekstransaktioner til underforløb, placeret ensartet efter pauseelementet for at oprette ny transaktion
Platform | Forløb✅ Alle registreringsudløste forløb har udløserrækkefølgeværdier udfyldt
Platform | Forløb✅ Forløb, der involverer eksterne systemudkald eller længe kørende processer, bruger asynkrone stier
Platform | Forløb✅ Komplekse sekvenser af relaterede datahandlinger oprettes med Orkestrator (i stedet for at kalde flere underforløb i et monolitisk forløb)
Platform | Validering✅ Dataintegritet håndhæves på platformsniveau ved brug af valideringsregler, dubletregler og påkrævede felter
Platform | Validering✅ Valideringsregler forhindrer ugyldig dataindtastning før lagring (mere effektiv end udløservalidering)
Platform | Godkendelsesprocesser✅ Distribution af godkendelse med flere trin håndterer parallelle og sekventielle godkendelsesstier med uddelegerede godkendere
Platform | Godkendelsesprocesser✅ Godkendelsesarkitektur tæller for undtagelsesscenarier (alle godkendere på ferie, vigtige forretningskrav, der tilsidesætter normal godkendelse)

Anti-mønstre

Hvor skal du seHvad ser dårligt ud
Platform | ForløbProceskonstruktør og arbejdsflowregler, der bruges til ny automatisering (Flow Builder er den strategiske retning)
Platform | Forløb⚡️ Programmeringsmæssig automatisering, der bruges, når forretningsbrugere eller administratorer har brug for at redigere logik uden udviklerengagement
Platform | Forløb⚡️ Forløb mangler fejlhåndtering, hvilket resulterer i dårlig fejlgendannelse
Platform | Forløb⚡️ Variabler har hardcodede værdier
Platform | Forløb⚡️ Forløb skal manuelt deaktiveres, før der masseindlæses data
Platform | Forløb⚡️ Dele af et forløb gentages på tværs af forløb i stedet for at bruge underforløb
Platform | Forløb⚡️ Forløb udløser “uhåndteret undtagelse”-adviseringer
Platform | Forløb⚡️ Selv enkle forløb forårsager regelmæssigt fejl, der er relateret til styringsbegrænsninger
Platform | Forløb⚡️ Forløb kræver yderligere input for at angive kontekst
Platform | Forløb⚡️ Forløb tjener flere formål
Platform | ForløbGrupper af relaterede trin indeholder funktionalitet, der overlapper grupper af trin i andre forløb
Platform | Forløb⚡️ Forløb beder om brugerinput, når lagrede data i stedet kan bruges
Platform | Forløb⚡️ Forløb kræver input, hvis data ikke bruges
Platform | Forløb⚡️ Udførelse af DML ved brug af samling, der er output fra skærmkomponent (anvendelse af indstillingen “Brug id’er og alle feltværdier fra en registrerings- eller registreringssamling” ved oprettelse, opdatering eller sletning, når samling er output fra skærmkomponent)
Platform | Forløb⚡️ Registreringsudløste forløb bruger slet ikke udløserrækkefølgeattributter eller bruger ikke udløserrækkefølgeværdier ensartet
Platform | Forløb⚡️ Asynkrone stier, der ikke bruges ensartet eller slet ikke
Platform | Forløb⚡️ Store, monolitiske forløb forsøger at koordinere komplekse sekvenser af relaterede datahandlinger (med eller uden underforløb)
Platform | Godkendelsesprocesser⚡️ Godkendelsesarkitektur tager ikke højde for undtagelsesscenarier (alle godkendere på ferie, vigtige forretningskrav)
Platform | ValideringDataintegritet håndhæves kun i udløsere i stedet for valideringsregler (udløservalidering er mindre effektiv og mere kompleks)

Mønstre

Hvor skal du seHvad der ser godt ud
Platform | Apex✅ Udløserhåndteringsstruktur håndhæver single-udløser-pr. objekt, massebehandling, adskillelse af bekymringer og forebyggelse af tilbagevendende kørsel
Platform | Apex✅ Udløser-handler uddelegeres til serviceklasser for forretningslogik og vedligeholder en tydelig adskillelse af bekymringer
Platform | Apex✅ Udløsere bruger rekursionsbeskyttelse ved brug af statiske flag eller dedikeret rekursionskontrolklasse
Platform | Apex✅ Future Apex bruges sparsomt til udkald eller systemobjekt-DML
Platform | Apex✅ Async Apex bruger DML, der kan sættes i kø til at “kæde” kompleks på tværs af transaktioner
Platform | Apex✅ Batch Apex bruges til store datamængder (behandler store datamængder med særlige styringsbegrænsninger pr. segment)
Platform | Apex✅ Batchjob har fejlhåndtering, der logfører mislykkede registreringer uden at stoppe hele batchkørslen
Platform | Apex✅ Bulk API bruges kun, når store mængder af data skal behandles (oprindelige SOAP- og REST-API’er bruges til mindre mængder af data)
Platform | Apex✅ Købar Apex bruges til kompleks arbejdsfloworkestrering, eksterne udkald med forsøgslogik og behandling, der drager fordel af asynkrone grænser
Platform | Apex✅ Planlagt Apex udfører behandling efter faste tidsplaner for natlig vedligeholdelse, daglig rapportering, periodisk integrationssynkronisering og tidsbaserede forretningsregler
Platform | Designstandarder✅ Anvendelsessituationer for synkrone og asynkrone handlinger i automatiseringer er tydeligt skitseret som en del af designstandarder
Platform | Dokumentation✅ Planlagte og potentielle kørselsstier for automatiseringer skitseres tydeligt

Anti-mønstre

Hvor skal du seHvad ser dårligt ud
Platform | Apex⚡️ Flere udløsere på et objekt med en uforudsigelig kørselsrækkefølge og overlappende logik
Platform | Apex⚡️ Forretningslogik integreret direkte i udløserfiler, hvilket gør testen vanskelig
Platform | Apex⚡️ Ingen udløserhåndteringsstruktur eller inkonsekvente udløsermønstre på tværs af objekter
Platform | Apex⚡️ Batch Apex har meget lille omfangsstørrelse (f.eks. omfangsstørrelse = 1)
Platform | ApexBatch Apex bruges til eksterne udkald (store mængder af Salesforce-data overføres til et eksternt system ved brug af batch Apex)
Platform | Apex⚡️ Asynkrone Apex, der bruges vilkårligt (Future Methods og Apex, der kan sættes i kø, bruges inkonsekvent eller udskifteligt)
Platform | Apex⚡️ Async Apex bruges sjældent
Platform | ApexDatabasehandlinger har ikke en tydelig, ensartet logik til at overføre kørsel til batch Apex, når det er nødvendigt
Platform | Designstandarder⚡️ Anvendelsessituationer for synkrone og asynkrone handlinger håndteres ikke
Platform | Dokumentation⚡️ Automatiseringskald er ikke dokumenteret

Mønstre

Hvor skal du seHvad der ser godt ud
Platform | Platformsbegivenheder✅ Platformsbegivenheder bruges til begivenhedsstyret automatisering, der adskiller handlingsområder fra abonnenter
Platform | Platformsbegivenheder✅ Udgivere er uvidende om abonnenter og udgiver fire-and-glemt
Platform | Platformsbegivenheder✅ Flere abonnenter reagerer uafhængigt på begivenheder gennem platformsbegivenhedsudløste forløb, Apex eller eksterne integrationer
Platform | Platformsbegivenheder✅ Genafspilnings-id’er bruges til at afspille manglende begivenheder fra ethvert punkt i det 72-timers bevarelsesvindue
Platform | Platformsbegivenheder✅ Platformsbegivenheder aktiverer krydsorganisationskommunikation, ekstern systemadvisering og intern arbejdsfloworkestrering

Anti-mønstre

Hvor skal du seHvad ser dårligt ud
Platform | Platformsbegivenheder⚡️ Direkte tilknytning mellem udgivere og abonnenter forhindrer automatisering, der kan sammensættes
Platform | Platformsbegivenheder⚡️ Opgradering af kontotiveau kalder direkte opdatering af salgsmulighed, advisering af kontoteam og datalagersynkronisering i en transaktion (tæt tilknytning kræver ændringer af kontologoik, hver gang der er brug for ny downstream-behandling)
Platform | Apex⚡️ Udgiv øjeblikkeligt platformsbegivenheder anvendes adhoc (realtidsbegivenheder bruges i stedet for Udgiv efter bekræftelse, uanset udgivelsesbestillingskrav eller registreringslåsningsrisici)

Mønstre

Hvor skal du seHvad der ser godt ud
Platform | Apex✅ SOQL-erklæringer bruger positive logik-sammenligningsoperatorer (INCLUDES, IN) som primær eller eneste logik
Platform | Apex✅ SOQL undgår = NULL, != NULL eller bruger dem sparsomt efter positive sammenligningsoperatorer
Platform | Apex✅ SOQL bruger ikke LIMIT 1-erklæringer
Platform | Apex✅ SOQL bruger ikke ALL ROWS søgeord
Platform | Apex✅ SOQL vises ikke i løkker
Platform | Apex✅ Jokertegnskriterier vises i SOSL (ikke SOQL)
Platform | Apex✅ SOQL-erklæringer undgår LIKE sammenligninger eller delvise tekst sammenligninger
Platform | Apex✅ SOQL er indpakket i try-catch blokke
Platform | Apex✅ Variabler refererer ikke til hardcodede værdier (for registreringstyper, brugere osv.)
Platform | Apex✅ Hver klasse tjener et enkelt specifikt formål
Platform | Apex✅ Hver metode udfører en specifik, detaljeret opgave
Platform | Apex✅ Alle inputvariabler har et tydeligt formål i klassen
Platform | Apex✅ Kørsel af kode kræver et minimalt antal ressourcer

Anti-mønstre

Hvor skal du seHvad ser dårligt ud
Platform | ApexSOQL-erklæringer bruger NOT, NOT IN som primær eller eneste sammenligningsoperator (ikke selektiv)
Platform | Apex⚡️ SOQL-erklæringer bruger ALL ROWS nøgleord (ikke-valgfrit)
Platform | ApexSOQL-erklæringer bruger = NULL, != NULL som primær eller eneste sammenligningsoperator (ikke selektiv)
Platform | Apex⚡️ Variabler har hardcodede værdier
Platform | Apex⚡️ SOQL vises i løkker
Platform | Apex⚡️ SOQL-erklæringer bruger ofte LIKE og jokertegnsfilterkriterier (ikke-valgfrit)
Platform | Apex⚡️ SOQL ikke indpakket i try-catch blokke
Platform | Apex⚡️ SOQL-erklæringer bruger LIMIT 1 (ikke-valgfrit)
Platform | Apex⚡️ SOSL bruges sjældent eller ikke ensartet til jokertegnsvalgekriterier
Platform | Apex⚡️ Klasser tjener flere formål
Platform | Apex⚡️ Metoder udfører flere opgaver, eller metoder udfører opgaver, der ikke stemmer overens med det angivne formål for den klasse, de er del af
Platform | Apex⚡️ Inputvariabler bruges faktisk ikke i metoder
Platform | ApexMetoder til unødigt at hente data fra databasen eller fra eksterne systemer

Mønstre

Hvor skal du seHvad der ser godt ud
Platform | Apex✅ Tilpassede undtagelser bruges til at oprette avancerede fejlmeddelelser og logik
Platform | Apex✅ Kode omslutter alle DML, SOQL, udkald og andre vigtige procestrin i try-catch blokke
Platform | Apex✅ Database-klassemetoder kan bruges udelukkende til alle datahandlinger (i stedet for DML)
Platform | Apex✅ I asynkrone og massekontekster bruges Database-klassemetoder i stedet for DML
Platform | Aura✅ JavaScript omslutter alle datahandlinger og vigtige procestrin i try-catch blokke
Platform | Aura✅ Inden for try-catch bruges indbygget JavaScript Error i udtalelser (ingen brug af $A.error())
Platform | Aura✅ Alle gendannelige fejllogik vises i catch erklæringer, og giver tydelige brugermeddelelser
Platform | Forløb✅ Forløb med datahandlinger, udkald og anden vigtig behandlingslogik har fejlstier for alle nøglehandlinger
Platform | Forløb✅ Skærmforløb bruger ensartede fejlforbindelser til at vise fejl for brugere
Platform | Forløb✅ Tilpassede fejlmeddelelser konfigureres for fejl, der vises på skærmen
Platform | Lightning Web-komponenter (LWC)✅ JavaScript omslutter alle datahandlinger og vigtige procestrin i if ()/else if () blokke
Platform | Lightning Web-komponenter (LWC)✅ Alle @wire funktioner bruger data og error egenskaber, der leveres af API
Platform | Lightning Web-komponenter (LWC)✅ Alle if (error)/else if (error) erklæringer indeholder logik til at behandle fejl og give informative beskeder

Anti-mønstre

Hvor skal du seHvad ser dårligt ud
Platform | Apex⚡️ DML, SOQL, udkald eller andre vigtige procestrin, der ikke konsekvent pakkes ind i prøve-registreringsblokke
Platform | Apex⚡️ Der bruges ingen databaseklassemetoder
Platform | Apex⚡️ Datahandlinger udført udelukkende med DML
Platform | ApexSystem.debug vises i produktionskode (og kommenteres ikke)
Platform | AuraJavaScript omfatter ikke konsekvent datahandlinger og vigtige procestrin i try-catch
Platform | Aura⚡️ Komponenter bruger $A.error()
Platform | AuraFejllogik, der kan gendannes, vises ikke konsekvent i catch, og fejlmeddelelser til brugere er ikke tydelige
Platform | Forløb⚡️ Forløb bruger ikke fejlstier ensartet eller slet ikke
Platform | Forløb⚡️ Tilpassede fejlmeddelelser bruges ikke, så brugere ser standardmeddelelsen “Der er forekommet en ikke-håndteret fejl i dette forløb”
Platform | Lightning Web-komponenter (LWC)@wire bruger ikke data og error egenskaber, der leveres af API (eller bruger dem ikke ensartet)
Platform | Lightning Web-komponenter (LWC)Hvis det overhovedet bruges, indeholder if (error)/else if (error)-erklæringer faktisk ikke logik til at behandle fejl og give nyttige fejlmeddelelser
Platform | Lightning Web-komponenter (LWC)JavaScript bruger ikke konsekvent if ()/else if () blokke med datahandlinger eller kritiske procestrin