REST for the Traveling Salesman: Using Google Data on Salesforce.com

Lane LiaBraaten, Google Developer Programs
November 2007

Einführung

Salesforce.com und Google hosten beliebte „Software as a Service“-Anwendungen und beide Organisationen stellen APIs zur Verfügung, mit denen Entwickler auf die großen Datenmengen zugreifen können, die diese Anwendungen unterstützen. Interessant wird es, wenn wir beide API-Sätze kombinieren. G Suite wird in Unternehmen immer häufiger eingesetzt und Salesforce.com hat eine umfangreiche Plattform für die Entwicklung benutzerdefinierter Geschäftsanwendungen entwickelt. Entwickler (also Sie!) haben daher viele Möglichkeiten, die Leistungsfähigkeit von Google und Salesforce.com zu kombinieren.

In diesem Artikel erfahren Sie, wie Sie die RESTful Google Data APIs verwenden, um Enterprise-Mashups zu erstellen, auch wenn Sie gerade erst mit der Salesforce.com-Plattform oder dem Google Data-Protokoll beginnen. Ich helfe Ihnen dabei, Ihre Entwicklungsumgebung einzurichten, ein vorhandenes Salesforce.com- und Google-Mashup zu installieren und dann Ihr eigenes zu schreiben.

Hallo, Salesforce.com!

Wenn Sie wie ich ein Salesforce.com-Neuling sind, müssen Sie sich zuerst im Apex Developer Network (ADN) für ein Entwicklerkonto registrieren. Mit dem Entwicklerkonto erhalten Sie ein voll funktionsfähiges Salesforce.com-Konto sowie Zugriff auf das Apex-Wiki und die Diskussionsforen.

Als Nächstes benötigen Sie das Apex Toolkit für Eclipse. Für das Toolkit sind Java 1.5 und Eclipse 3.2.2 oder höher erforderlich. Wenn Sie sich mit Eclipse auskennen, ist die Software-Update-Website für das Toolkit http://www.adnsandbox.com/eclipsetoolkit/10.0/. Wenn Sie sich mit Eclipse-Plug-ins nicht auskennen oder bei der Installation etwas schiefgeht, finden Sie im Apex-Wiki eine detaillierte Installationsanleitung.

Nach der Installation des Toolkits können Sie auf die in das Hilfesystem von Eclipse integrierten Apex-Hilfeinhalte zugreifen. Rufen Sie in Eclipse Help | Help Contents | Apex Toolkit for Eclipse auf, um diese Inhalte zu sehen. Eine der Hilfe-Ressourcen ist eine Kurzanleitung, in der Sie erfahren, wie Sie ein neues Projekt erstellen und S-Controls, Klassen und Trigger hinzufügen. Wenn Sie noch nicht mit Apex-Code gearbeitet haben, sollten Sie diese Anleitung durcharbeiten und ein Apex-Projekt erstellen, bevor Sie fortfahren.

Termine in Google Kalender exportieren

Ron Hess hat eine Google Kalender-Mashup-Anwendung entwickelt, mit der Sie Termine aus Salesforce.com in Google Kalender exportieren können. Ron hat auch einen Artikel geschrieben, in dem er die Funktionsweise seines Mashups erklärt. Die Google Tabellen-Anwendung, die ich Ihnen später zeigen werde, ist nach Rons Google Kalender-Mashup modelliert. Danke, Ron!

