Suivez votre progression
Accueil Trailhead
Accueil Trailhead

Des possibilités élargies avec les déclencheurs Apex

Objectifs de formation

Une fois cette unité terminée, vous pourrez :
  • nommer un cas d'utilisation des déclencheurs avec les applications d'éditeur enrichi ;
  • construire une application d'éditeur enrichi intelligente à l'aide des déclencheurs ;
  • décrire l'API des applications d'éditeur enrichi.

Utilisez vos compétences en matière de déclencheurs Apex

Vous pouvez configurer non seulement des applications d'éditeur enrichi de type « cliquer pour ajouter », mais également des applications qui prédisent intelligemment les informations dont un membre a besoin. Par exemple, votre application peut répondre à une publication de membre avec des données utiles ou une sélection d'applications d'éditeur enrichi. Les membres n'ont pas à cliquer sur une icône d'application. Au lieu de cela, Salesforce inclut automatiquement une application d'éditeur enrichi appropriée dans la publication du membre.

Vous pouvez y parvenir grâce à la puissance des déclencheurs Apex pour les objets Chatter. Avec les déclencheurs Apex, vous avez la possibilité de configurer des actions personnalisées avant ou après les modifications apportées aux enregistrements Salesforce, telles que des insertions, des mises à jour ou des suppressions. Vous pouvez ajouter un déclencheur after insert FeedItem pour écouter le contenu de la publication d'un membre et intégrer intelligemment une application d'éditeur enrichi. Par exemple, vous pouvez aussi ajouter des déclencheurs qui mettent à jour votre application en réponse à des modifications apportées à d'autres objets, comme des commentaires ou des réponses.

Observons un déclencheur after insert en action.

Le Dreamforce de vos rêves

Imaginez que vous êtes à Dreamforce et que vous y recherchez des sessions sympa. Vous décidez de vous tourner vers votre communauté et y saisissez la question suivante : Je recherche des sessions DF. Vous ajoutez comme précision Je recherche des sessions DF sympa, avec le hashtag #RechercheDeSessions.

Question avec une précision et une rubrique dans l'éditeur Chatter

Vous cliquez sur Demander et l’éditeur inclut automatiquement une application d’éditeur enrichi (une carte du campus Dreamforce) dans votre publication.

Google Map attaché à un message via un déclencheur après insertion (after insert)

Qu'avons-nous fait ici ? Pour obtenir ce résultat, il y a deux éléments à créer.

  • Une application d'éditeur enrichi pour attacher une carte à un élément de fil selon un certain contexte
  • Un déclencheur pour insérer automatiquement l'application

Dream Maps

Commencez par créer une application d’éditeur enrichi semblable à l’application de requête de support de l’unité 2, mais en utilisant cette fois l’API de Google Maps.

Plutôt que de cliquer sur une icône, l'utilisateur déclenche notre application cartographique en saisissant un sujet spécifique dans le fil. Mais puisque la plate-forme d'applications d'éditeur enrichi exige une icône, que faites-vous donc ? Vous pouvez dans ce cas ajouter une image vide pour l'icône et un composant de composition vide.

Vous pouvez également créer une application régulière de type « cliquer pour ajouter » et ajouter le déclencheur after insert à titre d'expérience complémentaire.

Voici une façon d'écrire un déclencheur de base pour FeedItem.

trigger dreamforceMapInsertion on FeedItem (after insert) {
  // This is where we look for content in the post or topics. Based on our result, we can insert
  // a Rich Publisher App. Alternatively, we can continue adding a Rich Publisher App for each
  // post without the filtering. 
    
  // Get FeedItem Id & the body.
  String id = null;
  String body = “”;
  for(FeedItem f : Trigger.new) {
       id = f.id;
       body = f.body;
      }
  }
    
  if (id == null && !f.body.contains('#lookingForSessions’)) {
      return;
  }
  String communityId = Network.getNetworkId();
  String feedElementId = id;
  ConnectApi.FeedEntityIsEditable isEditable = 
    ConnectApi.ChatterFeeds.isFeedElementEditableByMe(communityId, feedElementId);
  
  // Make sure the post is user-editable before inserting the Rich Publisher App.
  if (isEditable.isEditableByMe == true) {


        // This is the setup for Rich Publisher App insertion. 
        ConnectApi.FeedItemInput feedItemInput = new ConnectApi.FeedItemInput();
        ConnectApi.FeedElementCapabilitiesInput feedElementCapabilitiesInput = 
          new ConnectApi.FeedElementCapabilitiesInput();
        feedItemInput.capabilities = feedElementCapabilitiesInput;
        feedItemInput.capabilities.extensions = new ConnectApi.ExtensionsCapabilityInput();
        feedItemInput.capabilities.extensions.itemsToAdd = new List<ConnectApi.ExtensionInput>();
        ConnectApi.ExtensionInput ext = new ConnectApi.ExtensionInput();
        
        // This is the id for your Rich Publisher App.     
        ext.extensionId = '<Insert your extensionId>'; // This would be something you get from 
          //Workbench which is the id for extension entity for example ‘0MYB00000001234567’
        
        // This is the payload associated with this instance of the app.
        ext.payload = '<Insert your payload>'; // This would be your JSON blob for example: 
          //‘{\”feedItemId\":\"'+id+’\”}’
        
        // This can change if you want to use multiple payload versions with different versions of
        // your app. Or you can just use 1 version. This is Optional.                	
        ext.payloadVersion = '<Insert your payloadVersion>'; // This can be anything like ‘1.0’


        // The following fields add metadata to your Rich Publisher App.
        // This is similar to our actions in Unit 2 when we added metadata to the lightning event.
	 alt.textRepresentation = '<Insert your text representation here>'; 
	 ConnectApi.AlternativeInput alt = new ConnectApi.AlternativeInput();
        ext.alternativeRepresentation = alt;
        
        // Add a Rich Publisher App to FeedItem capabilities.
        // Here you can add multiple Rich Publisher App instances in the itemsToAdd Array.
        feedItemInput.capabilities.extensions.itemsToAdd.add(ext);
    
        // Finally, edit the FeedItem to insert the Rich Publisher App.
        ConnectApi.FeedElement editedFeedElement = 
          ConnectApi.ChatterFeeds.updateFeedElement(communityId, feedElementId, feedItemInput);
  } 
}

