Eccellenza operativa - Schemi di automazione
Ulteriori informazioni sull’eccellenza operativa ben progettata → Automazione ed efficienza
Schemi
| Dove cercare | Che bell’aspetto |
|---|---|
| Piattaforma | Cruscotti digitali | ✅ Tutte le metriche correlate ai KPI sono incluse in almeno un cruscotto digitale |
| Piattaforma | Documentazione | ✅ Gli output per ogni automazione sono misurabili e temporizzati |
| Piattaforma | Documentazione | ✅ Gli stakeholder responsabili sono elencati per ogni KPI |
Anti-schemi
| Dove cercare | Che brutto aspetto |
|---|---|
| Piattaforma | Cruscotti digitali | ⚠️ La generazione di rapporti KPI non esiste o mancano nei cruscotti digitali metriche correlate ad alcuni KPI |
| Piattaforma | Documentazione | ⚠️ Esistono KPI senza stakeholder responsabili |
| Piattaforma | Documentazione | ⚠️ Non esistono KPI per le automazioni o hanno intervalli di tempo non chiari per le misurazioni |
Schemi
| Dove cercare | Che bell’aspetto |
|---|---|
| Piattaforma | Flusso | ✅ Flow Builder viene utilizzato per l’automazione attivata da record (sostituendo Process Builder e le regole di flusso di lavoro) |
| Piattaforma | Flusso | ✅ I flussi attivati da record con esecuzione prima del salvataggio vengono utilizzati per la popolazione dei campi prima della creazione del record |
| Piattaforma | Flusso | ✅ I flussi gestiscono la logica decisionale, i loop, le chiamate API, le operazioni DML e la complessa orchestrazione a più fasi |
| Piattaforma | Flusso | ✅ Il controllo delle transazioni del flusso viene utilizzato per confermare le modifiche intermedie quando necessario |
| Piattaforma | Flusso | ✅ La gestione dei guasti è implementata per il ripristino grazioso degli errori nei flussi |
| Piattaforma | Flusso | ✅ I flussi schermata reattivi offrono esperienze utente dinamiche |
| Piattaforma | Flusso | ✅ L’automazione dichiarativa viene scelta quando gli utenti aziendali o gli amministratori devono modificare la logica senza il coinvolgimento dello sviluppatore |
| Piattaforma | Flusso | ✅ Le variabili non fanno riferimento a valori codificati (per tipi di record, utenti, ecc.) |
| Piattaforma | Flusso | ✅ La logica dei flussi passa ad Apex in contesti con grandi volumi di dati |
| Piattaforma | Flusso | ✅ I sottoflussi vengono utilizzati per le sezioni dei processi che devono essere riutilizzate in tutta l’azienda |
| Piattaforma | Flusso | ✅ Tutti i flussi AutoLaunched utilizzano elementi decisionali e/o di pausa per valutare i criteri di immissione e impedire loop o esecuzioni infinite su grandi volumi di dati |
| Piattaforma | Flusso | ✅ Gli utenti sono invitati a fornire dati solo quando i dati di sistema esistenti non possono essere utilizzati |
| Piattaforma | Flusso | ✅ I flussi sono organizzati in una struttura gerarchica costituita da un flusso principale e sottoflussi di supporto |
| Piattaforma | Flusso | ✅ Tutti gli input utente hanno uno scopo chiaro all’interno del flusso |
| Piattaforma | Flusso | ✅ Ogni flusso serve un unico scopo specifico |
| Piattaforma | Flusso | ✅ Ogni fase esegue un’operazione specifica e granulare |
| Piattaforma | Flusso | ✅ Tutti i flussi avviati nel contesto utente astraggono le transazioni del contesto di sistema ai sottoflussi, posizionate in modo coerente dopo l’elemento Pausa per creare una nuova transazione |
| Piattaforma | Flusso | ✅ Tutti i flussi attivati da record hanno valori di ordine di attivazione compilati |
| Piattaforma | Flusso | ✅ I flussi che coinvolgono chiamate di sistema esterne o processi di lunga durata utilizzano percorsi asincroni |
| Piattaforma | Flusso | ✅ Sequenze complesse di operazioni sui dati correlate vengono create con Orchestrator (invece di invocare più sottoflussi all’interno del flusso monolitico) |
| Piattaforma | Convalida | ✅ L’integrità dei dati viene applicata a livello di piattaforma utilizzando regole di convalida, regole di duplicazione e campi obbligatori |
| Piattaforma | Convalida | ✅ Le regole di convalida impediscono l’immissione di dati non validi prima del salvataggio (più efficiente della convalida dei trigger) |
| Piattaforma | Processi di approvazione | ✅ L’instradamento delle approvazioni in più fasi gestisce i percorsi di approvazione paralleli e sequenziali con i responsabili approvazioni delegati |
| Piattaforma | Processi di approvazione | ✅ L’architettura di approvazione tiene conto degli scenari di eccezione (tutti i responsabili approvazioni in vacanza, esigenze aziendali urgenti che ignorano le normali approvazioni) |
Anti-schemi
| Dove cercare | Che brutto aspetto |
|---|---|
| Piattaforma | Flusso | ⚠️ Process Builder e regole di flusso di lavoro utilizzate per la nuova automazione (Flow Builder è la direzione strategica) |
| Piattaforma | Flusso | ⚠️ Automazione programmatica utilizzata quando gli utenti aziendali o gli amministratori devono modificare la logica senza il coinvolgimento dello sviluppatore |
| Piattaforma | Flusso | ⚠️ I flussi mancano della gestione dei guasti con conseguente scarso ripristino degli errori |
| Piattaforma | Flusso | ⚠️ Le variabili hanno valori codificati |
| Piattaforma | Flusso | ⚠️ I flussi devono essere disattivati manualmente prima del caricamento in blocco dei dati |
| Piattaforma | Flusso | ⚠️ Porzioni di un flusso vengono ripetute tra i flussi anziché utilizzare sottoflussi |
| Piattaforma | Flusso | ⚠️ I flussi attivano avvisi di “eccezione non gestita” |
| Piattaforma | Flusso | ⚠️ Anche i flussi semplici causano regolarmente errori relativi ai limiti del governor |
| Piattaforma | Flusso | ⚠️ I flussi richiedono input aggiuntivi per fornire contesto |
| Piattaforma | Flusso | ⚠️ I flussi hanno più scopi |
| Piattaforma | Flusso | ⚠️ I gruppi di fasi correlate contengono funzionalità che si sovrappongono a gruppi di fasi in altri flussi |
| Piattaforma | Flusso | ⚠️ I flussi richiedono gli input degli utenti quando è possibile utilizzare i dati memorizzati |
| Piattaforma | Flusso | ⚠️ I flussi richiedono input i cui dati non vengono utilizzati |
| Piattaforma | Flusso | ⚠️ Esecuzione di DML utilizzando la raccolta che viene generata dal componente schermata (utilizzando l’impostazione “Utilizza gli ID e tutti i valori dei campi di un record o di una raccolta di record” per creare, aggiornare o eliminare l’elemento quando la raccolta viene generata dal componente schermata) |
| Piattaforma | Flusso | ⚠️ I flussi attivati da record non utilizzano affatto gli attributi dell’ordine di attivazione o non utilizzano i valori dell’ordine di attivazione in modo coerente |
| Piattaforma | Flusso | ⚠️ Percorsi asincroni non utilizzati in modo coerente o per nulla |
| Piattaforma | Flusso | ⚠️ Grandi flussi monolitici tentano di coordinare sequenze complesse di operazioni correlate sui dati (con o senza sottoflussi) |
| Piattaforma | Processi di approvazione | ⚠️ L’architettura di approvazione non tiene conto degli scenari di eccezione (tutti i responsabili approvazioni in vacanza, esigenze aziendali urgenti) |
| Piattaforma | Convalida | ⚠️ Integrità dei dati applicata solo nei trigger anziché nelle regole di convalida (validazione dei trigger meno efficiente e più complessa) |
Schemi
| Dove cercare | Che bell’aspetto |
|---|---|
| Piattaforma | Apex | ✅ Il framework trigger handler impone il trigger singolo per oggetto, l’in blocco, la separazione delle preoccupazioni e la prevenzione dell’esecuzione ricorsiva |
| Piattaforma | Apex | ✅ Gli handler trigger delegano alle classi di servizio per la logica aziendale, mantenendo una chiara separazione delle preoccupazioni |
| Piattaforma | Apex | ✅ I trigger utilizzano la protezione ricorsione utilizzando flag statici o una classe di controllo ricorsione dedicata |
| Piattaforma | Apex | ✅ Future Apex viene utilizzato con parsimonia, per chiamate o DML oggetto di sistema |
| Piattaforma | Apex | ✅ Le chiamate Apex asincrone utilizzano Area di attesa per ‘concatenare’ DML complessi tra le transazioni |
| Piattaforma | Apex | ✅ Batch Apex viene utilizzato per grandi volumi di dati (elabora grandi quantità di dati con limiti governor dedicati per blocco) |
| Piattaforma | Apex | ✅ I processi batch hanno una gestione degli errori che registra i record non riusciti senza arrestare l’intera esecuzione batch |
| Piattaforma | Apex | ✅ API in blocco viene utilizzata solo quando devono essere elaborate grandi quantità di dati (API native SOAP e REST sfruttate per quantità di dati più piccole) |
| Piattaforma | Apex | ✅ Queueable Apex è utilizzato per l’orchestrazione di flussi di lavoro complessi, chiamate esterne con logica di nuovo tentativo e l’elaborazione che beneficia dei limiti asincroni |
| Piattaforma | Apex | ✅ Pianificato Apex esegue l’elaborazione su pianificazioni fisse per la manutenzione notturna, la generazione di rapporti giornalieri, la sincronizzazione periodica dell’integrazione e le regole aziendali basate sul tempo |
| Piattaforma | Standard di progettazione | ✅ I casi d’uso per le operazioni sincrone e asincrone all’interno delle automazioni sono delineati chiaramente come parte degli standard di progettazione |
| Piattaforma | Documentazione | ✅ I percorsi di esecuzione pianificati e potenziali per le automazioni sono delineati chiaramente |
Anti-schemi
| Dove cercare | Che brutto aspetto |
|---|---|
| Piattaforma | Apex | ⚠️ Più trigger su un unico oggetto con ordine di esecuzione imprevedibile e logica sovrapposta |
| Piattaforma | Apex | ⚠️ Logica aziendale incorporata direttamente nei file trigger che rende difficile il test |
| Piattaforma | Apex | ⚠️ Nessun framework di handler trigger o schemi di trigger incoerenti tra gli oggetti |
| Piattaforma | Apex | ⚠️ I processi batch Apex hanno dimensioni dell’ambito molto piccole (ad esempio, dimensioni dell’ambito = 1) |
| Piattaforma | Apex | ⚠️ Batch Apex utilizzato per le chiamate esterne (grandi volumi di dati Salesforce inviati al sistema esterno utilizzando Batch Apex) |
| Piattaforma | Apex | ⚠️ Funzioni Apex asincrone utilizzate in modo arbitrario (Metodi futuri e Apex inseribile in coda utilizzati in modo incoerente o intercambiabile) |
| Piattaforma | Apex | ⚠️ Apex asincrono usato raramente |
| Piattaforma | Apex | ⚠️ Le operazioni del database non hanno una logica chiara e coerente per passare l’esecuzione ad Apex batch quando necessario |
| Piattaforma | Standard di progettazione | ⚠️ I casi d’uso per le operazioni sincrone e asincrone non sono affrontati |
| Piattaforma | Documentazione | ⚠️ L’invocazione dell’automazione non è documentata |
Schemi
| Dove cercare | Che bell’aspetto |
|---|---|
| Piattaforma | Eventi piattaforma | ✅ Gli eventi piattaforma vengono utilizzati per l’automazione basata sugli eventi che separa i publisher dagli abbonati |
| Piattaforma | Eventi piattaforma | ✅ Gli editori non sono a conoscenza degli abbonati e pubblicano fire-and-forget |
| Piattaforma | Eventi piattaforma | ✅ Più abbonati reagiscono in modo indipendente agli eventi tramite flussi attivati da eventi piattaforma, trigger Apex o integrazioni esterne |
| Piattaforma | Eventi piattaforma | ✅ I replay ID vengono utilizzati per riprodurre gli eventi mancati da qualsiasi punto della finestra di conservazione di 72 ore |
| Piattaforma | Eventi piattaforma | ✅ Gli eventi piattaforma consentono la comunicazione tra organizzazioni, la notifica del sistema esterno e l’orchestrazione del flusso di lavoro interno |
Anti-schemi
| Dove cercare | Che brutto aspetto |
|---|---|
| Piattaforma | Eventi piattaforma | ⚠️ Accoppiamento diretto tra publisher e abbonati che impedisce l’automazione componibile |
| Piattaforma | Eventi piattaforma | ⚠️ L’aggiornamento del livello account chiama direttamente l’aggiornamento opportunità, la notifica del team account e la sincronizzazione del data warehouse in un’unica transazione (l’accoppiamento stretto richiede modifiche alla logica dell’account ogni volta che è necessaria una nuova elaborazione a valle) |
| Piattaforma | Apex | ⚠️ Pubblica immediatamente Eventi piattaforma utilizzati adhoc (eventi in tempo reale utilizzati al posto di Pubblica dopo l’impegno indipendentemente dai requisiti degli ordini di pubblicazione o dai rischi di blocco dei record) |
Schemi
| Dove cercare | Che bell’aspetto |
|---|---|
| Piattaforma | Apex | ✅ Le istruzioni SOQL utilizzano operatori di confronto di logica positiva (INCLUDES, IN) come logica principale o unica |
| Piattaforma | Apex | ✅ SOQL evita = NULL, != NULL o li utilizza con parsimonia dopo operatori di confronto positivi |
| Piattaforma | Apex | ✅ SOQL non utilizza istruzioni LIMIT 1 |
| Piattaforma | Apex | ✅ SOQL non utilizza la parola chiave ALL ROWS |
| Piattaforma | Apex | ✅ SOQL non viene visualizzato all’interno dei loop |
| Piattaforma | Apex | ✅ I criteri dei caratteri jolly vengono visualizzati in SOSL (non SOQL) |
| Piattaforma | Apex | ✅ le istruzioni SOQL evitano confronti di LIKE o confronti di testo parziali |
| Piattaforma | Apex | ✅ SOQL è racchiuso in blocchi di try-catch |
| Piattaforma | Apex | ✅ Le variabili non fanno riferimento a valori codificati (per tipi di record, utenti, ecc.) |
| Piattaforma | Apex | ✅ Ogni classe serve un unico scopo specifico |
| Piattaforma | Apex | ✅ Ogni metodo esegue un’operazione specifica e granulare |
| Piattaforma | Apex | ✅ Tutte le variabili di input hanno uno scopo chiaro all’interno della classe |
| Piattaforma | Apex | ✅ L’esecuzione di codice richiede un numero minimo di risorse |
Anti-schemi
| Dove cercare | Che brutto aspetto |
|---|---|
| Piattaforma | Apex | ⚠️ Le istruzioni SOQL utilizzano NOT, criteri di NOT IN come operatore principale o solo di confronto (non selettivo) |
| Piattaforma | Apex | ⚠️ Le istruzioni SOQL utilizzano la parola chiave ALL ROWS (non selettiva) |
| Piattaforma | Apex | ⚠️ Le istruzioni SOQL utilizzano = NULL, criteri di != NULL come operatore principale o solo di confronto (non selettivo) |
| Piattaforma | Apex | ⚠️ Le variabili hanno valori codificati |
| Piattaforma | Apex | ⚠️ SOQL viene visualizzato all’interno dei loop |
| Piattaforma | Apex | ⚠️ Le istruzioni SOQL utilizzano frequentemente criteri di filtro per LIKE e caratteri jolly (non selettivi) |
| Piattaforma | Apex | ⚠️ SOQL non racchiuso in blocchi di try-catch |
| Piattaforma | Apex | ⚠️ Le istruzioni SOQL utilizzano LIMIT 1 (non selettivo) |
| Piattaforma | Apex | ⚠️ SOSL utilizzato raramente o in modo non coerente per i criteri di selezione dei caratteri jolly |
| Piattaforma | Apex | ⚠️ Le classi hanno più scopi |
| Piattaforma | Apex | ⚠️ I metodi eseguono più operazioni o i metodi eseguono operazioni che non sono in linea con lo scopo dichiarato della classe di cui fanno parte |
| Piattaforma | Apex | ⚠️ Le variabili di input non vengono effettivamente utilizzate nei metodi |
| Piattaforma | Apex | ⚠️ I metodi recuperano inutilmente i dati dal database o da sistemi esterni |
Schemi
| Dove cercare | Che bell’aspetto |
|---|---|
| Piattaforma | Apex | ✅ Le eccezioni personalizzate vengono utilizzate per creare messaggi di errore avanzati e logica |
| Piattaforma | Apex | ✅ Il codice racchiude tutte le chiamate DML, SOQL e altre fasi critiche del processo in blocchi di try-catch |
| Piattaforma | Apex | ✅ I metodi delle classi di database possono essere utilizzati esclusivamente per tutte le operazioni sui dati (anziché DML) |
| Piattaforma | Apex | ✅ In contesti asincroni e in blocco, vengono utilizzati metodi di classe Database anziché DML |
| Piattaforma | Aura | ✅ JavaScript racchiude tutte le operazioni sui dati e le fasi critiche del processo in blocchi di try-catch |
| Piattaforma | Aura | ✅ All’interno dei blocchi di try-catch, Error JavaScript nativo viene utilizzato nelle istruzioni throw (nessun utilizzo di $A.error()) |
| Piattaforma | Aura | ✅ Tutta la logica di errore recuperabile viene visualizzata all’interno degli estratti catch e fornisce messaggi utente chiari |
| Piattaforma | Flusso | ✅ I flussi con operazioni sui dati, chiamate e altre logiche di elaborazione critiche hanno percorsi di errore per tutte le azioni chiave |
| Piattaforma | Flusso | ✅ I flussi schermata utilizzano costantemente connettori di errore per mostrare gli errori agli utenti |
| Piattaforma | Flusso | ✅ I messaggi di errore personalizzati sono configurati per gli errori che verranno visualizzati sullo schermo |
| Piattaforma | Componenti Web Lightning (LWC) | ✅ JavaScript racchiude tutte le operazioni sui dati e le fasi critiche del processo in if () /else if () blocchi |
| Piattaforma | Componenti Web Lightning (LWC) | ✅ Tutte le funzioni di @wire utilizzano le proprietà data e error fornite dall’API |
| Piattaforma | Componenti Web Lightning (LWC) | ✅ Tutte le if (error)/else if (error) istruzioni contengono logica per elaborare gli errori e fornire messaggi informativi |
Anti-schemi
| Dove cercare | Che brutto aspetto |
|---|---|
| Piattaforma | Apex | ⚠️ DML, SOQL, callout o altre fasi critiche del processo non racchiuse in blocchi try-catch |
| Piattaforma | Apex | ⚠️ Non vengono utilizzati metodi di classe Database |
| Piattaforma | Apex | ⚠️ Operazioni sui dati eseguite esclusivamente con DML |
| Piattaforma | Apex | ⚠️ Le istruzioni di System.debug vengono visualizzate nel codice di produzione (e non vengono commentate) |
| Piattaforma | Aura | ⚠️ JavaScript non racchiude in modo coerente le operazioni sui dati e le fasi critiche del processo nei blocchi di try-catch |
| Piattaforma | Aura | ⚠️ I componenti utilizzano $A.error() |
| Piattaforma | Aura | ⚠️ La logica degli errori recuperabili non viene visualizzata in modo coerente nelle istruzioni di catch e i messaggi di errore agli utenti non sono chiari |
| Piattaforma | Flusso | ⚠️ I flussi non utilizzano i percorsi di errore in modo coerente o del tutto |
| Piattaforma | Flusso | ⚠️ Messaggi di errore personalizzati non utilizzati, in modo che gli utenti visualizzino il messaggio predefinito “Si è verificato un errore non gestito in questo flusso” |
| Piattaforma | Componenti Web Lightning (LWC) | ⚠️ Le funzioni di @wire non utilizzano le proprietà data e error fornite dall’API (o non le utilizzano in modo coerente) |
| Piattaforma | Componenti Web Lightning (LWC) | ⚠️ Se utilizzate, le istruzioni if (error)/else if (error) non contengono in realtà logica per elaborare gli errori e fornire messaggi di errore utili |
| Piattaforma | Componenti Web Lightning (LWC) | ⚠️ JavaScript non utilizza in modo coerente if () /else if () blocchi con operazioni sui dati o fasi del processo critiche |