REST for the Traveling Salesman: Using Google Data on Salesforce.com

Lane LiaBraaten, Google Developer Programs
Novembre 2007

Introduzione

Salesforce.com e Google ospitano applicazioni "Software as a Service" popolari ed entrambe le organizzazioni forniscono API che consentono agli sviluppatori di accedere ai grandi archivi di dati che alimentano queste applicazioni. Le cose iniziano a farsi interessanti quando combiniamo entrambi i set di API. G Suite continua a essere utilizzata sempre più spesso in ambito aziendale e Salesforce.com ha creato una piattaforma completa per la creazione di applicazioni aziendali personalizzate, quindi ci sono molte opportunità per gli sviluppatori (cioè per te) di combinare la potenza di Google e Salesforce.com.

Questo articolo ti mostrerà come utilizzare le API Google Data RESTful per iniziare a creare mashup aziendali, anche se hai appena iniziato a utilizzare la piattaforma Salesforce.com o il protocollo Google Data. Ti aiuterò a configurare l'ambiente di sviluppo, a installare un mashup esistente di Salesforce.com e Google e poi a scriverne uno tuo.

Ciao, Salesforce.com!

Se sei un principiante di Salesforce.com come me, devi iniziare registrandoti per un account sviluppatore su ADN, Apex Developer Network. L'account sviluppatore ti offre un account Salesforce.com completo, oltre all'accesso alla wiki di Apex e ai forum di discussione.

Dopodiché, dovrai scaricare Apex Toolkit per Eclipse. Il toolkit richiede Java 1.5 e Eclipse 3.2.2 o versioni successive. Se hai familiarità con Eclipse, il sito di aggiornamento software per il toolkit è http://www.adnsandbox.com/eclipsetoolkit/10.0/. Se non hai familiarità con i plug-in Eclipse o se si verifica un problema durante l'installazione, la wiki di Apex include istruzioni di installazione dettagliate.

Una volta installato il toolkit, puoi accedere ai contenuti della guida di Apex integrati nel sistema di guida di Eclipse. In Eclipse, vai a Guida | Contenuti della Guida | Apex Toolkit for Eclipse per visualizzare questi contenuti. Una delle risorse di assistenza è un tutorial di avvio rapido che ti mostrerà come creare un nuovo progetto e aggiungere S-Control, classi e trigger. Se non hai mai lavorato con il codice Apex, ti consigliamo di seguire questo tutorial e creare un progetto Apex prima di procedere.

Esportare eventi in Google Calendar

Ron Hess ha scritto un'applicazione Google Calendar Mash-up che consente di esportare eventi da Salesforce.com a Google Calendar. Ron ha anche scritto un articolo che spiega come funziona il suo mashup. L'applicazione Fogli Google che ti mostrerò come creare in un secondo momento è modellata sul mashup di Google Calendar di Ron. Grazie, Ron.

Se sei un utente esperto di Salesforce.com, probabilmente puoi integrare e utilizzare l'applicazione Google Calendar di Ron senza istruzioni. All'inizio ho avuto bisogno di un po' di aiuto, quindi ecco cosa ho fatto per vedere l'app di Ron in azione.

  1. Installa l'applicazione:
    • Vai alla pagina Google Calendar Mash-up e fai clic su Scarica.
    • Inserisci le credenziali dell'ADN e fai clic su Continua.
    • Leggi i Termini e condizioni e fai clic su Continua.
    • Fai clic su Avanti nella pagina "Esamina i contenuti del pacchetto".
    • Scegli un livello di sicurezza e fai clic su Avanti.
    • Fai clic su Installa.
  2. Configura il proxy AJAX di Salesforce.com
    • Nel menu "Configurazione amministrazione", fai clic su Controlli di sicurezza | Impostazioni sito remoto.
    • Fai clic su Nuovo sito remoto.
    • Inserisci Google come "Nome sito remoto" e utilizza https://www.google.com per l'"URL sito remoto".
    • Fai clic su Salva.
  3. Aggiungi il pulsante "Aggiungi a Google" alla pagina dei dettagli dell'evento:
    • Nel menu "Configurazione app", fai clic su Personalizza | Attività | Layout pagine evento.
    • Fai clic su Modifica nella riga "Layout evento".
    • Fai doppio clic sull'area "Pulsanti della pagina dei dettagli".
    • Evidenzia "Aggiungi a Google" e fai clic sulla freccia destra (>) per aggiungere il pulsante.
    • Fai clic su OK.
    • Fai clic su Salva nella pagina "Proprietà layout pagina".
  4. Esportare un evento
    • Fai clic su Home in alto a sinistra per visualizzare il calendario.
    • Se non hai eventi, fai clic su Nuovo evento per crearne uno.
    • Fai clic su un evento per visualizzare la pagina dei dettagli dell'evento.
    • Fai clic sul pulsante Aggiungi a Google.
    • Fai clic su Ok nell'avviso JavaScript.
    • Accedi con i tuoi nome utente e password di Google.
    • Fai clic su Concedi l'accesso per concedere all'applicazione Salesforce l'accesso in scrittura al tuo Google Calendar.
    • Visualizzare l'evento in Google Calendar

