旅遊銷售商的 REST:在 Salesforce.com 上使用 Google 資料

Lane LiaBraaten,Google Developers 計劃
2007 年 11 月

簡介

Salesforce.com 和 Google 皆代管熱門的「軟體式服務」應用程式,而這兩個組織都提供 API,讓開發人員能夠存取用於提供這些應用程式的大量資料。當我們結合這兩組 API 後,一切就變得越來越有趣。企業服務日益普遍使用 G Suite,Salesforce.com 也打造了強大的平台,可用於建立自訂業務應用程式,因此開發人員 (您) 能擁有許多機會,整合 Google 和 Salesforce.com 的強大功能。

本文將示範如何使用符合 REST 樣式的 Google Data API 開始建立企業模擬圖,即使您剛開始使用 Salesforce.com 平台或 Google 資料通訊協定,亦然。我會協助您設定開發環境、安裝現有的 Salesforce.com 和 Google mashup,然後自行編寫。

Salesforce.com,您好!

如果您是 Salesforce.com 新手,必須先在 Apex 開發人員聯播網 ADN 上申請開發人員帳戶。這個開發人員帳戶提供了功能完整的 Salesforce.com 帳戶,並可使用 Apex 維基討論版

接下來,您需要取得 Eclipse 的 Apex 工具包。工具包需要 Java 1.5Eclipse 3.2.2 或更高版本。如果您熟悉 Eclipse,工具包的軟體更新網站就是 http://www.adnsandbox.com/eclipsetoolkit/10.0/。如果您不熟悉 Eclipse 外掛程式,或是在安裝過程中遇到任何問題,Apex 維基則提供詳細安裝操作說明

工具包安裝完畢後,您可以存取已整合至 Eclipse 說明系統中的 Apex 說明內容。在 Eclipse 中,前往 Help | Help Contents | Apex Toolkit for Eclipse 以檢視此內容。其中一項說明資源是快速入門導覽課程,說明如何建立新的專案及新增 S-Controls、類別和觸發條件。如果您之前並未使用過 Apex 程式碼,請先逐步完成本教學課程並建立 Apex 專案,然後再繼續進行。

正在將活動匯出至 Google 日曆

Ron Hess 撰寫了 Google 日曆混搭應用程式,可讓您將 Salesforce.com 的活動匯出到 Google 日曆。Ron 也撰寫了一篇文章,說明他的混搭功能的運作方式。在我看來,Google 試算表應用程式是用 Ron 的 Google 日曆混搭後製作而成的。謝謝 Ron!

如果您是 Salesforce.com 的進階使用者,您可以整合使用 Ron 的「Google 日曆」應用程式,完全不必遵循任何指示。我一開始需要一些協助,所以我想看一下 Ron 應用程式的實際運作情形。

  1. 安裝應用程式:
    • 前往 Google 日曆混搭頁面,然後按一下 [立即取得]
    • 輸入您的 ADN 憑證,然後按一下 [繼續]
    • 詳閱《條款及細則》,然後按一下 [繼續]。
    • 在「檢查套件內容」頁面中按一下 [下一步]
    • 選擇安全等級,然後點選 [下一步]
    • 按一下「Install」
  2. 設定 Salesforce.com AJAX Proxy
    • 在「管理設定」選單中,按一下 [安全性控制 | 遠端網站設定]
    • 按一下 [新增遠端網站]
    • 在「Remote Site Name」欄位輸入 Google,「Remote Site URL」則輸入 https://www.google.com
    • 按一下「儲存」
  3. 在「活動詳細資料」頁面中新增 [新增至 Google] 按鈕:
    • 在 [應用程式設定] 選單中,按一下 [自訂 | 活動 | 活動頁面版面配置]
    • 在「事件版面配置」列中,按一下 [編輯]。
    • 按兩下 [詳細資料頁面] 按鈕。
    • 醒目顯示 [新增至 Google],然後按一下向右箭頭 (>) 即可新增按鈕。
    • 按一下「OK」
    • 在「頁面版面配置屬性」頁面中,按一下 [儲存]
  4. 匯出事件
    • 按一下左上方的 [首頁],即可查看您的日曆。
    • 如果您沒有任何活動,請按一下 [新增活動] 即可建立活動。
    • 點選事件即可查看「活動詳細資料」網頁。
    • 按一下 [新增至 Google] 按鈕。
    • 按一下 JavaScript 快訊中的 [確定]
    • 使用你的 Google 使用者名稱和密碼登入帳戶。
    • 按一下 [授予存取權],將 SalesForce 應用程式的寫入權限授予您的 Google 日曆。
    • 前往 Google 日曆查看活動

