REST pour le commercial itinérant: Utiliser les données Google sur Salesforce.com

Lane LiaBraaten, Programmes des développeurs Google
Novembre 2007

Introduction

Salesforce.com et Google hébergent des applications "Software as a Service" populaires, et les deux organisations fournissent des API qui permettent aux développeurs d'accéder aux grands magasins de données qui alimentent ces applications. Les choses commencent à devenir intéressantes lorsque nous combinons les deux ensembles d'API. G Suite continue d'être de plus en plus utilisé en entreprise, et Salesforce.com a conçu une vaste plate-forme pour créer des applications professionnelles personnalisées. Les développeurs (c'est-à-dire vous !) ont donc de nombreuses possibilités d'associer la puissance de Google et de Salesforce.com.

Cet article vous explique comment utiliser les API Google Data RESTful pour commencer à créer des applications composites d'entreprise, même si vous débutez avec la plate-forme Salesforce.com ou le protocole Google Data. Je vais vous aider à configurer votre environnement de développement, à installer une application composite Salesforce.com et Google, puis à créer le vôtre.

Bonjour, Salesforce.com !

Si vous êtes un nouvel utilisateur de Salesforce.com, vous devez commencer par créer un compte de développeur sur ADN, le réseau de développeurs Apex. Ce compte vous permet d'accéder à toutes les fonctionnalités du compte Salesforce.com et d'accéder au wiki Apex et aux forums de discussion.

Vous allez maintenant télécharger le kit Apex pour Eclipse. Le kit d'outils nécessite Java 1.5 et Eclipse 3.2.2 ou une version ultérieure. Si vous connaissez Eclipse, le site de mise à jour logicielle du kit est http://www.adnsandbox.com/eclipsetoolkit/10.0/. Si vous ne maîtrisez pas les plug-ins Eclipse ou si un problème survient lors de l'installation, consultez le wiki d'Apex.

Une fois le kit d'outils installé, vous pouvez accéder au contenu d'aide Apex intégré au système d'aide d'Eclipse. Dans Eclipse, accédez à Help | Help Contents | Apex Toolkit for Eclipse pour afficher ce contenu. L'une des ressources d'aide est un tutoriel de démarrage rapide qui vous explique comment créer un projet et ajouter des commandes S, des classes et des déclencheurs. Si vous n'avez jamais utilisé le code Apex, suivez ce tutoriel et créez un projet Apex avant de continuer.

Exportation d'événements vers Google Agenda

Ron Hess a écrit une application permettant de combiner des agendas Google avec Google Agenda pour vous permettre d'exporter des événements depuis Salesforce.com. Ron a également rédigé un article qui explique comment fonctionne son application composite. L'application Google Sheets que je vais vous montrer comment créer plus tard est basée sur l'application composite Google Agenda de Ron. Merci Ron !