Wenn Sie ein erfahrener Salesforce.com-Nutzer sind, können Sie die Google Kalender-Anwendung von Ron wahrscheinlich ohne Anleitung einbinden und verwenden. Ich brauchte anfangs etwas Hilfe. Hier ist, was ich getan habe, um Rons App in Aktion zu sehen.

  1. Installieren Sie die Anwendung:
    • Rufen Sie die Seite Google Calendar Mash-up auf und klicken Sie auf Get It Now (Jetzt herunterladen).
    • Geben Sie Ihre ADN-Anmeldedaten ein und klicken Sie auf Weiter.
    • Lesen Sie die Nutzungsbedingungen und klicken Sie auf Weiter.
    • Klicken Sie auf der Seite „Paketinhalt prüfen“ auf Weiter.
    • Wählen Sie ein Sicherheitsniveau aus und klicken Sie auf Weiter.
    • Klicken Sie auf Installieren.
  2. Salesforce.com-AJAX-Proxy konfigurieren
    • Klicken Sie im Menü „Administration Setup“ (Einrichtung der Administration) auf Security Controls | Remote Site Settings (Sicherheitskontrollen | Einstellungen für Remote-Websites).
    • Klicken Sie auf Neue Remote-Website.
    • Geben Sie Google als „Name der Remote-Website“ und https://www.google.com als „URL der Remote-Website“ ein.
    • Klicken Sie auf Speichern.
  3. Fügen Sie die Schaltfläche „Zu Google hinzufügen“ auf der Seite mit den Termindetails hinzu:
    • Klicken Sie im Menü „App-Einrichtung“ auf Anpassen | Aktivitäten | Layouts für Veranstaltungsseiten.
    • Klicken Sie in der Zeile „Ereignislayout“ auf Bearbeiten.
    • Doppelklicken Sie auf den Bereich „Schaltflächen auf der Detailseite“.
    • Markieren Sie „Zu Google hinzufügen“ und klicken Sie auf den Rechtspfeil (>), um die Schaltfläche hinzuzufügen.
    • Klicken Sie auf OK.
    • Klicken Sie auf der Seite „Eigenschaften des Seitenlayouts“ auf Speichern.
  4. Termin exportieren
    • Klicken Sie links oben auf Startseite, um Ihren Kalender aufzurufen.
    • Wenn Sie keine Ereignisse haben, klicken Sie auf Neues Ereignis, um eines zu erstellen.
    • Klicken Sie auf ein Ereignis, um die Seite „Ereignisdetails“ aufzurufen.
    • Klicken Sie auf die Schaltfläche Zu Google hinzufügen.
    • Klicken Sie im JavaScript-Hinweis auf OK.
    • Melde dich mit deinem Nutzernamen und Passwort an.
    • Klicken Sie auf Zugriff gewähren, um der Salesforce-Anwendung Schreibzugriff auf Ihren Google-Kalender zu gewähren.
    • Termin in Ihrem Google Kalender ansehen

Google-Tabellen-Anwendung erstellen

Okay, Sie haben wahrscheinlich genug von den Salesforce.com-Seiten und möchten jetzt Code schreiben. Starten Sie Eclipse noch einmal. Das von Ihnen erstellte Apex-Projekt enthält jetzt die S-Controls für die Google Kalender App von Ron. Das liegt daran, dass das Apex Toolkit für Eclipse ständig mit Salesforce.com synchronisiert wird.

Sie können Ihre eigene Google Data-App erstellen und dabei einige Funktionen des Google Kalender-Mash-ups wiederverwenden, z. B. die Authentifizierungssteuerung. Im Rest dieses Abschnitts erfahren Sie, wie Sie eine App erstellen, mit der Ihre Salesforce.com-Kontakte in eine Google-Tabelle exportiert werden.

Einfaches S-Control veröffentlichen

Ein S-Control ist eine Datei, die von Salesforce.com gehostet und in Webbrowsern ausgeführt wird, wenn Nutzer auf Ihre Anwendung zugreifen. Ein S-Control kann beliebige Inhalte enthalten, die in einem Webbrowser angezeigt oder ausgeführt werden können, z. B. HTML, CSS oder JavaScript.

Bei einer Kombination aus Salesforce.com und Google gibt es viele bewegliche Teile. Deshalb habe ich als Erstes der Seite mit der Kontaktliste die Schaltfläche „In Google exportieren“ hinzugefügt, die ein einfaches S-Control aufruft. So konnte ich sichergehen, dass alles richtig funktioniert, bevor ich mich mit JavaScript beschäftigte.