建立 Google 試算表應用程式

您很可能已經點選 Salesforce.com 頁面,然後開始撰寫程式碼了。再次啟動 Eclipse,您會發現您建立的 Apex 專案現在已包含 Ron 的 Google 日曆應用程式的 S-Controls。這是因為 Eclipse 的 Apex Toolkit 會持續與 Salesforce.com 保持同步,太棒了!

您可以運用 Google 日曆混搭功能 (例如驗證控制項) 中的某些功能,建立自己的 Google 資料應用程式。在本節的其餘部分中,我將說明如何製作應用程式,將 Salesforce.com 聯絡人匯出至 Google 試算表。

發布簡單的 S-Control

S-Control 是由 Salesforce.com 代管的檔案,會在使用者存取您的應用程式時,透過網路瀏覽器執行。S-Control 可包含可在網路瀏覽器中顯示或執行的任何內容類型,例如 HTML、CSS 或 JavaScript。

Salesforce.com 和 Google 混搭中有許多移動部分,所以我先在聯絡人清單頁面中加入 [匯出到 Google] 按鈕,這個程式會叫用一個簡單的 S-Control- Just: 確保所有水電維修都是正確的。

在您的 Apex 專案中,在「S-Controls」資料夾上按一下滑鼠右鍵,然後選擇 [Apex | New S-Control]。為新的 S-Control 輸入「export_contacts」的標籤和名稱,將類型保留為 [自訂 HTML],然後按一下 [完成]

新的 S-Control 會包含一個基本架構 HTML 檔案。您將在 <head> 中新增許多 JavaScript,但您可以先填寫 <body>,這樣在匯出聯絡人時,就能向使用者顯示。將此 HTML 複製到 S-Control 主體中,以顯示「等候點」和 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>

現在您可以發布 S-Control,並設定可叫用該控制項的按鈕。

  1. 使用 Eclipse 發布 S-Control 檔案:
    • 在 Apex 專案上按一下滑鼠右鍵,然後選取 [Apex | Synchronize with Salesforce]
    • 在目錄樹狀結構中找到新的 S-Control,在上面按一下滑鼠右鍵,然後選擇 [Override 與 Remote to server] (覆寫遠端發布並發布至伺服器)
    • 如果您找不到自己的 S-Control,「Apex 工具包」可能已經為您上傳了 Spex 工具包,但建議您使用同步觀點,以確保在伺服器上執行最新的程式碼。
  2. 使用 Salesforce.com UI 定義可叫用這個 S-Control 的按鈕:
    • 在「應用程式設定」選單中,按一下 [自訂 | 聯絡人 | 按鈕和連結]
    • 在「自訂按鈕和連結」部分中,按一下 [新增]
    • 輸入 Export to Google 做為標籤,並將「Export_to_Google」保留為名稱。
    • 選擇 [清單按鈕] 做為顯示類型。
    • 選擇「Custom S-Control」做為內容來源。
    • 選擇 [在現有側欄中顯示側欄] 做為「行為」。
    • 從 [自訂 S-Control] 選單中選取 [export_contacts]。
  3. 將按鈕新增到聯絡人清單:
    • 在「應用程式設定」選單中,按一下 [自訂 | 聯絡人 | 搜尋版面配置]
    • 按一下 [聯絡人清單檢視] 列中的 [編輯]。
    • 醒目顯示 [匯出至 Google],然後按一下向右箭頭 (>) 即可新增按鈕。
    • 按一下「儲存」
  4. 以試駕的方式進行下列操作:
    • 按一下 [聯絡人] 標籤。
    • 選取 [所有聯絡人] 做為檢視模式,然後按一下 [開始!]
    • 按一下新的 [匯出至 Google] 按鈕。
    • 請觀看「waiting_dots」,但不要期望其他事件發生。