Si vous utilisez Salesforce.com, vous pouvez probablement intégrer et utiliser l'application Google Agenda de Ron sans aucune instruction. Au début, j'avais besoin d'un peu d'aide. Voici ce que j'ai fait pour voir l'application de Ron en action.

  1. Installez l'application :
    • Accédez à la page Application Google Agenda composite et cliquez sur Télécharger maintenant.
    • Saisissez vos identifiants ADN, puis cliquez sur Continuer.
    • Lisez les conditions d'utilisation, puis cliquez sur Continuer.
    • Cliquez sur Suivant sur la page "Examiner le contenu du package".
    • Choisissez un niveau de sécurité, puis cliquez sur Suivant.
    • Cliquez sur Installer.
  2. Configurer le proxy AJAX Salesforce.com
    • Dans le menu "Configuration de l'administration", cliquez sur Contrôles de sécurité | Paramètres du site distant.
    • Cliquez sur New Remote Site (Nouveau site distant).
    • Dans le champ "Nom de site distant", saisissez Google. Dans le champ "URL du site distant", utilisez https://www.google.com.
    • Cliquez sur Enregistrer.
  3. Ajoutez le bouton "Ajouter à Google" à la page "Détails de l'événement" :
    • Dans le menu "Configuration de l'application", cliquez sur Personnaliser | Activités | Mises en page de pages d'événements.
    • Cliquez sur Modifier dans la ligne "Mise en page de l'événement".
    • Double-cliquez sur la zone "Boutons de la page d'informations".
    • Mettez en surbrillance "Ajouter à Google", puis cliquez sur la flèche vers la droite (>) pour ajouter le bouton.
    • Cliquez sur OK.
    • Sur la page "Propriétés de mise en page", cliquez sur Enregistrer.
  4. Exporter un événement
    • Cliquez sur Accueil en haut à gauche pour afficher votre agenda.
    • Si vous n'avez aucun événement, cliquez sur Nouvel événement pour en créer un.
    • Cliquez sur un événement pour afficher la page des détails de l'événement.
    • Cliquez sur le bouton Ajouter à Google.
    • Cliquez sur OK dans l'alerte JavaScript.
    • Connectez-vous à l'aide du nom d'utilisateur et du mot de passe de votre compte Google.
    • Cliquez sur Accorder l'accès pour permettre à l'application SalesForce d'accéder en écriture à votre agenda Google.
    • Affichez l'événement dans votre agenda.

Créer une application de feuille de calcul Google

Vous en avez probablement assez de cliquer sur les pages Salesforce.com et d'écrire du code. Déclenchez à nouveau Eclipse et vous verrez que le projet Apex que vous avez créé contient maintenant les commandes S-Controls pour l'application Google Agenda de Ron. En effet, le kit Apex pour Eclipse est constamment synchronisé avec Salesforce.com, et c'est plutôt intéressant !

Vous pouvez créer votre propre application de données Google en utilisant certaines fonctionnalités de l'application composite Google Agenda, telles que les commandes d'authentification. Dans la suite de cette section, je vais vous montrer comment créer une application qui exporte vos contacts Salesforce.com dans une feuille de calcul Google.

Publier un S-Control simple

Un S-Control est un fichier hébergé par Salesforce.com et exécuté dans les navigateurs Web lorsque les utilisateurs accèdent à votre application. Une commande S peut contenir tout type de contenu que vous pouvez afficher ou exécuter dans un navigateur Web, tel que du code HTML, CSS ou JavaScript.

Une application composite Salesforce.com et Google comporte de nombreux éléments mobiles. J'ai donc tout d'abord ajouté un bouton "Export to Google" (Exporter vers Google) sur la page de la liste de contacts, qui affiche un simple bouton S-Control afin de s'assurer que tous les travaux de plomberie sont corrects avant d'être attaqué par JavaScript.

Dans votre projet Apex, faites un clic droit sur le dossier "S-Controls" et sélectionnez Apex | New S-Control. Attribuez un libellé et un nom export_contacts au nouveau S-Control, conservez le type HTML personnalisé, puis cliquez sur Terminer.

Le nouveau S-Control contiendra un fichier HTML squelette. Vous allez ajouter beaucoup de code JavaScript dans la section <head>, mais vous pouvez d'abord remplir <body>, pour qu'il y ait quelque chose à afficher à l'utilisateur pendant l'exportation des contacts. Copiez ce code HTML dans le corps de votre commande S pour afficher les "points d'attente" et le logo Google Sheets:

<div id="waiting" align="center" />
  <img src="/img/icon/home32.png" height="64" width="64" />
  <img src="/img/waiting_dots.gif" alt="Please wait..." title="Please wait..." height="25" width="196" />
  <img src="http://docs.google.com/images/doclist/logo_docs.gif" />
  <p><h3>Exporting contacts to Google Spreadsheets, please wait...</h3></p>

</div>

