Excellence opérationnelle - Schémas d’automatisation


En savoir plus sur l’excellence opérationnelle bien archivée → Automatisation et efficacité

Modèles

Où chercherÀ quoi ressemble le bien
Plate-forme | Tableaux de bord✅ Toutes les métriques associées aux indicateurs de performance clés sont incluses dans au moins un tableau de bord
Plate-forme | Documentation✅ Les sorties de chaque automatisation sont mesurables et limitées dans le temps
Plate-forme | Documentation✅ Les parties prenantes responsables sont répertoriées pour chaque indicateur de performance clé

Anti-modèles

Où chercherÀ quoi ressemble mal
Plate-forme | Tableaux de bord⚠️ Les rapports sur les indicateurs de performance clés n’existent pas ou il manque des métriques sur certains indicateurs de performance clés dans les tableaux de bord
Plate-forme | Documentation⚠️ Les indicateurs de performance clés existent sans parties prenantes responsables
Plate-forme | Documentation⚠️ Les indicateurs de performance clés n’existent pas pour les automatisations ou ont des délais de mesure imprécis

Modèles

Où chercherÀ quoi ressemble le bien
Plate-forme | Flux✅ Flow Builder est utilisé pour l’automatisation déclenchée par un enregistrement (remplacement du Générateur de processus et des règles de workflow)
Plate-forme | Flux✅ Les flux déclenchés par un enregistrement avec une exécution avant la sauvegarde sont utilisés pour la population de champs avant la création de l’enregistrement
Plate-forme | Flux✅ Les flux gèrent la logique de décision, les boucles, les appels d’API, les opérations DML et l’orchestration complexe à plusieurs étapes
Plate-forme | Flux✅ Le contrôle des transactions de flux est utilisé pour engager des modifications intermédiaires si nécessaire
Plate-forme | Flux✅ Le traitement des défauts est implémenté pour une récupération gracieuse des erreurs dans les flux
Plate-forme | Flux✅ Les flux d’écran réactifs offrent des expériences utilisateur dynamiques
Plate-forme | Flux✅ L’automatisation déclarative est choisie lorsque les utilisateurs professionnels ou les administrateurs doivent modifier la logique sans implication du développeur
Plate-forme | Flux✅ Les variables ne référencent pas les valeurs codées en dur (pour les types d’enregistrement, les utilisateurs, etc.)
Plate-forme | Flux✅ Les flux transfèrent la logique à Apex dans des contextes de volume de données important
Plate-forme | Flux✅ Les flux secondaires sont utilisés pour des sections de processus qui doivent être réutilisées dans l’ensemble de l’entreprise
Plate-forme | Flux✅ Tous les flux lancés automatiquement utilisent des éléments de décision et/ou d’interruption pour évaluer les critères d’entrée et empêcher les boucles infinies ou les exécutions sur des volumes de données importants
Plate-forme | Flux✅ Les utilisateurs sont invités à fournir des données uniquement lorsque les données système existantes ne peuvent pas être utilisées
Plate-forme | Flux✅ Les flux sont organisés dans une structure hiérarchique composée d’un flux principal et de flux secondaires de support
Plate-forme | Flux✅ Toutes les entrées utilisateur ont un but clair dans le flux
Plate-forme | Flux✅ Chaque flux sert un seul objectif spécifique
Plate-forme | Flux✅ Chaque étape effectue une tâche spécifique, granulaire
Plate-forme | Flux✅ Tous les flux lancés dans le contexte de l’utilisateur abstraits transactions de contexte système à des flux secondaires, toujours placés après l’élément Interrompre pour créer une transaction
Plate-forme | Flux✅ Tous les flux déclenchés par un enregistrement ont des valeurs d’ordre de déclenchement remplies
Plate-forme | Flux✅ Les flux impliquant des appels système externes ou des processus longs utilisent des chemins asynchrones
Plate-forme | Flux✅ Des séquences complexes d’opérations de données associées sont créées avec Orchestrateur (au lieu d’invoquer plusieurs flux secondaires dans un flux monolithique)
Plate-forme | Validation✅ L’intégrité des données est appliquée au niveau de la plate-forme en utilisant des règles de validation, des règles de duplication et des champs obligatoires
Plate-forme | Validation✅ Règles de validation empêchant la saisie de données non valides avant l’enregistrement (plus efficace que la validation du déclencheur)
Plate-forme | Processus d’approbation✅ L’acheminement des approbations à plusieurs étapes gère les chemins d’approbation parallèles et séquentiels avec les approbateurs délégués
Plate-forme | Processus d’approbation✅ L’architecture d’approbation prend en compte les scénarios d’exception (tous les approbateurs en vacances, exigence métier urgente contournant l’approbation normale)

