CommunityRédaction et éditiongithub.com

pariveo/salesforce-agent-skills

Crée, audite et migre les Flows Salesforce en utilisant les éléments de plateforme actuels (Collection Filter, Transform incluant sommes, comptages et jointures, jeux de choix d'enregistrements et de listes de choix, écrans réactifs, actions d'écran, mises à jour avant enregistrement, erreurs personnalisées, chemins asynchrones et planifiés, déclencheurs d'événements de plateforme et attentes, actions d'agent) au lieu des motifs boucle-et-décision. À utiliser pour tout travail sur les Flows : rédaction ou révision de métadonnées .flow-meta.xml, spécifications de construction Flow Builder, écrans, Flows déclenchés par enregistrement, lancés automatiquement ou planifiés, migration de Process Builder ou de règles de workflow, et dépannage de Flows.

Qu'est-ce que salesforce-agent-skills ?

Ce skill est conçu pour les développeurs Salesforce et les ingénieurs en automatisation qui créent, audirent ou migrent des Flows Salesforce (à la fois via l'interface Flow Builder et les métadonnées .flow-meta.xml). Il remplace les motifs obsolètes (boucles, décisions, assignations) par des éléments de plateforme modernes comme Collection Filter, Transform (sommes, comptages, jointures), les écrans réactifs, les actions d'écran, les mises à jour avant enregistrement, les erreurs personnalisées, les chemins asynchrones et planifiés, les déclencheurs d'événements de plateforme et les actions d'agent. Le skill fournit une table de décision claire qui mappe chaque besoin fonctionnel à l'élément moderne approprié, à sa version d'API minimale, à un exemple déployé et vérifié, et au motif hérité qu'il remplace. Il inclut des instructions étape par étape pour un flux de travail structuré : comprendre les conventions de l'équipe, déterminer la version API de l'org, classer la tâche, cartographier les exigences, écrire les métadonnées, exécuter un vérificateur automatisé (scripts/check-flow.mjs), valider le déploiement, puis livrer avec une checklist d'examen. Le skill insiste sur le fait que tout écart par rapport aux éléments modernes (une boucle) doit être explicitement justifié via des "conditions d'échappement" documentées. Il prend en charge toutes les plateformes où les outils CLI Salesforce (sf) et Node.js sont disponibles, mais peut également fournir des spécifications de construction sans accès CLI. Le skill comprend des exemples déployés dans examples/flows/, des références de domaine pour les limites, et des conseils pour la migration à partir de Process Builder et des règles de workflow.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pariveo/salesforce-agent-skills/tree/HEAD/skills/salesforce-flow-modernizer

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Modernisation des Flows Salesforce

Les modèles par défaut utilisent les motifs de Flow de leurs données d'entraînement : Boucle + Décision + Assignation, DML à l'intérieur des boucles, mises à jour après enregistrement de l'enregistrement déclencheur, écrans supplémentaires pour recalculer. Ce skill les remplace par les éléments actuels et vous fournit des métadonnées vérifiées par déploiement pour chacun dans examples/.

Ces règles déterminent la plupart des décisions :

  1. L'élément moderne est la valeur par défaut. Une Boucle nécessite une condition d'échappement déclarée (ci-dessous). Lorsque le XML d'un élément est inconnu, copiez la forme de son fichier d'exemple au lieu d'éviter l'élément.
  2. Non vérifiable ne signifie pas indisponible. La disponibilité suit la version API de l'org et le tableau ci-dessous. Vous n'avez pas besoin d'un accès web pour utiliser un élément dont le minimum est inférieur ou égal à la version de l'org. La validation de déploiement est le contrôle.
  3. Chaque boucle et chaque repli sont expliqués. Nommez l'échappement dans la description de la Boucle et dans le livrable. Sans échappement nommé, n'écrivez pas la boucle.

Flux de travail

Copiez cette liste de contrôle dans vos notes de travail et cochez-la :

- [ ] 1. Lire references/org-conventions.md ; lister les emplacements non définis dont cette tâche dépend
- [ ] 2. Établir la version API de l'org
- [ ] 3. Classifier la tâche : construction, audit ou migration ; type de Flow, événement déclencheur, exécution par qui
- [ ] 4. Cartographier chaque exigence à travers la table de décision ; ouvrir chaque exemple que vous utilisez
- [ ] 5. Écrire les métadonnées (ou la spécification de construction)
- [ ] 6. Exécuter scripts/check-flow.mjs ; corriger chaque ERREUR, décider chaque AVERTISSEMENT
- [ ] 7. Valider le déploiement lorsqu'un org est disponible ; sinon étiqueter le XML comme non validé
- [ ] 8. Exécuter la liste de contrôle d'examen dans references/delivery.md et livrer

Étape 1. Conventions. Un emplacement rempli dans org-conventions.md prime sur les valeurs par défaut de ce skill. Un emplacement vide signifie que la valeur par défaut s'applique et le livrable le liste sous décisions ouvertes.

Étape 2. Version API. Avec un org, sf org display --target-org <alias> affiche "Api Version". Sans org, utilisez sourceApiVersion du sfdx-project.json du projet, ou 67.0 si celui-ci est également manquant, et dites-le. Définissez le apiVersion des nouveaux Flow sur cette version.

Étape 3. Classifier. Flow existant ou nouvelle construction. Type de Flow (écran, déclenché par enregistrement avant ou après enregistrement, lancé automatiquement, déclenché par planification, déclenché par événement de plateforme). Objet déclencheur et événement déclencheur, répondus à partir de l'exigence avant d'ouvrir un exemple. La question est de savoir si un enregistrement créé répondant déjà à la condition compte, ou seulement un qui change pour y répondre. Créer et mettre à jour avec "uniquement lorsque mis à jour pour répondre à la condition" se déclenche lors d'une telle création, tandis que mise à jour uniquement ne le fait pas. Si l'exigence ne le dit pas, demandez ou indiquez l'hypothèse (record-triggered.md). Qui l'exécute (utilisateur, système, agent). Ce qui doit se produire de manière synchrone. Pour les Flows d'écran, la surface qui l'incorpore et ce qu'il prend et retourne.

Étape 4. Cartographier. Pour chaque opération de collection, liste de choix, interaction d'écran, mise à jour d'enregistrement, besoin de synchronisation et intégration, prenez la ligne du tableau de décision. Lisez le fichier d'exemple pour chaque élément que vous allez écrire, et la référence de domaine pour ses limites. Lisez uniquement les références pour les domaines que la tâche touche.

Étape 5. Écrire. Les métadonnées vont dans force-app/main/default/flows/<ApiName>.flow-meta.xml (ajustez au répertoire de package du projet). Conventions de nommage : noms API de Flow Objet_Verbe_Condition, noms d'éléments Type_But (Get_Open_Cases, Filter_High_Priority, Transform_To_Tasks, Dec_Is_Renewal), sauf si org-conventions.md dit autrement. Définissez <status>Draft</status> sauf si l'utilisateur demande explicitement un Flow actif ou que l'emplacement de la politique d'activation le dit. Les exemples sont Actifs uniquement parce qu'ils ont été exécutés. Gardez tous les éléments d'un même type ensemble dans le fichier (les groupes divisés échouent au déploiement). Sans accès CLI, livrez une spécification de construction au format dans delivery.md.

Étape 6. Vérifier. Exécutez le vérificateur sur chaque Flow que vous avez écrit ou qu'on vous a demandé de réviser. Il nécessite uniquement Node :

node <skill-dir>/scripts/check-flow.mjs --api <org-api-version> force-app/main/default/flows/<ApiName>.flow-meta.xml

Les ERREURS sont des motifs hérités ou des formes que la plateforme rejette, corrigez-les. Les AVERTISSEMENTS nécessitent une décision, que vous indiquez dans le livrable.

Étape 7. Valider. Avec un org authentifié, nommez l'org explicitement au lieu de vous fier à l'org par défaut de la CLI :

sf project deploy validate --source-dir force-app/main/default/flows/<ApiName>.flow-meta.xml --target-org <alias>

Corrigez en fonction de l'erreur exacte et réexécutez. Le XML qui n'a pas été validé est étiqueté comme non validé dans le livrable, clairement.

Étape 8. Réviser et livrer. Exécutez la liste de contrôle d'examen dans delivery.md. Terminez le livrable par ce bloc, chaque ligne remplie :

Mode : métadonnées | spécification de construction
Vérificateur : <commande> → <n> erreurs, <n> avertissements (<décision par avertissement>)
Validation de déploiement : <commande et résultat> | non exécutée, non validée (<raison>)
Statut : Brouillon | Actif (<pourquoi>)
Contexte d'exécution : <runInMode ou défaut, et ce que cela signifie pour ce type de Flow>
Échappements : <E-id et raison par boucle ou repli> | aucun
Décisions ouvertes : <emplacements de convention non définis dont ce Flow dépend> | aucun

Valeurs par défaut du contexte d'exécution (runInMode DefaultMode) : les Flows déclenchés par enregistrement, déclenchés par planification et déclenchés par événement de plateforme s'exécutent dans le contexte système sans partage. Les Flows d'écran et lancés automatiquement s'exécutent dans le contexte utilisateur lorsqu'ils sont lancés depuis l'interface utilisateur ou l'API REST, et dans le contexte de l'appelant lorsqu'ils sont appelés depuis Apex ou un autre Flow. Lancé automatiquement n'est pas "système par défaut".

Audits et migrations

Pour un Flow existant, exécutez d'abord le vérificateur dessus, puis inventoriez les motifs hérités restants par rapport à la dernière colonne du tableau de décision. Livrez le rapport d'audit défini dans delivery.md avant toute réécriture, classé par impact : limites de gouverneur, puis contexte de sécurité, puis expérience utilisateur. Ne modifiez pas le Flow sauf demande. Lorsqu'on vous le demande, suivez l'ordre du plan de migration du rapport. Décrivez les motifs, jamais les personnes qui les ont construits, car la plupart des motifs hérités étaient l'approche recommandée lorsqu'ils ont été écrits. Le mappage de Process Builder et des règles de workflow se trouve dans legacy-migration.md.

Table de décision

"Org API" est la version API d'org la plus basse qui possède l'élément (Guide du développeur Flow et API Metadata). Les exemples se trouvent dans examples/flows/, déployés et exécutés sur l'API 67.0.

BesoinUtiliserMétadonnéesOrg APIExempleRemplace
Conserver les éléments d'une collection qui correspondent aux critèresCollection Filter (conditions ou formule)collectionProcessors, FilterCollectionProcessor53Opportunity_Create_Followup_TasksBoucle + Décision + Assignation
Construire des enregistrements à partir d'une collection, remodeler les champsTransform, Maptransforms59Opportunity_Create_Followup_TasksBoucle + Assignation construisant une collection
Sommer ou compter une collectionTransform, Sum / Count. Dans les Flows avant enregistrement, Filter + Assignation AssignCount, ou une Boucle pour un Sum (E3)transforms, inputParameters59 (cible primitive 62)Opportunity_Create_Followup_Tasks, Account_Before_Save_Count_ContactsCompteurs de boucle
Combiner deux collections par une cléTransform, InnerJoin, avec le mappage dans le même Transformtransforms, JoinDefinition63Opportunity_Create_Account_Tasks_JoinedBoucles imbriquées, Get Records à l'intérieur d'une boucle
Ordonner une collectionCollection Sort (trie sur place)SortCollectionProcessor50Opportunity_Allocate_Budget_WaterfallTri manuel dans une boucle
Créer, mettre à jour ou supprimer de nombreux enregistrementsUn DML sur la collection préparéerecordCreates inputReferenceanyOpportunity_Create_Followup_TasksDML à l'intérieur d'une boucle
Options à partir d'enregistrements ou d'une liste de choixJeu de choix d'enregistrement / de liste de choixdynamicChoiceSetsanyAccount_Order_Entry_ScreenGet Records + Boucle construisant des choix
Totaux, visibilité ou texte qui suivent la saisieFormule réactive, visibilityRuleformulas, champs d'écran59Account_Order_Entry_ScreenUn deuxième écran pour recalculer
Règles de saisie sur un écranvalidationRule du composantchamps d'écran fieldsanyAccount_Order_Entry_ScreenDécision après l'écran de retour vers un écran d'erreur
Logique serveur sans quitter l'écranAction d'écran + Bouton d'actionscreens.actions, triggers59Account_Check_Pipeline_ScreenSuivant, Get Records, retour en arrière
Définir des champs sur l'enregistrement déclencheurFlow avant enregistrement, Assignation à $RecordtriggerType RecordBeforeSaveanyOpportunity_Before_Save_Set_Next_StepMise à jour après enregistrement des enregistrements sur $Record
Bloquer une sauvegarde avec un messageErreur personnaliséecustomErrors59Opportunity_Before_Save_Set_Next_StepCompensation après enregistrement
S'exécuter uniquement lorsque les champs pertinents changentConditions d'entrée, filterFormula avec ISCHANGED, "uniquement lorsque mis à jour pour répondre à la condition"start55 (formule)Opportunity_Before_Save_Set_Next_Step, Opportunity_Closed_Won_HandoverDécision comme premier élément
Appels, e-mails, DML non liés pour lesquels l'utilisateur n'a pas besoin d'attendreChemin asynchronescheduledPaths AsyncAfterCommit53Opportunity_Closed_Won_HandoverTout synchrone
Travailler avant ou après une date d'enregistrementChemin planifiéscheduledPaths RecordField51Opportunity_Closed_Won_HandoverFlow déclenché par planification interrogeant les enregistrements dus
Réagir à un événement de plateformeFlow déclenché par événement de plateformetriggerType PlatformEvent49Order_Event_Create_TaskDéclencheur Apex écrit pour démarrer la logique Flow
Pause jusqu'à l'arrivée d'un événementÉlément Wait avec un événement de plateformewaitsanyOrder_Wait_For_ConfirmationInterrogation
Logique Flow pour un agent AgentforceFlow lancé automatiquement avec des entrées et sorties décritesvariables descriptionanyCase_Get_Status_For_AgentWrapper Apex invocable
Ordre entre les Flows sur un seul objetOrdre de déclenchementtriggerOrder54Opportunity_Closed_Won_HandoverSe fier à l'ordre de création
Appeler une API RESTAction d'appel HTTPactionCalls (généré par Builder)voir la référence d'intégrationaucunApex écrit uniquement pour l'appel

Transform n'est pas autorisé dans les Flows avant enregistrement (erreur de déploiement). Avant enregistrement prime sur Transform, donc une valeur sur l'enregistrement déclencheur reste avant enregistrement, et un Sum y est une Boucle sous E3, jamais un Transform après enregistrement plus une deuxième sauvegarde. Tout le reste ci-dessus fonctionne dans chaque type de Flow qui a le concept, et les références de domaine listent les exceptions.

Conditions d'échappement

Un motif hérité est correct uniquement lorsque l'une de ces conditions s'applique. Déclarez-le dans la <description> d'une Boucle comme Escape : E<n> <raison>, et dans le livrable.

IdPermetTient uniquement lorsque
E1Une BoucleChaque élément a besoin de son propre appel à une action, un sous-Flow ou un plugin Apex qui n'accepte que des valeurs uniques. Le corps de la boucle contient cet appel.
E2Une BoucleLe résultat d'un élément dépend d'éléments antérieurs au-delà d'une somme ou d'un nombre : un solde courant, une allocation, un numéro de séquence, un round robin.
E3Une BoucleUn Flow avant enregistrement a besoin d'un Sum (Transform n'y est pas autorisé). Ceci est délibéré, car la Boucle en mémoire est moins coûteuse qu'une deuxième sauvegarde après enregistrement. Les comptages utilisent Filter + AssignCount à la place.
E4Travail sur le chemin synchroneUn élément ultérieur dans la même transaction lit le résultat, ou l'utilisateur doit le voir avant la fin de la sauvegarde.
E5Aucune fonctionnalité réactive ou d'écran plus récenteLa surface d'incorporation nommée ne les prend pas en charge : runtime Salesforce Classic, Slack (ensemble de composants limité), ou un composant que la documentation réactive liste comme non réactif.
E6Laisser un motif hérité en placePérimètre d'audit uniquement : le Flow est en dehors du changement que vous deviez apporter. Ne s'applique jamais aux Flows nouveaux ou réécrits.