Vous pouvez maintenant publier la commande S-Control et configurer un bouton pour l'appeler.

  1. Utilisez Eclipse pour publier le fichier S-Control :
    • Effectuez un clic droit sur votre projet Apex et sélectionnez Apex | Synchronize with Salesforce.
    • Localisez votre nouveau S-Control dans l'arborescence de répertoires, cliquez dessus avec le bouton droit de la souris, puis sélectionnez Remplacer la télécommande et publier sur le serveur.
    • Si vous ne trouvez pas votre S-Control, il est possible que le kit Apex l'ait déjà importé pour vous. Toutefois, il est conseillé d'utiliser le point de vue de la synchronisation pour vous assurer que le dernier code est exécuté sur le serveur.
  2. Utilisez l'interface utilisateur de Salesforce.com pour définir un bouton qui appelle ce S-Control :
    • Dans le menu "Configuration de l'application", cliquez sur Personnaliser | Contacts | Boutons et liens.
    • Dans la section "Boutons et liens personnalisés", cliquez sur Nouveau.
    • Saisissez Exporter vers Google comme libellé et conserver Export_to_Google comme nom.
    • Sélectionnez le type d'affichage "Bouton Liste".
    • Choisissez "Custom S-Control" comme source de contenu.
    • Sélectionnez l'option "Afficher dans une fenêtre existante avec barre latérale".
    • Sélectionnez "export_contacts" dans le menu "Commandes S personnalisées".
  3. Ajoutez le bouton à la liste des contacts :
    • Dans le menu "Configuration de l'application", cliquez sur Personnaliser | Contacts | Rechercher des mises en page.
    • Cliquez sur Modifier sur la ligne "Liste des contacts".
    • Mettez en surbrillance "Exporter vers Google", puis cliquez sur la flèche vers la droite (>) pour ajouter le bouton.
    • Cliquez sur Enregistrer.
  4. Faites un essai :
    • Cliquez sur l'onglet Contacts.
    • Sélectionnez la vue "Tous les contacts", puis cliquez sur OK.
    • Cliquez sur le bouton Exporter vers Google.
    • Attendez-vous à "waiting_dots", mais ne vous attendez pas à autre chose.

Interaction avec les feuilles de calcul Google

Si vous consultez la source de l'application composite Google Agenda, vous constaterez que le fichier gcal_snippet.scf contient une abstraction pour un serveur Google Agenda. Pour interagir avec des feuilles de calcul Google, vous devez créer un fichier similaire pour un serveur de feuilles de calcul Google. J'ai réutilisé le code de Ron Hess pour utiliser le proxy AJAX Salesforce.com et l'authentification avec Google AuthSub, et remplacé la fonction d'écriture d'événements dans Google Agenda par celle qui écrit des informations dans Google Sheets. La source complète de ce fichier est disponible dans gspreadsheet_snippet.scf.

J'ai ensuite ajouté un script JavaScript à S-Control export_contacts.scf pour demander des coordonnées à Salesforce.com et les écrire dans une feuille de calcul Google. Vous pouvez facilement extraire des données de Salesforce.com. Il vous suffit de créer une requête et de fournir une fonction de rappel à exécuter lorsque les données sont renvoyées. Exemple :

  var query = 'Select FirstName, LastName, Phone From Contact';
  var queryResult = sforce.connection.query(query, queryCallback);

Une fois en possession des coordonnées de Salesforce.com, vous devez savoir où les exporter. Dans le protocole RESTful Google, chaque feuille de calcul peut être identifiée par une URL unique. Vous pouvez obtenir la liste des feuilles de calcul d'un utilisateur (et les URL associées) en interrogeant l'URL du métaflux : http://spreadsheets.google.com/feeds/spreadsheets/private/full. La méthode suivante parcourt ces feuilles de calcul à la recherche d'une feuille de calcul avec un titre spécifique. Lorsqu'il trouve la feuille de calcul appropriée, il obtient d'abord la liste des feuilles de calcul, puis renvoie l'URL du flux des cellules de la première feuille.