Creare un'applicazione Fogli Google

Ok, probabilmente ti sei stancato di navigare nelle pagine di Salesforce.com e sei pronto per scrivere del codice. Riavvia Eclipse e vedrai che il progetto Apex che hai creato ora contiene i controlli S per l'app Google Calendar di Ron. Questo perché Apex Toolkit per Eclipse si sincronizza costantemente con Salesforce.com. Non è fantastico?

Puoi creare la tua app Google Data riutilizzando alcune funzionalità del mashup di Google Calendar, come i controlli di autenticazione. Nel resto di questa sezione, ti mostrerò come creare un'app che esporta i tuoi contatti Salesforce.com in un foglio di lavoro Google.

Pubblicazione di un semplice S-Control

Un S-Control è un file ospitato da Salesforce.com ed eseguito nei browser web quando gli utenti accedono alla tua applicazione. Un S-Control può contenere qualsiasi tipo di contenuto che puoi visualizzare o eseguire in un browser web, ad esempio HTML, CSS o JavaScript.

In un mashup di Salesforce.com e Google ci sono diverse parti mobili, quindi la prima cosa che ho fatto è stata aggiungere un pulsante "Esporta in Google" alla pagina dell'elenco dei contatti che richiama un semplice S-Control, solo per assicurarmi che tutto il sistema fosse corretto prima di immergermi nel JavaScript.

Nel progetto Apex, fai clic con il tasto destro del mouse sulla cartella "S-Controls" e scegli Apex | New S-Control. Assegna al nuovo S-Control un'etichetta e un nome export_contacts, lascia il tipo HTML personalizzato e fai clic su Fine.

Il nuovo S-Control conterrà un file HTML di base. Aggiungerai un po' di JavaScript nell'intestazione <head>, ma puoi compilare prima il corpo <body>, in modo che l'utente abbia qualcosa da vedere mentre i contatti vengono esportati. Copia questo codice HTML nel corpo del tuo S-Control per mostrare i "puntini di attesa" e un logo di Fogli Google:

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

Ora puoi pubblicare il controllo personalizzato e configurare un pulsante che lo richiami.

  1. Utilizza Eclipse per pubblicare il file S-Control:
    • Fai clic con il tasto destro del mouse sul progetto Apex e seleziona Apex | Synchronize with Salesforce (Apex | Sincronizza con Salesforce).
    • Trova il nuovo S-Control nell'albero delle directory, fai clic con il tasto destro del mouse e scegli Esegui l'override del controllo remoto e pubblica sul server.
    • Se non riesci a trovare il tuo S-Control, è possibile che Apex Toolkit lo abbia già caricato, ma è consigliabile utilizzare la prospettiva di sincronizzazione per assicurarsi che sul server sia in esecuzione il codice più recente.
  2. Utilizza l'interfaccia utente di Salesforce.com per definire un pulsante che richiamerà questo S-Control:
    • Nel menu "Configurazione app", fai clic su Personalizza | Contatti | Pulsanti e link.
    • Nella sezione "Pulsanti e link personalizzati", fai clic su Nuovo.
    • Inserisci Export to Google per l'etichetta e mantieni Export_to_Google come nome.
    • Scegli "Pulsante elenco" come tipo di visualizzazione.
    • Scegli "Custom S-Control" come origine di contenuti.
    • Scegli "Visualizza nella finestra esistente con barra laterale" come comportamento.
    • Seleziona "export_contacts" dal menu Controlli personalizzati S.
  3. Aggiungi il pulsante all'elenco dei contatti:
    • Nel menu "Configurazione app", fai clic su Personalizza | Contatti | Layout di ricerca.
    • Fai clic su Modifica nella riga "Visualizzazione elenco contatti".
    • Evidenzia "Esporta su Google" e fai clic sulla freccia destra (>) per aggiungere il pulsante.
    • Fai clic su Salva.
  4. Fai un giro di prova:
    • Fai clic sulla scheda Contatti.
    • Seleziona "Tutti i contatti" come visualizzazione e fai clic su Vai.
    • Fai clic sul nuovo pulsante Esporta in Google.
    • Guarda i "puntini di attesa", ma non aspettarti che succeda altro.