Anti-modèles

Où chercherÀ quoi ressemble mal
Plate-forme | Flux⚠️ Générateur de processus et règles de workflow utilisées pour la nouvelle automatisation (Flow Builder est la direction stratégique)
Plate-forme | Flux⚠️ Automatisation programmatique utilisée lorsque les utilisateurs métiers ou les administrateurs doivent modifier la logique sans implication du développeur
Plate-forme | Flux⚠️ Les flux manquent de gestion des défauts entraînant une mauvaise reprise après erreur
Plate-forme | Flux⚠️ Les variables ont des valeurs codées en dur
Plate-forme | Flux⚠️ Les flux doivent être désactivés manuellement avant les chargements de données en masse
Plate-forme | Flux⚠️ Les parties d’un flux sont répétées à travers les flux plutôt que d’utiliser des flux secondaires
Plate-forme | Flux⚠️ Les flux déclenchent des avis « exception non gérée »
Plate-forme | Flux⚠️ Même les simples flux entraînent régulièrement des erreurs liées aux limites du gouverneur
Plate-forme | Flux⚠️ Les flux nécessitent des entrées supplémentaires pour fournir le contexte
Plate-forme | Flux⚠️ Les flux servent plusieurs objectifs
Plate-forme | Flux⚠️ Les groupes d’étapes associés contiennent des fonctionnalités qui chevauchent les groupes d’étapes d’autres flux
Plate-forme | Flux⚠️ Les flux demandent des entrées utilisateur lorsque des données stockées peuvent être utilisées à la place
Plate-forme | Flux⚠️ Les flux nécessitent des entrées dont les données ne sont pas utilisées
Plate-forme | Flux⚠️ Exécution de DML en utilisant une collection sortie du composant d’écran (en exploitant le paramètre « Utiliser les ID et toutes les valeurs de champ d’un enregistrement ou d’une collection d’enregistrements » dans l’élément Créer, Mettre à jour ou Supprimer lorsque la collection est sortie du composant d’écran)
Plate-forme | Flux⚠️ Les flux déclenchés par un enregistrement n’utilisent pas du tout les attributs d’ordre de déclenchement ou n’utilisent pas de façon cohérente les valeurs d’ordre de déclenchement
Plate-forme | Flux⚠️ Chemins asynchrones non utilisés de façon cohérente ou du tout
Plate-forme | Flux⚠️ Les grands flux monolithiques tentent de coordonner des séquences complexes d’opérations de données associées (avec ou sans flux secondaire)
Plate-forme | Processus d’approbation⚠️ L’architecture d’approbation ne prend pas en compte les scénarios d’exception (tous les approbateurs en vacances, exigences métiers urgentes)
Plate-forme | Validation⚠️ Intégrité des données appliquée uniquement dans les déclencheurs au lieu de règles de validation (validation des déclencheurs moins efficace et plus complexe)

Modèles

