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 |