salesforce-flow-design

Par github · awesome-copilot

Décisions d'architecture Salesforce Flow, sélection du type de flow, validation de la sécurité bulk et standards de gestion des erreurs. Utilisez cette skill lors de la conception ou de la révision de flows Record-Triggered, Screen, Autolaunched, Scheduled ou Platform Event pour garantir la sélection correcte du type, l'absence de DML/Get Records dans les boucles, la présence de fault connectors sur tous les éléments modifiant des données, et les vérifications appropriées de densité d'automatisation avant déploiement.

npx skills add https://github.com/github/awesome-copilot --skill salesforce-flow-design

Conception et validation des Salesforce Flow

Appliquez ces vérifications à chaque Flow que vous concevez, créez ou examinez.

Étape 1 — Confirmer que Flow est le bon outil

Avant de concevoir un Flow, vérifiez qu'une option déclarative plus légère ne peut pas résoudre le problème :

Besoin Meilleur outil
Calculer une valeur de champ sans effets secondaires Champ de formule
Empêcher un enregistrement invalide d'être sauvegardé avec un message Règle de validation
Sommer ou compter les enregistrements enfants sur un parent Champ de résumé
Logique multi-objet complexe, callouts ou haut volume Apex (Queueable / Batch) — pas Flow
Tout le reste Flow ✓

Si vous créez un Flow qui pourrait être remplacé par un champ de formule ou une règle de validation, demandez à l'utilisateur de confirmer que le besoin est réellement plus complexe.

Étape 2 — Sélectionner le type de Flow correct

Cas d'usage Type de Flow Contrainte clé
Mettre à jour un champ sur le même enregistrement avant sa sauvegarde Record-Triggered avant sauvegarde Impossible d'envoyer des emails, faire des callouts ou modifier les enregistrements liés
Créer/mettre à jour les enregistrements liés, emails, callouts Record-Triggered après sauvegarde S'exécute après commit — éviter les pièges de récursion
Guider un utilisateur à travers un processus UI multi-étapes Screen Flow Ne peut pas être déclenché automatiquement par un événement d'enregistrement
Logique réutilisable appelée depuis un autre Flow Autolaunched (Subflow) Les variables d'entrée/sortie définissent le contrat
Logique appelée depuis Apex @InvocableMethod Autolaunched (Invocable) Doit déclarer les variables d'entrée/sortie
Traitement par lot basé sur le temps Scheduled Flow S'exécute en contexte batch — respecter les limites de gouvernance
Répondre aux événements (Platform Events / CDC) Platform Event–Triggered S'exécute de façon asynchrone — cohérence finale

Règle de décision : choisir avant-sauvegarde quand vous avez besoin de modifier uniquement les champs du propre enregistrement déclencheur. Passer à après-sauvegarde dès que vous devez toucher des enregistrements liés, envoyer des emails ou faire des callouts.

Étape 3 — Checklist de sécurité en masse

Ces modèles provoquent des défaillances de limite de gouvernance à grande échelle. Vérifiez-les tous avant l'activation du Flow.

DML dans les boucles — Défaillance automatique

Élément Loop
  └── Create Records / Update Records / Delete Records  ← ❌ DML inside loop

Correctif : collectez les enregistrements à l'intérieur de la boucle dans une variable de collection, puis exécutez l'élément DML en dehors de la boucle.

Get Records dans les boucles — Défaillance automatique

Élément Loop
  └── Get Records  ← ❌ SOQL inside loop

Correctif : effectuez la requête Get Records avant la boucle, puis bouclez sur la variable de collection.

Modèle de masse correct

Get Records — collectez tous les enregistrements en une seule requête
└── Boucler sur la variable de collection
    └── Decision / Assignment (pas de DML, pas de Get Records)
└── Après la boucle : Create/Update/Delete Records — une seule opération DML

Transform vs Loop

Quand l'objectif est de remodeler une collection (par exemple, mapper les valeurs de champs d'un objet à un autre), utilisez l'élément Transform au lieu d'un modèle Loop + Assignment. Transform est sûr en masse par conception et produit des graphiques Flow plus propres.

