Skip to main content

Integrar Salesforce y Heroku con Salesforce Connect

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Debatir sobre la arquitectura de Salesforce Connect.
  • Desarrollar adaptadores personalizados de Salesforce Connect.
  • Describir cómo y cuándo utilizar Salesforce Connect con Heroku.

Salesforce Connect con Heroku

Salesforce Connect es una forma sencilla de hacer proxy de datos externos en Salesforce son copiarlos a la base de datos. De esta forma, puede extraer datos hasta Salesforce y correlacionar esos datos con otros objetos de Salesforce. Salesforce Connect funciona con diversas fuentes de datos.

  • Cualquier fuente de datos OData 2.0 puede extraerse hasta Salesforce con Salesforce Connect.
  • Heroku Connect puede exponer una base de datos Postgres de Heroku a Salesforce Connect.
  • Cualquier aplicación Heroku puede proporcionar extremos que pueden consumirse con Salesforce Connect.

Imagen ilustrando cómo se pueden utilizar Objetos externos para conectar de forma externa con datos externos disponibles a través de SAP, Oracle, Workday o Heroku

En esta unidad, nos centraremos en la tercera opción. Si desea obtener más información sobre las otras opciones, puede aprender a utilizar una base de datos Postgres de Heroku con Salesforce Connect con objetos externos de Heroku.

Las aplicaciones Heroku pueden proporcionar extremos web para aplicaciones móviles y web así como servicios REST. Debido a que los servicios REST pueden consumirse fácilmente en Salesforce con Apex, es fácil escribir adaptadores personalizados para Salesforce Connect que hacen de proxy de los datos que proporcionan los servicios REST.

El caso de uso principal para los adaptadores personalizados de Salesforce Connect es cuando un sistema externo (¡como su aplicación Heroku!) proporciona datos que son útiles en la interfaz de usuario estándar de Salesforce. Por ejemplo, digamos que tiene una aplicación de inmobiliaria orientada a clientes en Heroku que expone datos REST a JavaScript e interfaces de usuario móviles. Sería estupendo incorporar algunos de esos datos de inmobiliaria a la interfaz de usuario de Salesforce, ya que algunos procesos de negocio y reportes de back-office podrían utilizarlos. Todo lo que tiene que hacer es escribir un adaptador desde los servicios REST que se ejecute en Heroku hasta la estructura de Salesforce Connect.

El beneficio principal del uso de Salesforce Connect en vez de los métodos ETL tradicionales es que los datos siempre están sincronizados porque se recuperan en casi tiempo real y no se copian.

Primeros pasos con Salesforce Connect y Heroku

Para empezar a aprender sobre los adaptadores personalizados de Salesforce Connect, consulte la publicación de blog Representación de datos JSON de GitHub en Salesforce. Si no está familiarizado con la ejecución de servicios REST en Heroku, seleccione un lenguaje de programación y un marco de trabajo que se ajuste a sus necesidades y habilidades.

Con el extremo REST en Heroku listo para consumirse, ahora es solo cuestión de escribir algo de código Apex para hacer de puente entre Salesforce Connect y el servicio. Para el ejemplo de servicio REST de inmobiliaria, podríamos tener un sencillo adaptador de Apex que amplíe la clase DataSource.Connection e implemente los métodos sync(), query() y search() con una estructura básica como:

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

    }

Puede implementar el método search() empleando funciones de búsqueda personalizadas o utilizar esta utilidad de búsqueda preintegrada:

override global List<DataSource.TableResult> search(DataSource.SearchContext searchContext) {

    return DataSource.SearchUtils.searchByName(searchContext, this);

  }

El método sync() informa a Salesforce sobre la estructura de los datos de los Objetos externos. Para este ejemplo, podemos simplemente agregar una tabla sencilla con algunas columnas. Los campos ExternalId, DisplayUrl, y Name son obligatorios.

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;

}

Cuando un usuario en Salesforce acceder a una lista de registros del Objeto externo, el método query() obtiene y analiza los datos en la estructura de datos definida en el método sync(). A continuación aparece un ejemplo del método query() para el servicio REST de inmobiliaria.

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;

 }

El método getProperties() realiza una solicitud a la API de REST de inmobiliaria en Heroku. El método query() transforma los datos en la estructura de datos del Objeto externo.

Cuando se hayan completado los otros pasos de configuración, los datos de inmobiliaria estarán disponibles en Salesforce.

Debido a que Salesforce Connect hace de proxy de los datos, cada vez que el usuario solicita los datos, Salesforce Connect utiliza el adaptador para obtener los datos. Ahora los datos tienen el aspecto y el comportamiento de cualquier dato en Salesforce, con la excepción de que proceden de una aplicación en Heroku.

Funciones avanzadas de Salesforce Connect

Los adaptadores personalizados de Salesforce Connect facilitan extraer datos hasta Salesforce desde Heroku. Casi demasiado fácilmente. Puede incluso definir relaciones entre los diferentes conjuntos de datos. Obtenga más información sobre las referencias de Objeto externo en los documentos de DataSource.Column.

Sugerencia avanzada: Este sencillo ejemplo utiliza datos anónimos, pero en la mayoría de los casos utiliza algún tipo de autenticación con el almacén de datos externo. Obtenga más información sobre la autenticación para fuentes de datos externas en los documentos de Apex.

Los adaptadores personalizados de Salesforce Connect también pueden controlar la paginación de datos, que resulta esencial si sus servicios REST exponen conjuntos de datos de gran tamaño.

Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios