REST para el vendedor de viajes: Cómo usar los datos de Google en Salesforce.com

Lane LiaBraaten, Google Developer Programs
Noviembre de 2007

Introducción

Salesforce.com y Google alojan las populares aplicaciones "Software como servicio" y ambas organizaciones proporcionan API que les permiten a los desarrolladores acceder a los grandes almacenes de datos que potencian estas aplicaciones, y las cosas se ponen interesantes cuando combinamos ambos conjuntos de API. G Suite se sigue utilizando cada vez más en el entorno empresarial y Salesforce.com compiló una plataforma extensa para crear aplicaciones empresariales personalizadas, por lo que los desarrolladores (es decir, usted) tienen muchas oportunidades de combinar la potencia de Google y Salesforce.com.

En este artículo, se explica cómo usar las RESTful API de datos de Google para comenzar a compilar aplicaciones empresariales, incluso si recién comienza con la plataforma Salesforce.com o el protocolo de datos de Google. Lo ayudaré a configurar su entorno de desarrollo, a instalar un mashup existente de Salesforce.com y Google y, luego, a escribir el suyo.

¡Hola, Salesforce.com!

Si es un novato de Salesforce.com como yo, primero deberá registrarse para obtener una cuenta de desarrollador en ADN, la red para desarrolladores de Apex. La cuenta de desarrollador le brinda una cuenta completa de Salesforce.com, además de acceso a la wiki de Apex y a los paneles de discusión.

A continuación, deberás obtener el kit de herramientas Apex para Eclipse. El kit de herramientas requiere Java 1.5 y Eclipse 3.2.2, o una versión mejor. Si conoces los aspectos de Eclipse, el sitio de actualización de software del kit de herramientas es http://www.adnsandbox.com/eclipsetoolkit/10.0/. Si no estás familiarizado con los complementos de Eclipse o si algo sale mal durante la instalación, la wiki de Apex incluye instrucciones de instalación detalladas.

Una vez que el kit de herramientas esté instalado, puedes acceder al contenido de ayuda de Apex que está integrado en el sistema de ayuda de Eclipse. En Eclipse, ve a Help | Contents Help | Apex Toolkit for Eclipse para ver el contenido. Uno de los recursos de ayuda es un instructivo de inicio rápido que te mostrará cómo crear un proyecto nuevo y agregar controles S, clases y activadores. Si nunca has trabajado con el código Apex, deberías revisar este instructivo y crear un proyecto de Apex antes de continuar.

Exportando eventos al Calendario de Google

Ron Hess escribió una aplicación para Calendario de Google que le permite exportar eventos de Salesforce.com a Calendario de Google. Ron también escribió un artículo que explica cómo funciona su mashup. La aplicación Google Spreadsheets que les mostraré cómo crear más tarde se basa en la fusión del Calendario de Google de Ron. Gracias, Ron.

Si eres un usuario avanzado de Salesforce.com, probablemente puedas integrar y utilizar la aplicación Calendario de Google de Ron sin ninguna instrucción. Primero necesitaba un poco de ayuda, así que esto es lo que hice para ver la app de Ron en acción.

  1. Instala la aplicación:
    • Ve a la página Combinación de Calendario de Google y haz clic en Obtener ahora.
    • Ingresa tus credenciales de ADN y haz clic en Continuar.
    • Lee los Términos y Condiciones y, luego, haz clic en Continuar.
    • Haz clic en Next en la página "Examina el contenido del paquete".
    • Elige un nivel de seguridad y haz clic en Siguiente.
    • Haz clic en Install.
  2. Configurar el proxy AJAX de Salesforce.com
    • En el menú "Configuración de administración", haz clic en Controles de seguridad | Configuración del sitio remoto.
    • Haz clic en Nuevo sitio remoto.
    • Ingresa Google como el "Nombre del sitio remoto" y para la "URL del sitio remoto" usa https://www.google.com.
    • Haz clic en Guardar.
  3. Agrega el botón "Agregar a Google" a la página Detalles del evento:
    • En el menú "App Setup", haz clic en Customize | Activities | Event Page Layouts.
    • Haz clic en Editar en la fila "Diseño del evento".
    • Haz doble clic en el área "Botones de la página de detalles".
    • Destaca "Agregar a Google" y haz clic en la flecha hacia la derecha (>) para agregar el botón.
    • Haz clic en OK.
    • Haga clic en Guardar en la página "Propiedades de diseño de página".
  4. Exporta un evento.
    • Haga clic en Página principal en la esquina superior izquierda para ver el calendario.
    • Si no tienes ningún evento, haz clic en Evento nuevo para crear uno.
    • Haz clic en un evento para ver la página de detalles del evento.
    • Haz clic en el botón Agregar a Google.
    • Haga clic en Aceptar en la alerta de JavaScript.
    • Accede con tu nombre de usuario y contraseña de Google.
    • Haga clic en Otorgar acceso para otorgar a la aplicación de Salesforce el permiso de escritura en su Calendario de Google.
    • Ver el evento en tu Calendario de Google

Cómo crear una aplicación de Google Spreadsheets

Es probable que esté cansado de hacer clic en las páginas de Salesforce.com y esté listo para escribir código. Vuelve a activar Eclipse y verás que el proyecto Apex que creaste ahora contiene los controles S para la aplicación Calendario de Google de Ron. Esto se debe a que el kit de herramientas de Apex para Eclipse se sincroniza constantemente con Salesforce.com.

Puedes compilar tu propia app de datos de Google reutilizando algunas de las funciones de la combinación de calendarios de Google, como los controles de autenticación. En el resto de esta sección, le mostraré cómo crear una aplicación que exporte sus contactos de Salesforce.com a una hoja de cálculo de Google.

Publicación de un S-Control simple

Un S-Control es un archivo alojado por Salesforce.com que se ejecuta en navegadores web cuando los usuarios acceden a su aplicación. Un S-Control puede incluir cualquier tipo de contenido que se pueda mostrar o ejecutar en un navegador web, como HTML, CSS o JavaScript.

En una combinación de Salesforce.com y Google, hay varias partes que se mueven. Lo primero que hice fue agregar un botón "Exportar a Google" a la página de la lista de contactos que invoca un simple control S-justo para asegurarme de que toda la plomería sea correcta antes de trabajar en JavaScript.

En tu proyecto Apex, haz clic con el botón derecho en la carpeta "S-Controls" y selecciona Apex | New S-Control. Agregue una etiqueta y un nombre a export_contacts al nuevo S-Control; deje el tipo en HTML personalizado y haga clic en Finalizar.

El nuevo S-Control contendrá un archivo HTML base. Agregará un montón de JavaScript en el <head>, pero puede completar el <body> primero, de modo que haya algo para mostrar al usuario mientras se exportan los contactos. Copia este código HTML en el cuerpo de tu S-Control para que aparezca "Puntos de espera" y el logotipo de Google Spreadsheets:

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

Ahora puedes publicar el S-Control y configurar un botón que lo invoque.

  1. Usa Eclipse para publicar el archivo de S-Control:
    • Haz clic con el botón derecho en tu proyecto Apex y selecciona Apex | Synchronize with Salesforce.
    • Busca tu S-Control nuevo en el árbol de directorios, haz clic con el botón derecho en él y selecciona la opción para anular el control remoto y publicar en el servidor.
    • Si no encuentras tu S-Control, es posible que el kit de herramientas Apex ya lo haya subido, pero es una buena idea utilizar la perspectiva de sincronización para asegurarte de que el código más reciente se esté ejecutando en el servidor.
  2. Utilice la IU de Salesforce.com para definir un botón que invoque este S-Control:
    • En el menú "App Setup", haz clic en Customize | Contacts | Buttons and Links.
    • En la sección "Botones y vínculos personalizados", haz clic en Nuevo.
    • Ingresa Exportar a Google para la etiqueta y mantén Exportar_a_Google como nombre.
    • Elige "Botón de lista" como el tipo de visualización.
    • Elige "Control personalizado de S" como fuente del contenido.
    • Elige “Mostrar en una ventana existente con la barra lateral” como comportamiento.
    • Selecciona "export_contacts" en el menú Custom S-Controls.
  3. Agrega el botón a la lista de contactos:
    • En el menú "App Setup", haga clic en Customize | Contacts | Search Layouts.
    • Haga clic en Editar en la fila de la "Vista de lista de contactos".
    • Destaca "Exportar a Google" y haz clic en la flecha hacia la derecha (>) para agregar el botón.
    • Haz clic en Guardar.
  4. Realice la prueba:
    • Haz clic en la pestaña Contactos.
    • Selecciona "Todos los contactos" como vista y haz clic en Ir.
    • Haz clic en el nuevo botón Exportar a Google.
    • Mira el video "waiting_dots", pero no esperes que suceda nada más.

