REST für den Reiseveranstalter: Google-Daten auf Salesforce.com verwenden

Lane LiaBraaten, Google Developer Programs
November 2007

Einführung

Salesforce.com und Google hosten beliebte „Software as a Service“-Anwendungen. Beide Organisationen stellen APIs zur Verfügung, mit denen Entwickler auf die großen Datenspeicher zugreifen können, die diesen Anwendungen zugrunde liegen. Die Kombination der beiden APIs wird dann interessant. Die G Suite wird in der Unternehmensumgebung immer mehr verwendet und Salesforce.com hat eine umfassende Plattform zum Erstellen benutzerdefinierter Unternehmensanwendungen entwickelt. Dadurch können Entwickler (Sie also!) die Möglichkeiten von Google und Salesforce.com miteinander kombinieren.

In diesem Artikel erfahren Sie, wie Sie mit den RESTful Google Data APIs Unternehmens-Mashups erstellen können, auch wenn Sie gerade erst mit der Salesforce.com-Plattform oder dem Google Data-Protokoll begonnen haben. Ich helfe Ihnen dabei, Ihre Entwicklungsumgebung einzurichten, ein bestehendes Salesforce.com- und ein Google-Mashup zu installieren und anschließend Ihr eigenes zu erstellen.

Hallo Salesforce.com,

Wenn Sie ein Salesforce.com-Neukunde wie ich sind, müssen Sie sich zuerst über ANP, das Apex Developer Network, für ein Entwicklerkonto registrieren. Weitere Informationen Mit dem Entwicklerkonto erhalten Sie ein voll funktionsfähiges Salesforce.com-Konto sowie Zugriff auf das Apex-Wiki und 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, können Sie auf der Website zum Softwareupdate http://www.adnsandbox.com/eclipsetoolkit/10.0/ installieren. Wenn Sie mit Eclipse-Plug-ins nicht vertraut sind oder während der Installation etwas schiefgeht, finden Sie im Apex-Wiki eine detaillierte Installationsanleitung.

Nach der Installation des Toolkits können Sie auf die Apex-Hilfe zugreifen, die in das Hilfesystem von Eclipse integriert ist. Sie finden diese Informationen in Eclipse unter Help | Help Contents | Apex Toolkit for Eclipse. Eine der Hilferessourcen ist eine Kurzanleitung, die Ihnen zeigt, wie Sie ein neues Projekt erstellen und S-Controls, Klassen und Trigger hinzufügen. Wenn Sie noch nie mit Apex-Code gearbeitet haben, sollten Sie diese Anleitung durchgehen und ein Apex-Projekt erstellen, bevor Sie fortfahren.

Termine werden nach Google Kalender exportiert

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

Wenn Sie ein Salesforce.com-Poweruser sind, können Sie die Google Kalender App von Ron möglicherweise ohne Anleitung integrieren und verwenden. Ich brauchte ein wenig Hilfe, um Rons App in Aktion zu sehen.

  1. Installieren Sie die Anwendung:
    • Rufen Sie die Seite Mashup von Google Kalender auf und klicken Sie auf 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 eine Sicherheitsebene aus und klicken Sie auf Weiter.
    • Klicken Sie auf Installieren.
  2. AJAX-Proxy von Salesforce.com konfigurieren
    • Klicken Sie im Menü „Verwaltung“ auf Sicherheitseinstellungen | Einstellungen für Remote-Websites.
    • Klicken Sie auf Neue Remote-Website.
    • Geben Sie Google als „Name der Remote-Website“ ein und verwenden Sie für die „URL der Remote-Website“ https://www.google.com.
    • Klicken Sie auf Speichern.
  3. Fügen Sie der Seite „Termindetails“ die Schaltfläche „Zu Google hinzufügen“ hinzu:
    • Klicken Sie im Menü „App-Einrichtung“ auf Anpassen | Aktivitäten | Seitenlayouts.
    • Klicken Sie in der Zeile „Ereignislayout“ auf Bearbeiten.
    • Doppelklicken Sie auf den Bereich „Schaltflächen 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. Termine exportieren
    • Klicken Sie links oben auf Startseite, um Ihren Kalender aufzurufen.
    • Falls keine Termine vorhanden sind, klicken Sie auf Neuer Termin, um einen zu erstellen.
    • Klicken Sie auf ein Ereignis, um die Seite mit den Ereignisdetails aufzurufen.
    • Klicken Sie auf die Schaltfläche Zu Google hinzufügen.
    • Klicken Sie in der JavaScript-Benachrichtigung auf OK.
    • Melde dich mit deinem Nutzernamen und Passwort an.
    • Klicken Sie auf Zugriff erlauben, um der Salesforce-Anwendung Schreibzugriff auf Ihren Google Kalender zu gewähren.
    • Den Termin in Google Kalender ansehen

