Gestionnaire des transactions : intégrer les approbations Salesforce

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 8 minutes de lecture
  • Intégrez les approbations Salesforce dans Transaction Manager.

    Menu

    Transaction

    Configuration de Salesforce

    Consultez ces modules et documentations Salesforce Trailheads :
    Un processus d’approbation dans Salesforce automatise les workflows d’approbation d’enregistrements dans une organisation. Il définit :
    • Étapes d’approbation : séquence des étapes et des approbateurs d’un enregistrement, par exemple, l’envoi d’une demande de congé au gestionnaire d’un employé pour approbation.
    • Actions : actions automatisées basées sur le résultat de l’approbation, telles que la mise à jour des enregistrements s’ils sont approuvés ou l’envoi de notifications s’ils sont rejetés.

    Cela rationalise le processus d’approbation et assure la cohérence.

    Workflow

    1. Accédez à Configuration, cliquez sur Processus d’approbation et sélectionnez l’enregistrement de transaction.
    2. Dans Gérer les processus d’approbation pour, sélectionnez Opportunité.
    3. Cliquez sur Créer un nouveau processus d’approbation.

      Créer un nouveau processus d’approbation

    4. Assurez-vous que l’option Ajouter Soumettre pour approbation et Historique des approbations est cochée.

      Vous pouvez spécifier des conditions, le cas échéant, dans la section Critères spécifiques à l’entrée.

    5. Choisissez Affecter automatiquement les approbateurs et définissez-le sur toute personne disposant du rôle SysAdmin.

      Affecter automatiquement des approbateurs

    6. Créez un champ de liste déroulante personnalisé dans l’enregistrement de transaction en accédant à Configuration, en cliquant sur Gestionnaire d’objets, puis sur Transaction. Assurez-vous que le champ n’est pas défini comme une liste déroulante à sélection multiple.

      Transaction

    7. Attribuez trois valeurs au champ de liste déroulante pour faire la distinction entre Approbation en attente, Approuvé et Rejeté.

      Nouveau champ personnalisé

    8. Ajoutez le champ personnalisé à la mise en page de la transaction.

      Mise en page

      Si vous avez ignoré l’étape précédente, vous pouvez ajouter le champ à la mise en page de la transaction comme suit :

      Mise en page

    9. Revenez au processus d’approbation, cliquez sur Actions de soumission initiales, cliquez sur Ajouter nouveau, puis sélectionnez Mise à jour du champ. Configurez-le avec les valeurs requises.
    10. Pour vous assurer que les champs pertinents sont mis à jour en fonction du résultat du processus d’approbation, répétez l’étape 9 pour les sections Actions d’approbation et Actions de rejet. La capture d’écran suivante montre l’option de rejet final.

      Transaction

      Si vous avez inclus les alertes par e-mail avec les mises à jour des champs, le processus d’approbation doit ressembler à ce qui suit :

      Processus d’approbation

      Si le processus d’approbation finale ne comporte que des mises à jour de champs, il doit ressembler à ce qui suit :

      Processus d’approbation

    11. Cliquez sur Activer.

      Activer

    12. Pour vous assurer que CORS inclut l’URL, dans la barre de recherche de configuration, recherchez CORS ou accédez à Configuration, cliquez sur Sécurité, puis sur CORS. Vérifiez qu’ils sont inclus dans le SCOR :

      Sécurité

    Configuration de Transaction Manager : intégrations

    Créez deux intégrations pour un événement qui seront utilisées pour soumettre l’enregistrement pour approbation via le gestionnaire des transactions.

    Remarque :
    Si vous souhaitez tester ces appels dans Postman, le point de terminaison est mon URL Salesforce : <https://logik-1e-dev-ed.develop.my.salesforce.com/>.
    1. Recevoir l’ID de l’enregistrement Salesforce : récupérez l’ID d’enregistrement Salesforce correct à l’aide de l’UUID. Cette intégration permet de remplir le champ personnalisé pour l’intégration ci-dessus.
      • Connexion : Salesforce
      • GET

        Chemin supplémentaire : /services/data/v62.0/query/ ?q=SELECT ID, CreatedDate LGK__TransactionUUID__c DE LGK__Transaction__c OÙ LGK__TransactionUUID__c = '{{http://txn.id/}}'TRIER PAR CreatedDate DESC

      Transformation de réponse :

      {
        "fields": [
          {
            "variableName": "txn.custom.sfRecordID",
            "value": {{#each records}}{{#if @first}}"{{this.Id}}"{{/if}}{{/each}}
          },
          {
            "variableName": "txn.custom.opportunityName",
            "value": {{#each records}}{{#if @first}}"{{this.LGK__OpportunityId__r.Name}}"{{/if}}{{/each}}
          },
          {
            "variableName": "txn.custom.accountName",
            "value": {{#each records}}{{#if @first}}"{{this.LGK__AccountId__r.Name}}"{{/if}}{{/each}}
          }
        ]
      }

      REQUÊTE MISE À JOUR UTILISEZ CECI :

      /services/data/v62.0/query/?q=SELECT Id, CreatedDate,LGK__OpportunityId__c,LGK__OpportunityId__r.Name, LGK__AccountId__r.Name, LGK__AccountId__c,LGK__TransactionUUID__c FROM LGK__Transaction__c WHERE LGK__TransactionUUID__c ='{{txn.id}}'ORDER BY CreatedDate DESC

      contextActorId Se réfère à l’ID d’enregistrement administrateur système dans Salesforce. Vous pouvez l’obtenir en accédant à Configuration, en cliquant sur Utilisateurs, puis en copiant l’ID à partir de l’URL de la page utilisateur.

      Intégrations

    2. Soumettre pour approbation.
      • Connexion : Salesforce
      • POST

        Chemin d’accès supplémentaire : /services/data/v62.0/process/approvals

        Processus d’approbation

    Demander une transformation :

    {
      "requests" : [{
      "actionType": "Submit",
      "contextId": "{{txn.custom.sfRecordID}}",
      "nextApproverIds": [],
      "comments":"The line item has a discount percentage of {{txn.custom.overallDealDiscount}}%",
      "contextActorId": "005bm000003SKtJ", -- SF Record ID of user highlighted above
      "processDefinitionNameOrId" : "TM_SF_Approval", --should be the unique name fro process definition detail highlighted above
      "skipEntryCriteria": "true"}]
    }

    Assurez-vous que le modèle de transformation a ces valeurs correctement :

    Code de

    Configuration de Transaction Manager : création d’événements

    L’intégration des approbations Slack est implémentée par le biais d’appels d’API d’événements sans en-tête. Dans cette approche, nous utiliserons ces appels d’API sans en-tête dans un flux déclenché par l’enregistrement et effectuerons la légende via des actions Apex.

    Créer des événements

    Notez que les deux intégrations créées à l’étape précédente sont conçues pour fonctionner dans l’ordre. La première intégration reçoit l’ID d’enregistrement Salesforce et la seconde l’envoie pour approbation. Le processus de réception de l’ID Salesforce peut également se produire sur l’action Ouvrir la transaction en ajoutant la configuration nécessaire à cette étape.

    Créez deux événements supplémentaires qui déplaceront l’étape soit vers l’avant pour approbation, soit vers l’arrière pour la révision. Notez leurs noms de variables respectifs à utiliser dans la configuration de la légende d’API.

    Étapes de transition

    Refuser

    Configuration de Transaction Manager : ajout du bouton Soumettre pour approbation à la mise en page

    Les événements de bouton peuvent être ajoutés à la mise en page default_draft à l’aide du format JSON suivant :

    {
      "type": "button",
      "event": "submitForApproval",
      "label": "Revise",
      "columnOrder": 2,
      "variableName": "revise"
    },

    Assurez-vous d’ajouter le champ personnalisé aux champs de brouillon : section [] ; il n’est pas nécessaire de l’inclure dans la mise en page.

    {
      "type": "ReadOnlyText",
      "label": "SF Record ID",
      "variableName": "txn.custom.sfRecordID"
    },

    Flux déclenché par l’enregistrement

    Pour configurer l’environnement de code VS, installez les extensions de code VS à partir de ce document : Configuration des membres de l’équipe d’ingénierie commerciale

    1. Après le processus d’approbation Trailheads, créez un enregistrement de liste déroulante sur l’objet LGK__Transaction__C qui présente l’état d’approbation actuel de la transaction et assurez-vous que le processus met à jour l’enregistrement en fonction de l’approbation, du rejet et de l’approbation en attente.

      L’image suivante montre un champ personnalisé qui déclenche le champ déclenché par l’enregistrement : Approval_Status__C le champ que vous avez créé lors de la création du processus d’approbation.

      Processus d’approbation

      L’image suivante montre à quoi ressemblera le flux une fois terminé.

      Workflow

    2. Dans le bloc Démarrer, cliquez sur Modifier.

      Déclenchez sur l’objet LGK__Transaction__C en fonction du champ personnalisé, en veillant à ce qu’un UUID ne soit pas nul. Assurez-vous également de cliquer sur Exécuter de manière asynchrone et Uniquement lorsqu’un enregistrement est mis à jour pour se réunir.

      Configurer le déclencheur

    3. Ajoutez un bloc de décision et créez des résultats lorsque le champ personnalisé que vous avez créé est approuvé ou rejeté.

      Bloc de décision

    Apex Code

    Bien que cette classe Apex ait été déployée via le code VS, elle pouvait également être déployée dans Salesforce. La première étape consiste à créer un nouveau projet avec manifeste.

    Manu

    Ensuite, créez une classe Apex (dans la zone bleue) ainsi qu’un fichier manifest.xml (dans la zone verte) pour aller dans les fichiers respectifs dans le répertoire du projet.

    Gestionnaire des transactions

    Code Apex :

    global with sharing class TransactionManagerFlow {
        global class FlowInput {
            @InvocableVariable(label='Triggering Record' required=true)
            global LGK__Transaction__c triggeringRecord;
        }
        // Handle logic for Rejected status
        @InvocableMethod(label='Logik.io Transaction callout from Salesforce' description='Makes callout to transition Logik.io transaction stage.')
        global static void handleApprovalStatus(FlowInput[] requestInputs) {
            System.debug('Handling Rejected status for Record: ' + requestInputs[0].triggeringRecord.Id);
            LGK__ConfigurationTenant__c customSettings = LGK__ConfigurationTenant__c.getInstance();
            String updatedRuntimeToken = '_gdyi0w0oGu1bNk3PO5exhUGqDFcZQVLIw';
            System.debug(updatedRuntimeToken);
            String endpoint = 'https://se-txn-sandbox.test02.logik.io';
            for (FlowInput eachTxn : requestInputs) {
                // Make the API request to transfer a transaction from 'new' stage to 'rejected' stage
                // (compare with snippet from ApprovalProcessHandler.makeApiCall)
                String uuid = eachTxn.triggeringRecord.LGK__TransactionUUID__c;
                Http http = new Http();
                HttpRequest request = new HttpRequest();
                request.setHeader('Origin', endpoint);
                if (eachTxn.triggeringRecord.Approval_Status__c == 'Rejected') {    
                    request.setEndpoint(endpoint + '/api/t/' + String.valueOf(uuid) + '/events/revise'); // Example endpoint
                    System.debug('Endpoint set for rejection' + request.getEndpoint());
                } else if (eachTxn.triggeringRecord.Approval_Status__c == 'Approved') {
                    request.setEndpoint(endpoint + '/api/t/' + String.valueOf(uuid) + '/events/proceedToApproved'); // Example endpoint
                    System.debug('Endpoint set for approval' + request.getEndpoint());
                }
                request.setMethod('POST');
                request.setHeader('Authorization', 'Bearer ' + updatedRuntimeToken);
                request.setHeader('Content-Type', 'application/json');
                request.setBody('{}');  // Convert to JSON if inputs are needed
                System.debug(request);
                if (!Test.isRunningTest()) {
                    HttpResponse response = http.send(request);
                    if (response.getStatusCode() != 200) {
                        System.debug(LoggingLevel.ERROR, 'Error transitioning transaction: ' + response.getStatusCode());
                        System.debug(LoggingLevel.ERROR, response.getBody());
                    } else {
                        System.debug('Rejected API Call Failed: ' + response.getStatusCode() + ' - ' + response.getBody());
                    }
                } else {
                    eachTxn.triggeringRecord.LGK__TransactionUUID__c = 'testUUID';
                }
            }
        }
    }
    

    XML :

    <?xml version="1.0" encoding="UTF-8"?>
    <Package xmlns="http://soap.sforce.com/2006/04/metadata">
        <types>
            <members>TransactionManagerFlow</members>
            <name>ApexClass</name>
        </types>
        <version>61.0</version>
    </Package>

    Ensuite, si vous n’êtes pas connecté à l’organisation vers laquelle vous souhaitez effectuer le déploiement, faites-le à l’aide de la commande Web sf org login , qui vous permet d’accéder à login.salesforce.com.

    Lorsque vous avez autorisé l’interface de ligne de commande, le résultat doit ressembler à ce qui suit :

    Script

    Remarque :
    Si vous êtes connecté à plusieurs organisations via l’interface de ligne de commande, utilisez cette commande pour changer :

    Ensemble de configuration SF target-org=<nom d’utilisateur>

    Lorsque vous êtes connecté, exécutez cette commande :

    Début du déploiement du projet SF --manifeste manifeste/package.xml

    Déploiements

    Ajoutez les actions Apex après les blocs de décision et assurez-vous que votre flux ressemble à celui fourni dans la capture d’écran. (Recherchez un nom qui correspond au paramètre d’étiquette dans la méthode invocable.)

    Enfin, activez le flux et testez.

    Test

    Une fois le flux déclenché par l’enregistrement et le plan du gestionnaire de transactions créés, cette requête SOQL peut vous être utile pour déboguer votre processus d’approbation dans Salesforce.

    Réception de l’état d’approbation Salesforce (obtention de l’état du processus le plus récent)

    • Connexion : Salesforce
    • GET
      • Chemin d’accès supplémentaire : {_endpoint}/services/data/v61.0/query/ ? q=SELECT+ID,Status,TargetObjectId+FROM+ProcessInstance+WHERE+TargetObjectId={{sfRecordId}}+ORDER+BY+CreatedDate+DESC
      • Requête SOQL
    SELECT Id, Status, TargetObjectId 
    FROM ProcessInstance 
    WHERE TargetObjectId-'006bm000002IUI4AAO' -- This is the sf oppy/transaction object  id
    ORDER BY CreatedDate DESC