Klicken Sie in Ihrem Apex-Projekt mit der rechten Maustaste auf den Ordner „S-Controls“ und wählen Sie Apex | New S-Control (Apex | Neues S-Control) aus. Geben Sie dem neuen S-Control das Label und den Namen export_contacts, lassen Sie den Typ auf Benutzerdefiniertes HTML eingestellt und klicken Sie auf Fertigstellen.

Das neue S-Control enthält eine einfache HTML-Datei. Sie fügen eine Menge JavaScript im <head>-Bereich hinzu, können aber zuerst den <body>-Bereich ausfüllen, damit dem Nutzer etwas angezeigt wird, während die Kontakte exportiert werden. Kopieren Sie diesen HTML-Code in den Body Ihres S-Controls, um die „Wartepunkte“ und ein Google Tabellen-Logo anzuzeigen:

<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>

Jetzt können Sie das S-Control veröffentlichen und eine Schaltfläche einrichten, mit der es aufgerufen wird.

  1. So veröffentlichen Sie die S-Control-Datei mit Eclipse:
    • Klicken Sie mit der rechten Maustaste auf Ihr Apex-Projekt und wählen Sie Apex | Mit Salesforce synchronisieren aus.
    • Suchen Sie in der Verzeichnisstruktur nach Ihrem neuen S-Control, klicken Sie mit der rechten Maustaste darauf und wählen Sie Override remote and publish to server (Remote überschreiben und auf Server veröffentlichen) aus.
    • Wenn Sie Ihr S-Control nicht finden können, wurde es möglicherweise bereits vom Apex Toolkit hochgeladen. Es empfiehlt sich jedoch, die Synchronisierungsperspektive zu verwenden, um sicherzustellen, dass der neueste Code auf dem Server ausgeführt wird.
  2. Definieren Sie in der Salesforce.com-Benutzeroberfläche eine Schaltfläche, mit der dieses S-Control aufgerufen wird:
    • Klicken Sie im Menü „App-Einrichtung“ auf Anpassen | Kontakte | Schaltflächen und Links.
    • Klicken Sie im Bereich „Benutzerdefinierte Schaltflächen und Links“ auf Neu.
    • Geben Sie Export to Google als Label ein und behalten Sie Export_to_Google als Namen bei.
    • Wählen Sie „Listenschaltfläche“ als Anzeigetyp aus.
    • Wählen Sie „Benutzerdefiniertes S-Control“ als Contentquelle aus.
    • Wählen Sie als Verhalten „In vorhandenem Fenster mit Seitenleiste anzeigen“ aus.
    • Wählen Sie im Menü „Benutzerdefinierte S-Controls“ die Option „export_contacts“ aus.
  3. So fügen Sie die Schaltfläche der Kontaktliste hinzu:
    • Klicken Sie im Menü „App-Einrichtung“ auf Anpassen | Kontakte | Suchlayouts.
    • Klicken Sie in der Zeile „Kontaktlistenansicht“ auf Bearbeiten.
    • Markieren Sie „In Google exportieren“ und klicken Sie auf den Rechtspfeil (>), um die Schaltfläche hinzuzufügen.
    • Klicken Sie auf Speichern.
  4. Testen Sie die Funktion:
    • Klicken Sie auf den Tab Kontakte.
    • Wählen Sie „Alle Kontakte“ als Ansicht aus und klicken Sie auf Los!.
    • Klicken Sie auf die neue Schaltfläche In Google exportieren.
    • Sehen Sie sich die Wartepunkte an, aber erwarten Sie nicht, dass etwas anderes passiert.

Mit Google-Tabellen interagieren

Wenn Sie sich den Quellcode für das Google Kalender-Mashup ansehen, werden Sie feststellen, dass die Datei „gcal_snippet.scf“ eine Abstraktion für einen Google Kalender-Server enthält. Wenn Sie mit Google-Tabellen interagieren möchten, müssen Sie eine ähnliche Datei für einen Google-Tabellen-Server erstellen. Ich habe den Code von Ron Hess für die Verwendung des Salesforce.com-AJAX-Proxys und die Authentifizierung mit Google AuthSub wiederverwendet und die Funktion, die Ereignisse in Google Kalender schreibt, durch eine Funktion ersetzt, die Informationen in Google Tabellen schreibt. Der vollständige Quellcode für diese Datei ist in gspreadsheet_snippet.scf verfügbar.

