
Tekunda Team

Andrew Hanna

En bref : commitez chaque Flow sous la forme d'un seul fichier
.flow-meta.xml sans numéro de version, donnez à chaque Flow un seul
propriétaire par changement et interdisez à Git de merger automatiquement le XML des
Flows. Quand deux branches touchent malgré tout le même Flow, gardez un côté et
refaites l'autre changement dans Flow Builder au lieu d'éditer le XML à la main.
L'essentiel de la douleur vient des modifications parallèles et du bruit de mise en
page, pas de Git.
Un Flow n'est pas du code écrit ligne par ligne. C'est du XML généré par Flow Builder, avec quelques pièges :
locationX et locationY : déplacer une boîte
produit un diff sans aucun changement de logique. Basculer un Flow entre free-form
et auto-layout réécrit la position de tous les éléments.
force-app/main/default/flows/, nommé d'après le nom d'API du Flow, sans
suffixe de version.
status sur le Flow lui-même indique s'il est actif, et
Salesforce ne recommande plus les Flow Definitions pour l'activation.
sf project retrieve start --metadata Flow:Case_Escalation.
Vérifiez la valeur de status avant de commiter, pour qu'un brouillon ne
parte jamais par erreur.
force-app/**/flows/*.flow-meta.xml -merge à
.gitattributes. Selon la
documentation gitattributes, un
attribut merge désactivé garde la version de votre branche et déclare
un conflit. Évitez ici le raccourci binary, qui désactive aussi les
diffs, alors que vous voulez continuer à relire les changements de Flow.
Cette dernière étape est la plus importante. Un merge ligne par ligne peut produire un XML de Flow parfaitement valide mais logiquement faux, par exemple un connecteur qui pointe vers un élément supprimé par l'autre branche. Un conflit forcé coûte moins cher qu'un conflit silencieux. C'est aussi pourquoi notre guide du merge driver Git adapté à Salesforce laisse les Flows hors des motifs du driver : profils et permission sets se mergent bien nœud par nœud, la logique d'un Flow non.
git checkout --ours ou --theirs sur le fichier du Flow.
Pour les conflits sur les autres types de métadonnées, consultez comment résoudre les conflits de métadonnées Salesforce pendant un merge.
Vous déployez encore vos Flows avec des change sets ? Commencez par passer des change sets au contrôle de source, puis appliquez les étapes ci-dessus.
Des plateformes DevOps comme Gearset et Flosum ajoutent au-dessus de Git une comparaison et un déploiement qui comprennent les Flows, et Lifecycle Center de Salesforce (anciennement DevOps Center) propose, via ses outils MCP, des recommandations IA pour résoudre les conflits. Serpent résout les conflits directement dans la pull request : Serpent AI propose une résolution et attend votre revue avant de l'appliquer, et la revue de code IA est incluse dans chaque offre. Découvrez les offres Serpent, ou parcourez d'autres guides Salesforce DevOps.
Faut-il commiter les fichiers FlowDefinition ?
Non. Depuis la Metadata API v44, c'est le champ status du Flow qui pilote
l'activation, et Salesforce ne recommande plus les Flow Definitions pour cela.
Git peut-il merger automatiquement deux versions du même Flow ?
Il peut produire un merge propre sur le plan textuel, mais Git ne comprend pas la
logique d'un Flow. Forcez un conflit avec -merge et refaites un des
changements dans Flow Builder.
Pourquoi un Flow en brouillon s'est-il retrouvé dans mon dépôt ?
Un retrieve renvoie la dernière version du Flow, active ou brouillon. Vérifiez la
valeur de status avant de commiter.
Les changements de locationX et locationY comptent-ils ?
Ils ne modifient que la mise en page, pas le comportement. Relisez-les comme du bruit, et évitez de changer de mode de canvas pour qu'ils restent stables.
Sans engagement.