function getCellFeedUrl() {
  var SPREADSHEET_TITLE = 'Salesforce.com Contacts';
  var WORKSHEET_REL = 'http://schemas.google.com/spreadsheets/2006#worksheetsfeed';
  var CELLSFEED_REL = 'http://schemas.google.com/spreadsheets/2006#cellsfeed';

  // Query to find the spreadheet called "Salesforce.com Contacts"
  var spreadsheets = g.getFeed('http://spreadsheets.google.com/feeds/spreadsheets/private/full');
  var entries = g.getEntryList(spreadsheets);
  for (var e in entries) {
    if (g.getTitle(entries[e]) == SPREADSHEET_TITLE) {
      var worksheetsFeedUrl = g.link(entries[e],WORKSHEET_REL);
      var worksheets = g.getFeed(worksheetsFeedUrl);
      var worksheetEntries = g.getEntryList(worksheets);
      return g.link(worksheetEntries[0], CELLSFEED_REL);
    }
  }
}

Pour en savoir plus sur les flux disponibles dans l'API de données Tableur Google, consultez le Guide de référence.

La fonction queryCallback utilise la méthode getCellFeedUrl pour rechercher l'URL de flux de cellules nécessaire à l'envoi de requêtes de mise à jour de cellules, puis écrit les coordonnées d'une cellule à la fois.

function queryCallback(queryResult) {
  var cellFeedUrl = getCellFeedUrl();
  var contacts = queryResult.getArray('records');
  for (var i=0; i<contacts.length; i++) {
    g.updateCell(cellFeedUrl, i+1, 1, contacts[i].LastName + ", " + contacts[i].FirstName);
    g.updateCell(cellFeedUrl, i+1, 2, contacts[i].Phone);
  }
  
  jumpback(); // Return to the contacts page when your done
}

La méthode updateCell existe dans SgControl gspreadsheet_snippet.scf. La méthode obtient l'URL de modification de la cellule dans la ligne et la colonne données, puis envoie un message HTTP PUT contenant la représentation des données Google de la cellule mise à jour:

GoogleSpreadsheet.prototype.updateCell = function(cellsFeedUrl, row, column, content ) {
  var cellEntry = this.getFeed(cellsFeedUrl+'/R'+row+'C'+column);
  var cellEditUrl = this.link(cellEntry,'edit');

  var newCellEntry = "<atom:entry xmlns:atom='http://www.w3.org/2005/Atom'>" +
      "<atom:category scheme='http://schemas.google.com/spreadsheets/2006' " +
      "term='http://schemas.google.com/spreadsheets/2006#cell' />" +
      "<gs:cell xmlns:gs='http://schemas.google.com/spreadsheets/2006' " +
      "row='" + row + "' col='" + column + "' inputValue='" + content + "' />" +
      "</atom:entry>";

  this.putEntry(cellEditUrl, newCellEntry);
} 

Pour savoir comment mettre à jour des cellules avec l'API de données Tableur Google, consultez le guide du développeur.

L'API de données Tableur Google utilise le sous-domaine https://spreadsheets.google.com. Pour que ce code fonctionne, vous devez configurer le serveur proxy AJAX Salesforce.com et ajouter https://spreadsheets.google.com.

Vous devrez également accéder à Google Docs et créer une feuille de calcul pour stocker les données. Assurez-vous de l'enregistrer en tant que contacts Salesforce.com.

Une fois que vous aurez importé ces commandes, vous pourrez exporter vos coordonnées vers une feuille de calcul Google. Et inverse ? Grâce à vos nouvelles connaissances sur Salesforce.com et les API Google Data, vous pouvez également rédiger du code pour importer les coordonnées des feuilles de calcul Google dans Salesforce.com.

Conclusion

Cet article a à peine effleuré la surface, mais maintenant que vous maîtrisez la plate-forme Salesforce.com et les API de données Google, pensez à toutes les applications que vous pouvez écrire pour exploiter ces puissants systèmes. La famille des API Google Data ne cesse de s'étoffer et propose davantage d'informations à exploiter dans vos applications. De plus, la plate-forme Salesforce.com propose de nombreux outils utiles que nous n'avons pas abordés dans cet article. Je chercherai la prochaine application composite de votre entreprise dans The AppExchange.

À vous de jouer !

Ressources