Ce qui suit ne compte pas comme conditions d'échappement :

  • "Je ne peux pas vérifier que l'élément existe dans cet org" (la règle 2 s'applique, vérifiez donc la version API, puis validez le déploiement).
  • "Je ne suis pas sûr du XML" (copiez l'exemple).
  • "Une boucle est plus simple ou plus claire."
  • "Valeurs conditionnelles par élément" (utilisez IF() dans une formule Transform).
  • "Filtrer et mapper en un seul passage" (Filter, puis Transform).
  • "La surface pourrait ne pas le prendre en charge" (nommez la surface ou listez-la comme décision ouverte, car une surface inconnue n'est pas E5).
  • DML ou Get Records à l'intérieur d'une boucle. Aucun échappement ne les autorise.

Utilisez l'élément le plus simple suffisant. Cela signifie Filter seul lorsqu'il s'agit uniquement de filtrer, des choix statiques lorsque la liste d'options est fixe, et aucun sous-Flow pour une logique avec un seul appelant.

Vérifier avant d'affirmer

  • Disponibilité : version API de l'org par rapport au tableau. Traitez les fonctionnalités limitées par licence (Agentforce, Einstein, Data 360, certaines éditions d'orchestration) comme des hypothèses jusqu'à ce que l'org les confirme, et dites-le.
  • Limites et statut GA qui modifient une conception ou un résultat d'audit : citez la source officielle (help.salesforce.com, developer.salesforce.com). Ne citez pas de chiffres de mémoire, car les références de domaine donnent ceux vérifiés.

Gestion des erreurs

  • CLI manquante ou org inaccessible : livrez des métadonnées étiquetées non validées, ou une spécification de construction, et dites lequel.
  • La validation échoue : corrigez en fonction du message exact, réexécutez le vérificateur et la validation. Les références de domaine listent les erreurs de déploiement rencontrées jusqu'à présent.
  • Fonctionnalité absente de l'org (version API, édition, licence) : utilisez la ligne prise en charge la plus proche du tableau, nommez l'écart et l'échappement.

Références

Lisez celles dont la tâche a besoin :

  • org-conventions.md : les décisions de l'équipe, qui priment sur les valeurs par défaut.
  • collections.md : Filter, Sort, Transform (map, sum, count, join), DML en masse, boucles.
  • screens.md : jeux de choix, écrans réactifs, validation, actions d'écran, incorporation.
  • record-triggered.md : événements déclencheurs, conditions d'entrée, ordre de déclenchement, avant vs après enregistrement, $Record, erreurs personnalisées.
  • events.md : événements de plateforme, Wait, chemins planifiés.
  • integration.md : appels REST, actions Apex, actions de sous-Flow, actions d'agent.
  • limits.md : limites de gouverneur et de conception pour chaque élément moderne.
  • legacy-migration.md : Process Builder, règles de workflow.
  • delivery.md : format du livrable et liste de contrôle d'examen finale.

Skill basé sur les exemples et scripts dans examples/ et scripts/.

Skills associés