Integration von Salesforce und Heroku mittels Salesforce Connect
Lernziele
Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
- Erörtern der Salesforce Connect-Architektur
- Entwickeln benutzerdefinierter Salesforce Connect-Adapter.
- Beschreiben, wann und wie Salesforce Connect mit Heroku verwendet wird.
Salesforce Connect mit Heroku
Salesforce Connect stellt eine einfache Möglichkeit dar, externe Daten per Proxy in Salesforce bereitzustellen, ohne sie in die Datenbank zu kopieren. Auf diese Weise können Sie Daten in Salesforce laden und mit anderen Objekten in Salesforce korrelieren. Salesforce Connect kann mit einer Vielzahl von Datenquellen verwendet werden.
- Jede OData 2.0-Datenquelle kann mit Salesforce Connect in Salesforce geladen werden.
- Heroku Connect kann eine Heroku Postgres-Datenbank für Salesforce Connect zur Verfügung stellen.
- Jede Heroku-Anwendung kann Endpunkte bereitstellen, die mit Salesforce Connect verwertet werden können.
Bei dieser Lektion konzentrieren wir uns auf die dritte Möglichkeit. Wenn Sie weitere Informationen zu den beiden anderen Optionen wünschen, können Sie sich informieren, wie Sie eine Heroku Postgres-Datenbank mit Salesforce Connect mit Heroku External Objects verwenden.
Heroku-Anwendungen können Webendpunkte für Web- und mobile Anwendungen sowie REST-Services bereitstellen. Da REST-Services mit Apex problemlos in Salesforce genutzt werden können, ist es einfach, benutzerdefinierte Salesforce Connect-Adapter zu schreiben, die als Proxy für die Daten fungieren, die die REST-Services bereitstellen.
Die Hauptanwendung für benutzerdefinierte Salesforce Connect-Adapter besteht darin, dass ein externe System (wie Ihre Heroku-Anwendung!) Daten bereitstellt, die in der standardmäßigen Salesforce-Benutzeroberfläche nützlich sind. Nehmen wir beispielsweise an, Sie verwenden eine kundenorientierte Immobilienanwendung in Heroku, die REST-Daten für JavaScript- und mobile Benutzeroberflächen bereitstellt. Es wäre toll, wenn einige dieser Immobiliendaten in die Salesforce-Benutzeroberfläche geladen werden könnten, da sie für verschiedene Geschäftsprozesse und Bericht im Back-Office nützlich wären. Sie müssen dazu nur einen Adapter als Bindeglied zwischen den REST-Services, die in Heroku ausgeführt werden, und der Salesforce Connect-Struktur schreiben.
Der Hauptvorteil von Salesforce Connect gegenüber herkömmlichen ETL-Methoden (Extract, Transform and Load) besteht darin, dass die Daten immer synchron sind, da sie nahezu in Echtzeit abgerufen und nicht kopiert werden.
Erste Schritte mit Salesforce Connect und Heroku
Grundlegendes über benutzerdefinierte Salesforce Connect-Adapter finden Sie im Blogpost Rendering GitHub JSON Data in Salesforce. Falls Sie mit der Ausführung von REST-Services in Heroku nicht vertraut sind, wählen Sie eine Programmiersprache und ein Framework, die Ihren Anforderungen und Kenntnissen entsprechen.
Der REST-Endpunkt steht also in Heroku zur Verwendung bereit, und Sie müssen jetzt nur etwas Apex-Code als Bindeglied zwischen Salesforce Connect und dem Service schreiben. Für den REST-Beispielservice für Immobiliendaten könnten wir einen einfachen Apex-Adapter schreiben, der die Klasse DataSource.Connection erweitert und die Methoden sync(), query() und search() mit einer grundlegenden Struktur wie der folgenden implementiert:
global class RealEstateConnection extends DataSource.Connection { override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) { } override global List<DataSource.Table> sync() { } override global DataSource.TableResult query(DataSource.QueryContext queryContext) { } }
Sie können die search()-Methode mit benutzerspezifischen Suchfunktionen implementieren oder dieses vorgefertigte Suchdienstprogramm verwenden:
override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) { return DataSource.SearchUtils.searchByName(searchContext, this); }
Die sync()-Methode informiert Salesforce über die Datenstruktur der externen Objekte. In diesem Beispiel fügen wir einfach eine einzelne Tabelle mit einigen Spalten hinzu. Die Felder 'ExternalId', 'DisplayUrl' und 'Name' sind erforderlich.
override global List<DataSource.Table> sync() { List<DataSource.Column> columns = new List<DataSource.Column>(); columns.add(DataSource.Column.text('ExternalId', 255)); columns.add(DataSource.Column.url('DisplayUrl')); columns.add(DataSource.Column.text('Name', 128)); columns.add(DataSource.Column.text('city', 128)); columns.add(DataSource.Column.text('price', 128)); List<DataSource.Table> tables = new List<DataSource.Table>(); tables.add(DataSource.Table.get('Properties', 'Name', columns)); return tables; }
Wenn ein Benutzer in Salesforce auf die Datensatzliste eines externen Objekts zugreift, ruft die query()-Methode die Daten in die von der sync()-Methode definierte Datenstruktur ab und analysiert sie. Es folgt ein Beispiel für die query()-Methode für REST-Service für Immobiliendaten.
override global DataSource.TableResult query(DataSource.QueryContext queryContext) { List<Map<String, Object>> properties = DataSource.QueryUtils.process(queryContext, getProperties()); DataSource.TableResult tableResult = DataSource.TableResult.get(queryContext, properties); return tableResult; } public List<Map<String, Object>> getProperties() { Http httpProtocol = new Http(); HttpRequest request = new HttpRequest(); String url = 'https://ionic2-realty-rest-demo.herokuapp.com/properties/'; request.setEndPoint(url); request.setMethod('GET'); HttpResponse response = httpProtocol.send(request); List<Map<String, Object>> properties = new List<Map<String, Object>>(); for (Object item : (List<Object>)JSON.deserializeUntyped(response.getBody())) { Map<String, Object> property = (Map<String, Object>)item; property.put('ExternalId', property.get('id')); property.put('DisplayUrl', 'https://ionic2-realty-rest-demo.herokuapp.com/'); property.put('Name', property.get('title')); properties.add(property); } return properties; }
Die getProperties()-Methode sendet eine Anforderung an die REST-API für Immobilien in Heroku. Die query()-Methode wandelt die Daten in die Datenstruktur des externen Objekts um.
Nachdem die weiteren Einrichtungsschritte ausgeführt wurden, stehen die Immobiliendaten in Salesforce zur Verfügung.
Da Salesforce Connect die Daten als Proxy bereitstellt, verwendet Salesforce Connect immer dann, wenn der Benutzer die Daten anfordert, den Adapter zum Abrufen der Daten. Die Daten sind in Aussehen und Verhalten jetzt identisch mit anderen Daten in Salesforce, stammen aber aus einer Anwendung in Heroku!
Erweiterte Funktionen von Salesforce Connect
Benutzerdefinierte Salesforce Connect-Adapter machen es leicht, Daten aus Heroku in Salesforce zu laden. Man könnte fast sagen, sie machen es zu leicht. Sie können sogar Beziehungen zwischen den unterschiedlichen Datensets definieren. Weitere Informationen über Verweise auf externe Objekte finden Sie in den Dokumenten zu DataSource.Column.
Expertentipp: Bei diesem einfachen Beispiel werden anonyme Daten genutzt, doch in den meisten Fällen wird eine Art von Authentifizierung beim externen Datenspeicher verwendet. Weitere Informationen über die Authentifizierung für externe Datenquellen finden Sie in der Apex-Dokumentation.
Benutzerdefinierte Salesforce Connect-Adapter können auch Datenpaging verarbeiten. Dies ist unerlässlich, wenn Ihre REST-Services große Datensets bereitstellen.