Étape 4 — Exigences du chemin de défaillance

Chaque élément susceptible de défaillir à l'exécution doit avoir un connecteur de défaillance. Les Flows sans chemins de défaillance exposent les erreurs système brutes aux utilisateurs.

Éléments qui nécessitent des connecteurs de défaillance

  • Create Records
  • Update Records
  • Delete Records
  • Get Records (lors de l'accès à un enregistrement requis qui pourrait ne pas exister)
  • Send Email
  • HTTP Callout / External Service action
  • Apex action (invocable)
  • Subflow (si le subflow peut générer une défaillance)

Modèle de gestionnaire de défaillance

Connecteur de défaillance → Log Error (Create Records sur un objet de journalisation ou déclencher un Platform Event)
                         → Élément Screen avec message convivial (Screen Flows)
                         → Stop / End element (Record-Triggered Flows)

Ne connectez jamais un chemin de défaillance au même élément qui a défailli — cela crée une boucle infinie.

Étape 5 — Vérification de la densité d'automatisation

Avant le déploiement, vérifiez qu'il n'y a pas d'automatisations superposées sur le même objet et le même événement de déclenchement :

  • Autres Flows Record-Triggered actifs sur la même combinaison Object + When to Run
  • Règles Process Builder héritées encore actives sur le même objet
  • Règles Workflow qui se déclenchent sur les mêmes modifications de champ
  • Apex triggers qui s'exécutent également dans le même contexte before insert / after update

Les automatisations superposées peuvent provoquer un ordre inattendu, une récursion et des défaillances de limite de gouvernance. Documentez l'inventaire d'automatisation de l'objet avant activation.

Étape 6 — Lignes directrices UX de Screen Flow

  • Chaque chemin à travers un Screen Flow doit atteindre un élément End — pas de branches orphelines.
  • Fournissez une option de navigation Back sur les flows multi-étapes, sauf si la navigation arrière corromprait les données.
  • Utilisez lightning-input et des composants conformes à SLDS pour toutes les entrées utilisateur — n'utilisez pas d'éléments de formulaire HTML.
  • Validez les entrées requises sur l'écran avant que l'utilisateur puisse avancer — utilisez les règles de validation Flow sur l'écran.
  • Gérez l'élément Pause si le flow pourrait avoir besoin d'attendre une action utilisateur entre les sessions.

Étape 7 — Sécurité du déploiement

Déployer en tant que brouillon    →   Tester avec 1 enregistrement   →   Tester avec 200+ enregistrements   →   Activer
  • Toujours déployer en tant que Draft en premier et tester en détail avant activation.
  • Pour les Record-Triggered Flows : testez avec les conditions d'entrée exactes (par exemple ISCHANGED(Status) — assurez-vous que les données de test déclenchent réellement la condition).
  • Pour les Scheduled Flows : testez avec un petit lot dans un sandbox avant d'activer en production.
  • Vérifiez le score Automation Density pour l'objet — plus de 3 automatisations actives sur un seul objet augmente le risque lié à l'ordre d'exécution.

Référence rapide — Résumé des anti-modèles de Flow

Anti-modèle Risque Correctif
Élément DML dans une Loop Exception de limite de gouvernance Déplacer DML en dehors de la boucle
Get Records dans une Loop Exception de limite de gouvernance SOQL Requête avant la boucle
Pas de connecteur de défaillance sur élément DML/email/callout Exception non gérée exposée à l'utilisateur Ajouter un chemin de défaillance à chaque élément de ce type
Mettre à jour l'enregistrement de déclenchement dans un flow après-sauvegarde sans garde de récursion Boucles de déclenchement infinies Ajouter une condition d'entrée ou une variable de garde de récursion
Boucler directement sur la collection $Record Comportement incorrect à grande échelle Assigner à une variable de collection en premier, puis boucler
Process Builder encore actif à côté d'un nouveau Flow Double exécution, ordre inattendu Désactiver Process Builder avant d'activer le Flow
Screen Flow sans élément End sur toutes les branches Erreur d'exécution ou utilisateur bloqué Assurez-vous que chaque branche aboutit à un élément End

Skills similaires