Skip to main content

Utilisation d’appels externes Apex et de messages sortants avec Heroku

Objectifs de formation

Une fois cette unité terminée, vous pourrez :

  • Envoyer des appels externes Apex et des messages sortants à Heroku
  • Évoquer des cas d’utilisation des appels Apex et des messages sortants

Appels externes vers des applications Heroku

Parfois, les événements Salesforce doivent être gérés par un système externe en raison de leur taille ou du type de processus exécuté. Par exemple, un utilisateur de Salesforce charge une image qui doit être redimensionnée pour une utilisation ultérieure. Heroku peut recevoir un événement de Salesforce et exécuter en réponse un processus. Le processus de sortie peut éventuellement être stocké dans Salesforce à l'aide des API REST ou de Heroku Connect.

Diagramme représentant un cadre avec Salesforce et un événement de données déclenché ou envoyé par un message sortant. Une flèche sort du cadre et pointe vers un autre cadre contenant toutes les applications hébergées par Heroku

Il existe plusieurs méthodes pour appeler une application Heroku reposant sur un événement dans Salesforce : Appels HTTP Apex, messages sortants ou actions HTTP dans Flow (Flux). Un appel externe HTTP Apex effectue un appel REST par programmation à une application Heroku. Un message sortant est une action qui effectue un appel SOAP par déclaration. Avec les deux méthodes, l'application Heroku reçoit une requête avec la charge de travail des détails d'événement, puis exécute l'action.

Consultez les publications Swagger / OpenAPI + Salesforce = LIKE et Intégrations d’API simplifiées à des services externes sur le blog pour obtenir plus d’informations sur les actions HTTP dans Flow (Flux) et les services externes.

Appels externes avec des déclencheurs Apex

Vous pouvez définir des déclencheurs Apex sur des objets Salesforce pour gérer n'importe quel événement suivant :

  • insérer
  • mettre à jour
  • supprimer
  • fusionner
  • mettre à jour/insérer
  • restaurer

Le déclencheur peut utiliser un appel externe Apex pour effectuer un appel JSON REST à un point de terminaison dans l'application Heroku. Par exemple, voici un déclencheur Apex qui appelle une application Heroku :

 trigger NewContactWebhookTrigger on Contact (after insert) {

  String url = 'https://foo.herokuapp.com/new_contact';

  String content = Webhook.jsonContent(Trigger.new, Trigger.old);

  Webhook.callout(url, content);

} 

La classe Apex Webhook référencée est :

 public class Webhook {

  public static String jsonContent(List<Object> triggerNew, List<Object> triggerOld) {

    String newObjects = '[]';

    if (triggerNew != null) {

      newObjects = JSON.serialize(triggerNew);

    }

    String oldObjects = '[]';

    if (triggerOld != null) {

      oldObjects = JSON.serialize(triggerOld);

    }

    String userId = JSON.serialize(UserInfo.getUserId());

    String content = '{"new": ' + newObjects + ', "old": ' + oldObjects + ', "userId": ' + userId + '}';

    return content;

  }

  @future(callout=true) public static void callout(String url, String content) {

    Http h = new Http();

    HttpRequest req = new HttpRequest();

    req.setEndpoint(url);

    req.setMethod('POST');

    req.setHeader('Content-Type', 'application/json');

    req.setBody(content);

    h.send(req);

  }

} 

La méthode jsonContent utilise les données du déclencheur pour les sérialiser en JSON. La méthode d'appel externe effectue la publication HTTP dans Heroku avec la charge de travail JSON.

Comme pour les messages sortants, vous pouvez construire l'application Heroku avec n'importe quelle technologie Web de source ouverte ou REST. Avec JavaScript, Node.js et Express, le point de terminaison peut être défini comme suit :

 app.post("/new_contact", function(req, res) {

  // do something with req.body

  res.status(201).end();

});

Dans le gestionnaire de requêtes, req.body correspond aux données JSON désérialisées envoyées depuis le déclencheur Apex.

Avec des déclencheurs Apex, vous pouvez utiliser une certaine forme de clé pré-partagée pour authentifier les requêtes afin d'éviter le risque de requêtes malveillantes. Vous pouvez également inclure un ID de session dans la charge de travail pour permettre à l'application Heroku d'effectuer des requêtes API REST vers Salesforce afin d'extraire ou de mettre à jour les données.