Où chercherÀ quoi ressemble le bien
Plate-forme | Apex✅ L’infrastructure du gestionnaire de déclencheur applique automatiquement le déclencheur unique par objet, le traitement en masse, la séparation des préoccupations et la prévention de l’exécution récursive
Plate-forme | Apex✅ Déclencher la délégation des gestionnaires aux classes de service pour la logique métier, en maintenant une séparation claire des préoccupations
Plate-forme | Apex✅ Les déclencheurs utilisent la protection contre la récursion en utilisant des indicateurs statiques ou une classe de contrôle de récursion dédiée
Plate-forme | Apex✅ Future Apex est utilisé avec parcimonie, pour les appels externes ou l’objet système DML
Plate-forme | Apex✅ Les invocations Apex asynchrones utilisent Queueable pour « enchaîner » les DML complexes entre les transactions
Plate-forme | Apex✅ Apex par lot est utilisé pour les volumes de données importants (traite les grandes quantités de données avec des limites de gouverneur dédiées par segment)
Plate-forme | Apex✅ Les tâches par lot ont un traitement des erreurs qui consigne les enregistrements échoués sans arrêter l’exécution par lot complète
Plate-forme | Apex✅ L’API de transfert en masse est utilisée uniquement lorsque de grandes quantités de données doivent être traitées (API SOAP et REST natives exploitées pour de petites quantités de données)
Plate-forme | Apex✅ Apex Queueable est utilisé pour l’orchestration de workflows complexes, les appels externes avec une logique de nouvelle tentative, et le traitement bénéficiant de limites asynchrones
Plate-forme | Apex✅ Scheduled Apex exécute le traitement sur des planifications fixes pour la maintenance nocturne, la génération de rapports quotidiens, la synchronisation de l’intégration périodique et les règles métiers temporelles
Plate-forme | Normes de conception✅ Les cas d’utilisation d’opérations synchrones et asynchrones dans des automatisations sont clairement décrits dans le cadre des normes de conception
Plate-forme | Documentation✅ Les parcours d’exécution planifiés et potentiels pour les automatisations sont clairement indiqués

Anti-modèles

Où chercherÀ quoi ressemble mal
Plate-forme | Apex⚠️ Plusieurs déclencheurs sur un seul objet avec un ordre d’exécution imprévisible et une logique de chevauchement
Plate-forme | Apex⚠️ Logique métier incorporée directement dans des fichiers de déclencheur rendant les tests difficiles
Plate-forme | Apex⚠️ Aucune infrastructure de gestionnaire de déclencheur ou schémas de déclencheur incohérents entre les objets
Plate-forme | Apex⚠️ Les tâches Apex par lot ont une très petite taille de portée (p. ex. taille de la portée = 1)
Plate-forme | Apex⚠️ Apex par lot utilisé pour les appels externes (volumes importants de données Salesforce poussés vers le système externe en utilisant Apex par lot)
Plate-forme | Apex⚠️ Fonctionnalités Apex asynchrones utilisées arbitrairement (Méthodes futures et Apex Queueable utilisées de façon incohérente ou interchangeable)
Plate-forme | Apex⚠️ Apex asynchrone rarement utilisé
Plate-forme | Apex⚠️ Les opérations de base de données n’ont pas de logique claire, cohérente pour transmettre l’exécution à Apex Batch en cas de besoin
Plate-forme | Normes de conception⚠️ Les cas d’utilisation des opérations synchrones et asynchrones ne sont pas abordés
Plate-forme | Documentation⚠️ L’invocation de l’automatisation n’est pas documentée

Modèles

Où chercherÀ quoi ressemble le bien
Plate-forme | Événements de plate-forme✅ Les événements de plate-forme sont utilisés pour l’automatisation pilotée par l’événement qui découple les éditeurs des abonnés
Plate-forme | Événements de plate-forme✅ Les éditeurs ne sont pas au courant des abonnés et publient feu-et-oubli
Plate-forme | Événements de plate-forme✅ Plusieurs abonnés réagissent indépendamment aux événements via des flux déclenchés par un événement de plate-forme, des déclencheurs Apex ou des intégrations externes
Plate-forme | Événements de plate-forme✅ Les ID de relecture sont utilisés pour relire les événements manqués depuis n’importe quel point de la période de rétention de 72 heures
Plate-forme | Événements de plate-forme✅ Les événements de plate-forme activent la communication inter-organisations, la notification système externe et l’orchestration de workflows internes