Google Tabellen-Anwendung erstellen

Okay, das Lesen der Seiten von Salesforce.com ist Ihnen zu langweilig. Starten Sie Eclipse noch einmal. Sie werden feststellen, dass das Apex-Projekt, das Sie nun erstellt haben, die S-Steuerelemente für Rons Google Kalender-App enthält. Das liegt daran, dass das Apex-Toolkit für Eclipse ständig mit Salesforce.com synchronisiert wird.

Sie können eine eigene Google Data-App erstellen, in der Sie einige der Funktionen von Google Kalender-Mashups wie die Authentifizierungseinstellungen verwenden. Im Rest dieses Abschnitts zeige ich Ihnen, 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 alle Arten von Inhalten enthalten, die Sie in einem Webbrowser anzeigen oder ausführen können, wie HTML, CSS oder JavaScript.

In Salesforce.com und Google Mashup gibt es einige wenige Elemente, die ich zuerst auf der Seite mit der Kontaktliste über die Schaltfläche „Nach Google exportieren“ aufrufen wollte. So kann ich prüfen, ob alles korrekt funktioniert, bevor ich JavaScript vollständig verwende.

Klicken Sie im Apex Project-Projekt mit der rechten Maustaste auf den Ordner „S-Controls“ und dann auf Apex | New S-Control. Geben Sie dem neuen S-Control-Label ein Label und den Namen export_contacts, behalten Sie den Typ Benutzerdefiniertes HTML bei und klicken Sie auf Fertig.

Das neue S-Control enthält ein HTML-Basisgerüst. Sie werden JavaScript-Code in <head> einfügen, aber Sie können zuerst <body> eingeben, damit der Nutzer während des Exports der Kontakte etwas sieht. Kopieren Sie diesen HTML-Code in den Textkörper Ihres S-Control, um die "wartenden Punkte" und ein Logo von Google Tabellen 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 zum Aufrufen einrichten.

  1. Verwenden Sie Eclipse, um die S-Control-Datei zu veröffentlichen:
    • Klicken Sie mit der rechten Maustaste auf Ihr Apex Project und wählen Sie Apex | Sync with Salesforce aus.
    • Suchen Sie das neue S-Control in der Verzeichnisstruktur, klicken Sie mit der rechten Maustaste darauf und wählen Sie Remote überschreiben und auf Server veröffentlichen aus.
    • Wenn Sie Ihr S-Control-Gerät nicht finden können, wurde es möglicherweise bereits vom Apex-Toolkit hochgeladen. Mit der Synchronisierungsperspektive sollten Sie jedoch sicherstellen, dass der neueste Code auf dem Server ausgeführt wird.
  2. Definieren Sie auf der Benutzeroberfläche von Salesforce.com eine Schaltfläche zum Aufrufen dieses S-Control:
    • 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 unter Label für Google exportieren den Namen Export_to_Google ein.
    • Wählen Sie als Anzeigetyp „Listenschaltfläche“ aus.
    • Wählen Sie „Benutzerdefinierte S-Steuerung“ als Contentquelle aus.
    • Wählen Sie als Verhalten „In vorhandenem Fenster mit Seitenleiste anzeigen“ aus.
    • Wählen Sie im Menü „Benutzerdefinierte S-Steuerelemente“ die Option „export_contacts“ aus.
  3. Fügen Sie die Schaltfläche der Kontaktliste hinzu:
    • Klicken Sie im Menü „App-Einrichtung“ auf Anpassen | Kontakte | Suchlayouts.
    • Klicken Sie in der Zeile „Kontaktliste“ auf Bearbeiten.
    • Markieren Sie „Nach Google exportieren“ und klicken Sie auf den Rechtspfeil (>), um die Schaltfläche hinzuzufügen.
    • Klicken Sie auf Speichern.
  4. Jetzt testen:
    • 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 Nach Google exportieren.
    • Sieh dir die „waiting_dots“ an, erwarte aber nichts anderes.