Remarque

Pour en savoir plus sur les appels Apex, consultez la documentation Salesforce Invocation d’appels en utilisant Apex. Consultez la documentation Heroku Création d’appels Apex et de flux de travail vers votre API pour en savoir plus sur l’intégration d’Apex à un service externe.

Appels externes avec messages sortants

Avec les actions Message sortant, vous définissez un appel par déclaration vers un système externe ainsi qu’un flux déclenché par enregistrement pour envoyer l’appel externe.

Pour appeler une application Heroku lors de l’exécution du flux, créez d’abord une action Message sortant. Indiquez un point de terminaison d’application Heroku comme URL de point de terminaison.

Capture d’écran de la boîte de dialogue de configuration de la messagerie sortante, montrant le message intitulé Nouveau contact avec Heroku

Si vous sélectionnez Envoyer un ID de session, l’application Heroku peut utiliser ce jeton pour effectuer des appels d’API REST au nom de l’utilisateur. Si vous n’envoyez pas l’ID de session, il n’est pas possible de vérifier la validité de la requête ou d’appliquer de protection contre les appels malveillants au point de terminaison d’API de votre application Heroku.

Côté Heroku, vous pouvez implémenter le gestionnaire d'événements avec n'importe quelle technologie Web de source ouverte ou REST. Puisque le message se présente sous le format SOAP, vous devez analyser le XML. Par exemple, avec JavaScript, Node.js, Express et la bibliothèque express-xml-bodyparser, voici un point de terminaison qui gère un message sortant et analyse le message SOAP.


app.post("/new_contact", function(req, res) { var notification = req.body["soapenv:envelope"]["soapenv:body"][0]["notifications"][0]; var sessionId = notification["sessionid"][0]; var data = {}; if (notification["notification"] !== undefined) { var sobject = notification["notification"][0]["sobject"][0]; Object.keys(sobject).forEach(function(key) { if (key.indexOf("sf:") == 0) { var newKey = key.substr(3); data[newKey] = sobject[key][0]; } }); // do something #awesome with the data and sessionId } res.status(201).end(); });

Dans cet exemple, chaque fois qu'un contact est créé, l'application Heroku reçoit les détails du contact et peut traiter librement les données.

Après avoir créé l’action Message sortant, créez le flux qui l’appelle. Le flux peut être déclenché par n’importe quel objet Salesforce, tel qu’un contact ou un compte, lorsque l’un des événements suivants se produit :

  • Un enregistrement est créé
  • Un enregistrement est modifié
  • Un enregistrement est créé ou mis à jour
  • Un enregistrement est supprimé

Si vous déclenchez le flux lorsqu’un enregistrement est mis à jour, vous pouvez spécifier si le flux doit se déclencher chaque fois que l’enregistrement est mis à jour et répond aux exigences de conditions, ou uniquement lorsque l’enregistrement est mis à jour pour répondre aux exigences de conditions.

Remarque

Dans les flux déclenchés par des enregistrements, vous pouvez définir des conditions d’entrée qui limitent les enregistrements déclenchant le flux. Utilisez cette fonctionnalité afin de spécifier les critères permettant de définir les enregistrements qui envoient l’appel.

Après avoir configuré l’élément de début du flux, créez un élément Action. Dans le champ Action, entrez l’action Message sortant que vous avez créée. Attribuez ensuite une étiquette à l’élément, cliquez sur Terminé et enregistrez votre flux. Lorsque le flux exécute cet élément, il envoie l’appel externe défini dans l’action Message sortant.

Remarque

Les flux peuvent également attendre une réponse de Heroku. Pour plus d’informations, reportez-vous à Élément de flux : Interruption dans l’aide Salesforce.

Ressources

Partagez vos commentaires sur Trailhead dans l'aide Salesforce.

Nous aimerions connaître votre expérience avec Trailhead. Vous pouvez désormais accéder au nouveau formulaire de commentaires à tout moment depuis le site d'aide Salesforce.

En savoir plus Continuer à partager vos commentaires