Interacción con hojas de cálculo de Google

Si observas la fuente de la combinación de Calendario de Google, verás que el archivo gcal_snippet.scf contiene una abstracción de un servidor de Calendario de Google. Para interactuar con Google Spreadsheets, deberás crear un archivo similar para un servidor de Google Spreadsheets. Reutilicé el código de Ron Hess para usar el proxy AJAX de Salesforce.com y autenticar con Google AuthSub y reemplacé la función que escribe eventos en Calendario de Google con una que escribe información en Hojas de cálculo de Google. La fuente completa para este archivo está disponible en gspreadsheet_snippet.scf.

Luego, agregué JavaScript al S-Control export_contacts.scf para consultar Salesforce.com sobre la información de contacto y escribirla en una hoja de cálculo de Google. Obtener datos de Salesforce.com es fácil. Solo debes crear una consulta y proporcionar una función de devolución de llamada para que se ejecute cuando se muestran los datos. Por ejemplo:

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

Una vez que tiene la información de contacto de Salesforce.com, debe saber dónde exportarla. En el protocolo RESTful de datos de Google, cada hoja de cálculo se puede identificar mediante una URL única. Para obtener la lista de las hojas de cálculo de un usuario (y las URL asociadas), consulta la URL del metafeed http://spreadsheets.google.com/feeds/spreadsheets/private/full. El siguiente método itera en estas hojas de cálculo y busca una hoja de cálculo con un título específico. Cuando encuentra la hoja de cálculo correcta, primero obtiene la lista de hojas de cálculo y, luego, muestra la URL del feed de celdas de la primera hoja de trabajo.

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

Puede encontrar más información sobre los feeds disponibles en la API de datos de Google Spreadsheets en la Guía de referencia.

La función queryCallback usa el método getCellFeedUrl a fin de buscar la URL del feed de celdas necesaria para enviar solicitudes de actualización de celdas y, luego, escribe la información de contacto de a una celda por vez.

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
}

El método updateCell existe en el control S de gspreadsheet_snippet.scf. El método obtiene la URL de edición de la celda en la fila y la columna determinadas y, luego, envía un mensaje HTTP PUT que contiene la representación de datos de Google de la celda actualizada:

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

Para obtener más información sobre cómo actualizar celdas con la API de datos de Hojas de cálculo de Google, consulta la Guía para desarrolladores.

La API de datos de Hojas de cálculo de Google utiliza el subdominio https://spreadsheets.google.com, por lo que, antes de que funcione el código anterior, debe configurar el servidor proxy AJAX de Salesforce.com y agregar https://spreadsheets.google.com.

También deberá ir a Documentos de Google y crear una nueva hoja de cálculo para guardar los datos. Asegúrese de guardarlo como Contactos de Salesforce.com.

Una vez que subas estos controles S, podrás exportar tu información de contacto a una hoja de cálculo de Google. ¿Y de la otra forma? Con sus nuevos conocimientos de Salesforce.com y las API de datos de Google, también puede escribir código para importar información de contacto de Google Spreadsheets en Salesforce.com.

Conclusión

Apenas se explica el tema en este artículo, pero ahora que ya está al día con la plataforma Salesforce.com y las API de datos de Google, piense en todas las aplicaciones que puede escribir para aprovechar estos poderosos sistemas. La familia de datos de API de Google crece constantemente, lo que expone más información para que aproveche en sus aplicaciones. La plataforma de Salesforce.com ofrece muchas herramientas útiles que no se trataron en este artículo. Buscaré tu próximo mashup empresarial en AppExchange.

¡Feliz codificación!

Recursos