Mit Google Tabellen interagieren

Wenn Sie sich die Quelle für das Google Kalender-Mash-up ansehen, sehen Sie, dass die Datei gcal_snippet.scf eine Abstraktion für einen Google Kalender-Server enthält. Für die Interaktion mit Google Tabellen 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, mit der Termine in Google Kalender geschrieben werden, durch eine ersetzt, die Informationen in Google Tabellen schreibt. Die vollständige Quelle für diese Datei finden Sie in gspreadsheet_snippet.scf.

Als Nächstes habe ich JavaScript zum S-Steuerelement export_contacts.scf hinzugefügt, um Salesforce.com nach Kontaktdaten abzufragen und sie in eine Google-Tabelle zu schreiben. Das Übertragen von Daten aus Salesforce.com ist ganz einfach. Erstellen Sie einfach eine Abfrage und stellen Sie eine Callback-Funktion zur Ausführung bereit, 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 herausfinden, wo Sie sie exportieren möchten. Im RESTful-Protokoll von Google kann jede Tabelle durch eine eindeutige URL identifiziert werden. Sie können die Liste der Tabellen eines Nutzers (und der 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 wird, wird zuerst die Liste der Arbeitsblätter abgerufen und dann die URL des Feedfeeds für das erste Arbeitsblatt 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 Tabellen Data API verfügbaren Feeds finden Sie im Referenzhandbuch.

Die Funktion queryCallback verwendet die Methode getCellFeedUrl, um die Zellenfeed-URL zu finden, die zum Senden von Anfragen zum Aktualisieren von Zellen erforderlich ist. Anschließend werden die Kontaktdaten in eine Zelle 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-Steuerelement 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 mit der Google-Datendarstellung der aktualisierten Zelle:

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 zur Aktualisierung von Zellen mit der Google Tabellen API finden Sie im Entwicklerhandbuch.

Die Google Tabellen-Daten-API verwendet die Subdomain https://spreadsheets.google.com. Bevor der obige Code funktioniert, müssen Sie den AJAX-Proxyserver Salesforce.com konfigurieren und https://spreadsheets.google.com hinzufügen.

Sie müssen auch Google Docs öffnen und eine neue Tabelle für die Daten erstellen. Speichern Sie die Datei als Salesforce.com-Kontakte.

Nachdem Sie diese S-Steuerelemente hochgeladen haben, können Sie Ihre Kontaktdaten in eine Google-Tabelle exportieren. Was ist mit der anderen Möglichkeit? Mit Ihrem Wissen zu Salesforce.com und den Google Data APIs können Sie auch Code für den Import von Kontaktdaten aus Google Tabellen in Salesforce.com schreiben.

Fazit

Dieser Artikel hat die Oberfläche kaum verändert, aber jetzt, da Sie auf der Plattform von Salesforce.com und den Google Data APIs alles wissen, können Sie sich überlegen, welche Anwendungen Sie schreiben können, um diese leistungsstarken Systeme zu nutzen. Die Google Data-API-Familie wächst ständig und bietet Ihnen weitere Informationen für Ihre Anwendungen. Die Salesforce.com-Plattform bietet viele nützliche Tools, die in diesem Artikel nicht behandelt wurden. Ich suche nach Ihrem nächsten Unternehmens-Mashup in The AppExchange.

Viel Spaß beim Programmieren!

Ressourcen