Faire communiquer son application avec Salesforce : worflow et messages sortants

salesforce

Salesforce est devenu un CRM incontournable dans le monde de l’entreprise. Son intégration dans les applications que nous développons aujourd’hui est naturellement de plus en plus fréquente. En fonction des besoins d’un projet, la communication avec Salesforce peut se faire de différentes manières, et c’est l’une d’entre elles que je vais vous présenter dans cet article : workflow et messages sortants.

Pour illustrer mes propos, je vais prendre l’exemple auquel nous avons été confrontés sur un de nos projets. Salesforce et l’application web que nous développons gèrent tous les deux des "opportunités". Les opportunités sont créées sur Salesforce par l’utilisateur et le changement de valeur d’un champ déterminé provoque la création de l’opportunité dans notre application.

Mise en œuvre :

Règle de workflow

Dans Salesfores, cliquez sur Configuration puis Créer -> Workflow et approbations -> Règles de workflow. Créez une nouvelle règle et choisissez l’objet concerné par la règle, "Opportunité" dans notre exemple.

workflow1

Cliquez sur "Suivant", donnez un nom à la règle, choisissez le critère d’évaluation "créé et lorsqu’il est modifié", et dans Critères de la règle, choisissez "Exécuter cette règle si l’évaluation de la formule est positive".

Ensuite, composez une formule qui, lorsqu’elle sera vraie, déclenchera le workflow. On peut insérer un champ de notre objet, et un ensemble d’opérateurs et de fonctions.

workflow2

Dans notre exemple, le workflow se déclenche lorsque le champ "StageName" est changé et que la valeur attribuée est différente de "EN ATTENTE". Cliquez sur "Enregistrer et suivant".

Sur l’écran suivant, cliquez sur "Ajouter une action de workflow" et choisissez "nouveau message sortant".

Message sortant

Le message sortant correspond aux informations que l’on veut envoyer à notre application lors du déclenchement de la règle de workflow.

Donnez-lui un nom ("SendOpportunityFields" dans l’exemple). Le champ "URL de point de terminaison" n’est pas important pour le moment car nous n’avons pas encore créé le service web qui va intercepter le message sortant, mettez n’importe quelle url.

Finalement, sélectionnez les champs de l’objet Salesforce que vous souhaitez envoyer vers l’application. Dans notre exemple, pour la création de l’opportunité de notre application, nous descendons son Id, son nom, et les valeurs de certains champs métiers, qui seront attribués à l’objet créé pour qu’il corresponde à l’opportunité de Salesforce. Après enregistrement, le message sortant devrait ressembler à ceci :

message1

Cliquez sur le lien "Cliquez ici pour accéder à l’option WSDL", un nouvel onglet avec le WSDL devrait s’ouvrir. Enregistrez en local (avec l’extension ".wsdl"), il servira à créer le service web sur Visual Studio. Dans l’exemple, je l’ai nommé "opportunityWorkflowOutboundMessage.wsdl").

3.       Service WCF

La version utilisée pour l’exemple est Visual Studio Community 2015.

Maintenant que Salesforce est configuré (sauf l’url du point de terminaison) pour envoyer les informations de notre objet au déclenchement d’un événement, il ne manque plus qu’à créer le service web qui va intercepter ces informations.

Dans votre solution Visual Studio (ou dans une nouvelle solution), créez un nouveau projet de type "ASP.Net Web Application" vide (choisissez le template de projet "Empty"). Une fois le projet créé, sélectionnez le, faites un clic droit pour ajouter un nouvel élément. Dans Web, choisissez "WCF Service".

wcf1

Dans l’exemple, je l’ai nommé "OpportunityNotificationService".

Visual Studio va ajouter 3 fichiers au projet : IOpportunityNotificationService.cs, OpportunityNotificationService.svc et OpportunityNotificationService.svc.cs.

Nous allons désormais faire correspondre la définition de l’interface avec le message sortant de Salesforce. Pour cela, ajoutez le fichier WSDL, précédemment enregistré, dans votre projet et ouvrez l’invite de commande Visual Studio, que vous trouverez sous le nom "Developer Command Prompt for VS20XX" via la recherche Windows. Via l’invite de commande, placez-vous dans le répertoire où se trouve le WSDL et lancez la commande suivante :

svcutil /noconfig /out:IOpportunityNotificationService.cs opportunityWorkflowOutboundMessage.wsdl

La commande a normalement remplacé le contenu de IOpportunityNotificationService.cs afin qu’il reflète le WSDL. Cela devrait ressemble à ceci :

wcf2

Il est néanmoins nécessaire de faire quelques ajustements sur l’interface afin que notre web service fonctionne :

  • Mettez l’ensemble du contenu du fichier (interface + classes) dans un "namespace" correspondant à votre projet/solution.
  • Remplacez le nom de l’interface NotificationPort par IOpportunityNotificationService.
  • Au-dessus de la déclaration de l’interface, remplacez le contenu du paramètre ConfigurationName de l’attribut ServiceContractAttribute par OpportunityNotificationService (initialement NotificationPort).
  • Supprimez le paramètre ReplyAction="*" de l’attribut OperationContractAttribute de la méthode notifications.
  • Dans la déclaration de l’interface, supprimez les deux lignes surlignées ci-dessous:

wcf3

Et enfin, à la fin du fichier, supprimez l’interface NotificationPortChannel et la classe NotificationPortClient (et les annotations qui les accompagne). La fin de votre fichier devrait ressembler à ceci :

wcf4

Ouvrez désormais le fichier OpportunityNotificationService.svc.cs, supprimez la méthode DoWork et implémentez l’interface IOpportunityNotificationService pour faire apparaître la méthode notifications.

C’est cette méthode que vous devrez implémenter pour traiter la requête envoyée par Salesforce, pour par exemple, créer une opportunité dans votre application qui reflète l’opportunité de Salesforce  grâce aux champs qui composent le message sortant et que l’on retrouve dans l’interface IOpportunityNotificationService.cs.

C’est en décomposant le paramètre request de type notificationRequest (la structure et l’arborescence de l’objet sont explicitées dans l’interface)  que vous retrouverez les champs de l’opportunité envoyée par Salesforce.

Il reste une dernière modification à faire pour pouvoir faire marcher le web service : remplacez le contenu du fichier web.config afin qu’il ressemble à ceci (n’oubliez pas de préciser la "connection string" :

wcf5

Exemple d’implémentation de la méthode notifications :

wcf6

Vous pouvez désormais compiler le projet et le publier sur un serveur IIS. Pour pouvoir l’utiliser, vous devrez attribuer une URL à votre service web et le rendre accessible depuis internet. Retournez dans Salesforce, et modifiez votre message sortant pour lui attribuer une "URL de point de terminaison", qui sera l’url de votre service web :

wcf7

Petit conseil

Si vous souhaitez créer d’autres règles de workflow sur le même objet Salesforce ("opportunité" dans l’exemple), utilisez le même message sortant et ajoutez les champs (s’il y en a) que vous souhaitez descendre dans votre application pour ces nouvelles règles et traitez les différents cas via le code de votre service web. Cela vous évitera de créer un nouveau message sortant, ainsi qu’un nouveau service web de type WCF.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.