與 Google 試算表互動

查看 Google 日曆混搭來源的來源時,您會發現 gcal_snippet.scf 檔案含有 Google 日曆伺服器的抽象層。如要與 Google 試算表互動,您必須為 Google 試算表伺服器建立類似的檔案。我重複使用 Ron Hess 的程式碼,以便使用 Salesforce.com AJAX Proxy 進行驗證,並利用 Google AuthSub 進行驗證,並取代將活動寫入 Google 日曆的函式 (改為將資訊寫入 Google 試算表)。如需這個檔案的完整來源,請參閱 gspreadsheet_snippet.scf

接著,我在 export_contacts.scf S-Control 中新增 JavaScript,以便查詢 Salesforce.com 中的聯絡資訊並寫入 Google 試算表。從 Salesforce.com 取得資料十分簡單。只要建構查詢並提供回呼函式,即可在資料傳回時執行。例如:

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

從 Salesforce.com 取得聯絡資訊後,您必須找出匯出項目的位置。在符合 REST 樣式的 Google Data 通訊協定中,每個試算表都可由一個專屬網址識別。您可以查詢中繼資料資訊提供網址,取得使用者的試算表 (以及相關聯的網址):http://spreadsheets.google.com/feeds/spreadsheets/private/full。下列方法會疊代這些試算表,請尋找具有特定標題的試算表。找到正確的試算表後,系統會先取得工作表清單,然後傳回第一個工作表的儲存格動態饋給網址。

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

如要進一步瞭解 Google Sheets Data API 提供的動態饋給,請參閱參考指南

queryCallback 函式使用 getCellFeedUrl 方法,找出傳送儲存格更新要求所需的儲存格動態饋給網址,然後一次將聯絡資訊寫入儲存格。

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
}

gspreadsheet_snippet.scf S-Control 中已有 updateCell 方法。這個方法會取得特定列和欄的儲存格編輯網址,然後傳送 HTTP PUT 訊息,其中包含更新後儲存格的 Google 資料表示法:

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

如要進一步瞭解如何使用 Google Sheets Data API 更新儲存格,請參閱《開發人員指南》。

Google Sheets 資料 API 使用 https://spreadsheets.google.com 子網域,因此在上述程式碼生效前,您必須設定 Salesforce.com AJAX Proxy 伺服器並新增 https://spreadsheets.google.com

您也需要前往 Google 文件,並建立新的試算表來保存資料。請務必將帳戶儲存為 Salesforce.com 聯絡人

在您上傳這些 S-Controls 後,即可將您的聯絡資訊匯出至 Google 試算表。可以再說一次嗎?只要您掌握 Salesforce.com 和 Google Data API 的新知識,只要撰寫一些程式碼,即可將 Google 試算表中的聯絡資訊匯入 Salesforce.com。

結語

本文幾乎已經刮目相看,但是現在您已更迅速掌握 Salesforce.com 平台和 Google Data API 的運作原理,所以不妨考慮編寫可運用這些強大系統的所有應用程式。Google Data API 系列仍在不斷增加,提供更多實用的資訊,可讓您在應用程式中運用。另外,Salesforce.com 平台也提供了本文中未涵蓋的許多實用工具。我會在 AppExchange 尋找您的下一個企業組合。

祝您一切順利!

資源