Dans notre exemple de code, nous avons traité sous de nombreux aspects la manière d'écrire un déclencheur after insert FeedItem et la façon de travailler avec l'API des applications d'éditeur enrichi.

Pour ajouter une instance d'application d'éditeur enrichi à votre élément de fil, la plate-forme modifie le FeedItem juste après sa création dans le déclencheur after insert. Ensuite, elle insère l'instance d'application d'éditeur enrichi dans la représentation FeedItem au sein du déclencheur. Vous pouvez effectuer un filtrage avant de procéder à la modification pour déterminer si vous souhaitez effectuer l'insertion.

Dans notre exemple, le déclencheur recherche la rubrique #RechercheDeSessions dans le corps du fil. Il transmet ensuite la charge de travail pour fournir un contexte à l'application d'éditeur enrichi. Grâce au contexte, l'application d'éditeur enrichi peut afficher la carte du campus Dreamforce. Vous avez plusieurs possibilités pour obtenir le contexte à partir du corps de la publication ou de ses pièces jointes. Lorsque vous avez un contexte, vous pouvez le transmettre en tant que charge de travail à l'application d'éditeur enrichi afin qu'elle puisse restituer un élément en réponse. Vous pouvez également effectuer des demandes auprès de services tiers. Par exemple, vous pouvez demander d'accéder aux ressources d'apprentissage machine ou à d'autres API intelligentes. Ces agents peuvent fournir une réponse intelligente dans vos applications d'éditeur enrichi.

Extension Chatter

Dans nos API publiques, l’API des applications d’éditeur enrichi est appelée ChatterExtension. Vous pouvez uniquement créer des extensions Chatter à l’aide de l’API SOAP via Workbench. Toutefois, vous pouvez l’extraire à l’aide de l’API Chatter Extensions Connect (ou ConnectAPI dans Apex). Lorsque vous créez une application d'éditeur enrichi, vous créez en réalité un objet ChatterExtension, comme nous l'avons vu à l'étape 3 de l'unité 2. Salesforce insère les applications d'éditeur enrichi en tant que pièces jointes aux éléments de fil, comme dans le cas d'un fichier. C'est pour cette raison qu'il faut utiliser la Saisie de capacité des extensions (ou ConnectAPI dans Apex) pour insérer une instance d'éditeur enrichi avec un élément de fil.

Revenons à notre exemple. Quelqu'un voit votre question et répond ainsi : Comment créer des applications d'éditeur enrichi à Moscone North.

La Google Map mise à jour

La carte est instantanément mise à jour et l'emplacement Moscone North, épinglé.

Une autre réponse recommande une session à l'hôtel Intercontinental. La carte est à nouveau mise à jour, avec cette fois une épingle sur l'emplacement de l'hôtel.

La Google Map mise à jour

Ici, en conjonction avec le déclencheur FeedItem, il y a un déclencheur FeedComment qui écoute les commentaires. Une fois qu'un membre insère un commentaire, votre application fait concorder le corps de contenu du commentaire avec la liste des sessions Dreamforce. Ensuite, le déclencheur modifie le FeedItem pour mettre à jour la charge de travail en plaçant une épingle sur l'endroit mentionné. Vous pouvez également demander à votre application d'éditeur enrichi d'écouter un service tiers externe pour connaître la liste des emplacements à épingler. Dans ce cas, votre déclencheur FeedComment peut mettre à jour ce service tiers au lieu de modifier le FeedItem. Vous obtenez ainsi une expérience dynamique, les épingles se mettant à jour sur la carte.