Intégration de Salesforce et Heroku à Salesforce Connect
Objectifs de formation
Une fois cette unité terminée, vous pourrez :
- Évoquer l’architecture de Salesforce Connect
- Développer des adaptateurs personnalisés Salesforce Connect.
- Décrire quand et comment utiliser Salesforce Connect avec Heroku
Salesforce Connect avec Heroku
Salesforce Connect facilite le traitement par proxy de données externes dans Salesforce sans les copier dans la base de données. Vous pouvez ainsi extraire des données dans Salesforce et les corréler avec d'autres objets dans Salesforce. Salesforce Connect fonctionne avec diverses sources de données.
- Toutes les sources de données OData 2.0 peuvent être extraites dans Salesforce avec Salesforce Connect.
- Heroku Connect peut exposer une base de données Heroku Postgres dans Salesforce Connect.
- Toutes les applications Heroku peuvent fournir des points de terminaison qui peuvent être consommés avec Salesforce Connect.
Dans cette unité, nous allons nous intéresser à la troisième option. Si vous souhaitez en savoir plus sur les autres options, vous pouvez apprendre à utiliser une base de données Heroku Postgres avec Salesforce Connect sur la page relative aux objets externes Heroku (en anglais).
Les applications Heroku peuvent fournir des points de terminaison Web pour des applications Web et mobiles ainsi que des services REST. Les services REST peuvent être aisément consommés dans Salesforce avec Apex. Par conséquent, il est facile d'écrire des adaptateurs personnalisés pour Salesforce Connect qui traitent par proxy les données fournies par les services REST.
Vous utilisez des adaptateurs personnalisés Salesforce Connect principalement lorsqu'un système externe (par exemple votre application Heroku !) fournit des données utiles dans l'interface utilisateur standard de Salesforce. Par exemple, supposons que vous avez une application immobilière orientée clients sur Heroku qui expose des données REST à des interfaces utilisateur JavaScript et mobiles. Il serait intéressant d'intégrer des données immobilières dans l'interface utilisateur de Salesforce, que des processus métier back-office et des rapports pourraient utiliser. Il suffit pour cela d'écrire un adaptateur depuis les services REST exécutés sur Heroku vers la structure Salesforce Connect.
Le principal avantage de l'utilisation de Salesforce Connect par rapport aux méthodes ETL traditionnelles (extraction, transformation et alimentation) est la synchronisation permanente des données, qui sont récupérées en quasi temps réel et qui ne sont pas copiées.
Premiers pas avec Salesforce Connect et Heroku
Pour mieux connaître les adaptateurs personnalisés Salesforce Connect, consultez la publication de blog Rendu des données JSON GitHub dans Salesforce. Si vous ne connaissez pas l'exécution de services REST sur Heroku, choisissez un langage de programmation et une infrastructure adaptés à vos besoins et à vos connaissances.
Avec le point de terminaison REST sur Heroku prêt à être consommé, il suffit maintenant d'écrire un code Apex pour faire le lien entre Salesforce Connect et le service. Dans l'exemple du service REST immobilier, vous pouvez avoir un simple adaptateur Apex qui étend la classe DataSource.Connection et implémente les méthodes sync(), query() et search() avec une structure de base telle que :
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) { } }
Vous pouvez implémenter la méthode search() utilisant une fonctionnalité de recherche personnalisée ou utiliser cet utilitaire de recherche prêt à l'emploi :
override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) { return DataSource.SearchUtils.searchByName(searchContext, this); }
La méthode sync() indique à Salesforce la structure des données des objets externes. Dans cet exemple, nous pouvons simplement ajouter un tableau unique avec quelques colonnes. Les champs ExternalId, DisplayUrl et Name sont requis.
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; }
Lorsqu'un utilisateur accède dans Salesforce à la liste d'enregistrements d'un objet externe, la méthode query() extrait et analyse les données dans la structure de données définie dans la méthode sync(). Voici un exemple de la méthode query() pour le service REST immobilier.
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; }
La méthode getProperties() transmet une requête à API REST immobilière sur Heroku. La méthode query() transforme les données en structure de données de l'objet externe.
Une fois les autres étapes de configuration effectuées, les données immobilières sont disponibles dans Salesforce.
Salesforce Connect traite les données par proxy. Par conséquent, chaque fois que l'utilisateur demande des données, Salesforce Connect utilise l'adaptateur pour les extraire. Les données se présentent et agissent maintenant comme n'importe quelle autre donnée dans Salesforce, sauf qu'elles proviennent d'une application sur Heroku !
Fonctionnalités avancées de Salesforce Connect
Les adaptateurs personnalisés Salesforce Connect facilitent la récupération de données dans Salesforce depuis Heroku. Presque trop facile. Vous pouvez même définir des relations entre les différents jeux de données. Pour en savoir plus sur les références des objets externes, reportez-vous aux documents DataSource.Column.
Conseil : Ce simple exemple utilise des données anonymes. Cependant, dans la plupart des cas, une méthode d'authentification est utilisée avec le magasin de données externe. Pour en savoir plus sur l’authentification des sources de données externes, consultez les documents Apex.
Les adaptateurs personnalisés Salesforce Connect peuvent également gérer la pagination des données, qui est essentielle si vos services REST exposent des jeux de données volumineux.