Anti-modèles

Où chercherÀ quoi ressemble mal
Plate-forme | Événements de plate-forme⚠️ Couplage direct entre éditeurs et abonnés empêchant l’automatisation composable
Plate-forme | Événements de plate-forme⚠️ La mise à niveau du niveau du compte appelle directement la mise à jour de l’opportunité, la notification de l’équipe du compte et la synchronisation de l’entrepôt de données en une seule transaction (le couplage étroit nécessite des modifications de la logique du compte chaque fois qu’un nouveau traitement en aval est nécessaire)
Plate-forme | Apex⚠️ Publier immédiatement Événements de plate-forme utilisés ad hoc (événements en temps réel utilisés au lieu de Publier après validation, quels que soient les exigences de commande de publication ou les risques de verrouillage d’enregistrement)

Modèles

Où chercherÀ quoi ressemble le bien
Plate-forme | Apex✅ Les instructions SOQL utilisent des opérateurs de comparaison de logique positive (INCLUDES, IN) comme logique principale ou uniquement
Plate-forme | Apex✅ SOQL évite les = NULL, les != NULL ou les utilise avec parcimonie après des opérateurs de comparaison positifs
Plate-forme | Apex✅ SOQL n’utilise pas d’instructions LIMIT 1
Plate-forme | Apex✅ SOQL n’utilise pas le mot-clé ALL ROWS
Plate-forme | Apex✅ SOQL n’est pas affiché dans les boucles
Plate-forme | Apex✅ Les critères génériques sont affichés en SOSL (pas en SOQL)
Plate-forme | Apex✅ Les instructions SOQL évitent les comparaisons de LIKE ou de texte partiel
Plate-forme | Apex✅ SOQL est enveloppé dans des blocs de try-catch
Plate-forme | Apex✅ Les variables ne référencent pas les valeurs codées en dur (pour les types d’enregistrement, les utilisateurs, etc.)
Plate-forme | Apex✅ Chaque classe sert un but unique et spécifique
Plate-forme | Apex✅ Chaque méthode effectue une tâche spécifique, granulaire
Plate-forme | Apex✅ Toutes les variables d’entrée ont un objectif clair dans la classe
Plate-forme | Apex✅ L’exécution de code nécessite un nombre minimal de ressources

Anti-modèles

Où chercherÀ quoi ressemble mal
Plate-forme | Apex⚠️ Les instructions SOQL utilisent des critères NOT, NOT IN comme opérateur principal ou uniquement de comparaison (non sélectif)
Plate-forme | Apex⚠️ Les instructions SOQL utilisent le mot-clé ALL ROWS (non sélectif)
Plate-forme | Apex⚠️ Les instructions SOQL utilisent des critères = NULL, != NULL comme opérateur principal ou uniquement de comparaison (non sélectif)
Plate-forme | Apex⚠️ Les variables ont des valeurs codées en dur
Plate-forme | Apex⚠️ SOQL apparaît dans les boucles
Plate-forme | Apex⚠️ Les instructions SOQL utilisent fréquemment des critères de filtrage LIKE et génériques (non sélectifs)
Plate-forme | Apex⚠️ SOQL non encapsulé dans des blocs de try-catch
Plate-forme | Apex⚠️ Les instructions SOQL utilisent LIMIT 1 (non sélectif)
Plate-forme | Apex⚠️ SOSL rarement ou pas systématiquement utilisé pour les critères de sélection de caractères génériques
Plate-forme | Apex⚠️ Les classes servent plusieurs objectifs
Plate-forme | Apex⚠️ Les méthodes exécutent plusieurs tâches ou les méthodes exécutent des tâches qui ne correspondent pas à l’objectif déclaré de la classe dont elles font partie
Plate-forme | Apex⚠️ Les variables d’entrée ne sont pas réellement utilisées dans les méthodes
Plate-forme | Apex⚠️ Les méthodes récupèrent inutilement les données de la base de données ou de systèmes externes