Interagire con Fogli Google

Se esamini il codice sorgente del mashup di Google Calendar, vedrai che il file gcal_snippet.scf contiene un'astrazione per un server Google Calendar. Per interagire con Fogli Google, devi creare un file simile per un server Fogli Google. Ho riutilizzato il codice di Ron Hess per utilizzare il proxy AJAX di Salesforce.com e l'autenticazione con Google AuthSub e ho sostituito la funzione che scrive gli eventi in Google Calendar con una che scrive le informazioni in Fogli Google. Il codice sorgente completo di questo file è disponibile in gspreadsheet_snippet.scf.

Poi ho aggiunto JavaScript al controllo S export_contacts.scf per eseguire query su Salesforce.com per i dati di contatto e scriverli in un foglio di lavoro Google. Estrarre i dati da Salesforce.com è facile. Basta creare una query e fornire una funzione di callback da eseguire quando vengono restituiti i dati. Ad esempio:

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

Una volta ottenute le informazioni di contatto da Salesforce.com, devi capire dove esportarle. Nel protocollo Google Data RESTful, ogni foglio di lavoro può essere identificato da un URL univoco. Puoi ottenere l'elenco dei fogli di lavoro di un utente (e gli URL associati) eseguendo una query sull'URL del metafeed: http://spreadsheets.google.com/feeds/spreadsheets/private/full. Il seguente metodo scorre questi fogli di lavoro alla ricerca di un foglio di lavoro con un titolo specifico. Quando trova il foglio di lavoro corretto, recupera prima l'elenco dei fogli di lavoro, quindi restituisce l'URL del feed delle celle per il primo foglio di lavoro.

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

Per ulteriori informazioni sui feed disponibili nell'API Google Spreadsheets Data, consulta la Guida di riferimento.

La funzione queryCallback utilizza il metodo getCellFeedUrl per trovare l'URL del feed delle celle necessario per inviare richieste di aggiornamento delle celle, quindi scrive i dati di contatto una cella alla volta.

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
}

Il metodo updateCell esiste nel controllo S gspreadsheet_snippet.scf. Il metodo recupera l'URL di modifica della cella nella riga e nella colonna specificate, quindi invia un messaggio HTTP PUT che contiene la rappresentazione dei dati Google della cella aggiornata:

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

Per saperne di più su come aggiornare le celle con l'API Google Sheets Data, consulta la Guida per gli sviluppatori.

L'API Google Spreadsheets Data utilizza il sottodominio https://spreadsheets.google.com, quindi prima che il codice precedente funzioni, devi configurare il server proxy AJAX di Salesforce.com e aggiungere https://spreadsheets.google.com.

Dovrai anche andare su Documenti Google e creare un nuovo foglio di lavoro per contenere i dati. Assicurati di salvarlo come Contatti Salesforce.com.

Una volta caricati questi S-Control, potrai esportare i tuoi dati di contatto in un foglio di lavoro Google. E se invece volessi fare il contrario? Con le nuove conoscenze delle API Salesforce.com e Google Data, puoi anche scrivere del codice per importare le informazioni di contatto da Fogli Google in Salesforce.com.

Conclusione

Questo articolo ha appena scalfito la superficie, ma ora che hai preso confidenza con la piattaforma Salesforce.com e le API di Google Data, pensa a tutte le applicazioni che puoi scrivere per sfruttare questi potenti sistemi. La famiglia di API Google Data è in continua crescita, esponendo più informazioni da sfruttare nelle tue applicazioni, e la piattaforma Salesforce.com offre molti strumenti utili che non sono stati trattati in questo articolo. Non vedo l'ora di vedere il tuo prossimo mashup aziendale su AppExchange.

Buona programmazione!

Risorse