Als Nächstes habe ich der export_contacts.scf-S-Control JavaScript hinzugefügt, um Salesforce.com nach Kontaktdaten zu durchsuchen und diese in eine Google-Tabelle zu schreiben. Daten aus Salesforce.com zu exportieren ist ganz einfach. Sie müssen nur eine Abfrage erstellen und eine Callback-Funktion angeben, die ausgeführt werden soll, wenn die Daten zurückgegeben werden. Beispiel:

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

Sobald Sie die Kontaktdaten von Salesforce.com haben, müssen Sie festlegen, wohin sie exportiert werden sollen. Im RESTful Google Data-Protokoll kann jede Tabelle durch eine eindeutige URL identifiziert werden. Sie können die Liste der Tabellen eines Nutzers (und die zugehörigen URLs) abrufen, indem Sie die Metafeed-URL http://spreadsheets.google.com/feeds/spreadsheets/private/full abfragen. Die folgende Methode durchläuft diese Tabellen und sucht nach einer Tabelle mit einem bestimmten Titel. Wenn die richtige Tabelle gefunden wurde, wird zuerst die Liste der Arbeitsblätter abgerufen und dann die Feed-URL für die Zellen des ersten Arbeitsblatts zurückgegeben.

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);
    }
  }
}

Weitere Informationen zu den in der Google Spreadsheets Data API verfügbaren Feeds finden Sie im Referenzleitfaden.

Die Funktion queryCallback verwendet die Methode getCellFeedUrl, um die Feed-URL für Zellen zu finden, die zum Senden von Anfragen zum Aktualisieren von Zellen erforderlich ist. Anschließend werden die Kontaktdaten zellenweise geschrieben.

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
}

Die Methode updateCell ist im S-Control gspreadsheet_snippet.scf vorhanden. Die Methode ruft die Bearbeitungs-URL der Zelle in der angegebenen Zeile und Spalte ab und sendet dann eine HTTP-PUT-Nachricht, die die Google Data-Darstellung der aktualisierten Zelle enthält:

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);
} 

Weitere Informationen zum Aktualisieren von Zellen mit der Google Spreadsheets Data API finden Sie im Entwicklerhandbuch.

Die Google Spreadsheets Data API verwendet die Subdomain https://spreadsheets.google.com. Damit der oben genannte Code funktioniert, müssen Sie also den AJAX-Proxyserver von Salesforce.com konfigurieren und https://spreadsheets.google.com hinzufügen.

Außerdem müssen Sie Google Docs aufrufen und eine neue Tabelle erstellen, in der die Daten gespeichert werden. Speichern Sie sie als Salesforce.com-Kontakte.

Nachdem Sie diese S-Controls hochgeladen haben, können Sie Ihre Kontaktdaten in eine Google-Tabelle exportieren. Wie sieht es andersherum aus? Mit Ihrem neuen Wissen über Salesforce.com und Google Data APIs können Sie auch Code schreiben, um Kontaktinformationen aus Google-Tabellen in Salesforce.com zu importieren.

Fazit

Dieser Artikel hat nur die Oberfläche angekratzt, aber jetzt, da Sie sich mit der Salesforce.com-Plattform und den Google Data APIs vertraut gemacht haben, können Sie sich vorstellen, welche Anwendungen Sie schreiben können, um diese leistungsstarken Systeme zu nutzen. Die Google Data-APIs werden ständig erweitert und bieten Ihnen immer mehr Informationen, die Sie in Ihren Anwendungen nutzen können. Die Salesforce.com-Plattform bietet viele nützliche Tools, die in diesem Artikel nicht behandelt wurden. Ich freue mich auf Ihr nächstes Enterprise-Mashup im AppExchange.

Viel Spaß beim Programmieren!

Ressourcen