Modèles

Où chercherÀ quoi ressemble le bien
Plate-forme | Apex✅ Les exceptions personnalisées sont utilisées pour créer un message d’erreur avancé et une logique
Plate-forme | Apex✅ Le code encapsule toutes les étapes DML, SOQL, appels externes et autres étapes de processus critiques dans des blocs de try-catch
Plate-forme | Apex✅ Les méthodes de classe de base de données peuvent être utilisées exclusivement pour toutes les opérations de données (au lieu de DML)
Plate-forme | Apex✅ Dans des contextes asynchrones et en masse, des méthodes de classe Database sont utilisées au lieu de DML
Plate-forme | Aura✅ JavaScript regroupe toutes les opérations de données et les étapes critiques du processus dans des blocs de try-catch
Plate-forme | Aura✅ Dans les blocs try-catch, la Error JavaScript native est utilisée dans les instructions throw (pas d’utilisation de $A.error())
Plate-forme | Aura✅ Toute la logique d’erreur récupérable est affichée dans les instructions catch et fournit des messages utilisateur clairs
Plate-forme | Flux✅ Les flux avec des opérations de données, des appels externes et d’autres logiques de traitement critiques ont des chemins de défaut pour toutes les actions clés
Plate-forme | Flux✅ Les flux d’écran utilisent régulièrement des connecteurs de défaut pour afficher les erreurs aux utilisateurs
Plate-forme | Flux✅ Les messages d’erreur personnalisés sont configurés pour les erreurs affichées à l’écran
Plate-forme | Composants Web Lightning (LWC)✅ JavaScript encapsule toutes les opérations de données et les étapes critiques du processus dans if ()/else if () blocs
Plate-forme | Composants Web Lightning (LWC)✅ Toutes les fonctions de @wire utilisent les propriétés data et error fournies par l’API
Plate-forme | Composants Web Lightning (LWC)✅ Tous les if (error)/else if (error) relevés contiennent une logique de traitement des erreurs et fournissent des messages informatifs

Anti-modèles

Où chercherÀ quoi ressemble mal
Plate-forme | Apex⚠️ DML, SOQL, appels externes ou autres étapes critiques du processus pas toujours encapsulées dans des blocs try-catch
Plate-forme | Apex⚠️ Aucune méthode de classe Database n’est utilisée
Plate-forme | Apex⚠️ Opérations sur les données effectuées exclusivement avec DML
Plate-forme | Apex⚠️ Les instructions de System.debug apparaissent dans le code de production (et ne sont pas commentées)
Plate-forme | Aura⚠️ JavaScript n’enveloppe pas de façon cohérente les opérations de données et les étapes critiques du processus dans des blocs de try-catch
Plate-forme | Aura⚠️ Les composants utilisent $A.error()
Plate-forme | Aura⚠️ La logique d’erreur récupérable n’est pas toujours affichée dans les instructions de catch, et les messages d’erreur aux utilisateurs ne sont pas clairs
Plate-forme | Flux⚠️ Les flux n’utilisent pas de chemins de défaut cohérents ou du tout
Plate-forme | Flux⚠️ Messages d’erreur personnalisés non utilisés, de sorte que les utilisateurs affichent le message par défaut « Un défaut non géré s’est produit dans ce flux »
Plate-forme | Composants Web Lightning (LWC)⚠️ Les fonctions de @wire n’utilisent pas les propriétés data et error fournies par l’API (ou ne les utilisent pas de façon cohérente)
Plate-forme | Composants Web Lightning (LWC)⚠️ Si elles sont utilisées, les instructions if (error)/else if (error) ne contiennent pas réellement de logique pour traiter les erreurs et fournir des messages d’erreur utiles
Plate-forme | Composants Web Lightning (LWC)⚠️ JavaScript n’utilise pas if ()/else if () blocs de façon cohérente avec des opérations sur les données ou des étapes de processus critiques