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.5 和 Eclipse 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 應用程式的實際運作情形。
- 安裝應用程式:
- 前往 Google 日曆混搭頁面,然後按一下 [立即取得]。
- 輸入您的 ADN 憑證,然後按一下 [繼續]。
- 詳閱《條款及細則》,然後按一下 [繼續]。
- 在「檢查套件內容」頁面中按一下 [下一步]。
- 選擇安全等級,然後點選 [下一步]。
- 按一下「Install」。
- 設定 Salesforce.com AJAX Proxy
- 在「管理設定」選單中,按一下 [安全性控制 | 遠端網站設定]。
- 按一下 [新增遠端網站]。
- 在「Remote Site Name」欄位輸入 Google,「Remote Site URL」則輸入 https://www.google.com。
- 按一下「儲存」。
- 在「活動詳細資料」頁面中新增 [新增至 Google] 按鈕:
- 在 [應用程式設定] 選單中,按一下 [自訂 | 活動 | 活動頁面版面配置]。
- 在「事件版面配置」列中,按一下 [編輯]。
- 按兩下 [詳細資料頁面] 按鈕。
- 醒目顯示 [新增至 Google],然後按一下向右箭頭 (>) 即可新增按鈕。
- 按一下「OK」。
- 在「頁面版面配置屬性」頁面中,按一下 [儲存]。
- 匯出事件
- 按一下左上方的 [首頁],即可查看您的日曆。
- 如果您沒有任何活動,請按一下 [新增活動] 即可建立活動。
- 點選事件即可查看「活動詳細資料」網頁。
- 按一下 [新增至 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,並設定可叫用該控制項的按鈕。
- 使用 Eclipse 發布 S-Control 檔案:
- 在 Apex 專案上按一下滑鼠右鍵,然後選取 [Apex | Synchronize with Salesforce]。
- 在目錄樹狀結構中找到新的 S-Control,在上面按一下滑鼠右鍵,然後選擇 [Override 與 Remote to server] (覆寫遠端發布並發布至伺服器)。
- 如果您找不到自己的 S-Control,「Apex 工具包」可能已經為您上傳了 Spex 工具包,但建議您使用同步觀點,以確保在伺服器上執行最新的程式碼。
- 使用 Salesforce.com UI 定義可叫用這個 S-Control 的按鈕:
- 在「應用程式設定」選單中,按一下 [自訂 | 聯絡人 | 按鈕和連結]。
- 在「自訂按鈕和連結」部分中,按一下 [新增]。
- 輸入 Export to Google 做為標籤,並將「Export_to_Google」保留為名稱。
- 選擇 [清單按鈕] 做為顯示類型。
- 選擇「Custom S-Control」做為內容來源。
- 選擇 [在現有側欄中顯示側欄] 做為「行為」。
- 從 [自訂 S-Control] 選單中選取 [export_contacts]。
- 將按鈕新增到聯絡人清單:
- 在「應用程式設定」選單中,按一下 [自訂 | 聯絡人 | 搜尋版面配置]。
- 按一下 [聯絡人清單檢視] 列中的 [編輯]。
- 醒目顯示 [匯出至 Google],然後按一下向右箭頭 (>) 即可新增按鈕。
- 按一下「儲存」。
- 以試駕的方式進行下列操作:
- 按一下 [聯絡人] 標籤。
- 選取 [所有聯絡人] 做為檢視模式,然後按一下 [開始!]。
- 按一下新的 [匯出至 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 尋找您的下一個企業組合。
祝您一切順利!