2007 年 11 月
简介
Salesforce.com 和 Google 都托管热门的“软件即服务”应用,这两个组织都提供了 API,支持开发者访问为这些应用提供支持的大型数据存储。结合使用这两种 API 后,事情就开始变得有趣起来。在企业环境中,G Suite 的使用越来越广泛,Salesforce.com 构建了广泛的自定义业务应用平台,因此开发者(即您!)有很多机会来结合 Google 和 Salesforce.com 的强大功能。
本文将向您介绍如何使用 RESTful Google 数据 API 开始构建企业混搭程序,即使您刚开始使用 Salesforce.com 平台或 Google 数据协议。我会帮助您设置开发环境,安装现有的 Salesforce.com 和 Google 混搭,然后编写您自己的混搭。
您好,Salesforce.com!
如果您是 Salesforce.com 新手,就需要在 ADN(Apex 开发者网络)上注册开发者帐号。该开发者帐号不仅为您提供功能齐全的 Salesforce.com 帐号,还可访问 Apex Wiki 和讨论区。
接下来,您需要获取 Apex Toolkit for Eclipse。该工具包要求使用 Java 1.5 和 Eclipse 3.2.2 或更高版本。如果您熟悉 Eclipse,该工具包的软件更新网站是 http://www.adnsandbox.com/eclipsetoolkit/10.0/
。如果您不熟悉 Eclipse 插件,或者您在安装过程中遇到任何问题,可在 Apex Wiki 中找到详细的安装说明。
安装此工具包后,您可以访问已集成到 Eclipse 帮助系统中的 Apex 帮助内容。在 Eclipse 中,转到帮助 | 帮助内容 | Apex Toolkit for Eclipse 以查看此内容。“帮助”资源之一是快速入门教程,该教程介绍了如何创建新项目以及添加 S 控件、类和触发器。如果您之前未使用过 Apex 代码,则应先浏览本教程并创建 Apex 项目,然后再继续。
正在将活动导出到 Google 日历
Ron Hess 编写了一个 Google 日历混搭应用,这款应用可让您将活动从 Salesforce.com 导出到 Google 日历。Ron 还撰写了一篇文章来解释他的混搭的运作方式。稍后,我将向您展示如何进行构建。谢谢,罗恩!
如果您是 Salesforce.com 高级用户,您可能无需任何说明即可集成并使用 Ron 的 Google 日历应用。起初,我需要一些帮助,下面我将介绍 Ron 的应用的实际运作方式。
- 安装应用:
- 前往 Google 日历混搭页面并点击 Get It Now。
- 输入您的 ADN 凭据,然后点击继续。
- 阅读条款及条件,然后点击继续。
- 在“检查软件包内容”页面中,点击下一步。
- 选择安全级别,然后点击下一步。
- 点击安装。
- 配置 Salesforce.com AJAX 代理
- 在“管理设置”菜单中,点击安全控件 | 远程网站设置。
- 点击 New Remote Site(新建远程网站)。
- 输入 Google 作为“远程网站名称”,对于“远程网站网址”字段,请使用 https://www.google.com。
- 点击保存。
- 将“添加到 Google”按钮添加到“活动详情”页面:
- 在“应用设置”菜单中,点击自定义 | 活动 | 活动页面布局。
- 点击“事件布局”行中的修改。
- 双击“详情页面按钮”区域。
- 突出显示“添加到 Google”,然后点击向右箭头 (>) 以添加按钮。
- 点击 OK(确定)。
- 点击“页面布局属性”页面上的保存。
- 导出活动
- 点击左上角的首页即可查看日历。
- 如果您没有任何活动,请点击新建活动,创建一个活动。
- 点击某个活动可查看“活动详情”页面。
- 点击添加到 Google 按钮。
- 点击 JavaScript 提醒中的确定
- 使用您的 Google 用户名和密码登录。
- 点击授予访问权,授予 Salesforce 应用对您的 Google 日历的写入权限。
- 在 Google 日历中查看活动
构建 Google 电子表格应用
好了,您可能已经厌倦了点击 Salesforce.com 页面,想要编写一些代码。再次启动 Eclipse,您会看到现在创建的 Apex 项目包含 Ron 的 Google 日历应用的 S-Control。这是因为 Apex Toolkit for Eclipse 会与 Salesforce.com 不断同步,非常酷?
您可以重复使用自己的 Google 日历混搭功能的一些功能(例如身份验证控件)来构建自己的 Google 数据应用。本部分的其余内容将介绍如何构建可将 Salesforce.com 通讯录导出到 Google 电子表格的应用。
发布简单的 S-Control
S-Control 是由 Salesforce.com 托管并在用户访问应用时在网络浏览器中执行的文件。S-Control 可以包含您可以在网络浏览器中显示或运行的任何类型的内容,例如 HTML、CSS 或 JavaScript。
Salesforce.com 和 Google 混搭中有相当多的可移动部分,所以我首先向联系人列表页面添加了一个“导出到 Google”按钮,点击该按钮可以调用简单的 S-Control - 以确保所有连接之前,我都熟悉 JavaScript。
在 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,然后右键点击该 S-Control,并选择覆盖遥控器并发布到服务器。
- 如果您找不到 S-Control,则表明 Apex 工具包可能已为您上传该工具,但最好使用同步视角,以确保在服务器上运行最新的代码。
- 使用 Salesforce.com 界面定义将调用此 S-Control 的按钮:
- 在“应用设置”菜单中,点击自定义 | 联系人 | 按钮和链接。
- 在“自定义按钮和链接”部分中,点击新建。
- 输入导出到 Google 作为标签,并保留 Export_to_Google 作为名称。
- 选择“列表按钮”作为显示类型。
- 选择“自定义 S-Control”作为“内容来源”。
- 选择“在带边栏的现有窗口中显示”作为“行为”。
- 从“自定义 S 控件”菜单中选择“导出联系人”。
- 将该按钮添加到联系人列表中:
- 在“应用设置”菜单中,点击自定义 | 联系人 | 搜索布局。
- 点击“联系人列表视图”行中的修改。
- 突出显示“导出到 Google”,然后点击向右箭头 (>) 以添加按钮。
- 点击保存。
- 不妨来试驾:
- 点击通讯录标签页。
- 选择“所有联系人”作为视图,然后点击前往!。
- 点击闪亮的全新导出到 Google 按钮。
- 注意“waiting_dots”,但应该不会有任何其他变化。
与 Google 电子表格互动
如果您查看 Google 日历混搭程序的源代码,则会发现 gcal_snippet.scf 文件包含 Google 日历服务器的抽象。要与 Google 电子表格互动,您需要为 Google 电子表格服务器创建一个类似文件。我重复使用了 Ron Hess 的代码,以使用 Salesforce.com AJAX 代理并通过 Google AuthSub 进行身份验证,并将将事件写入 Google 日历的函数替换为将信息写入 Google 电子表格的函数。gspreadsheet_snippet.scf 中提供了此文件的完整源代码。
接下来,我将 JavaScript 添加到 export_contacts.scf S-Control 中,以便查询 Salesforce.com 的联系信息,并将其写入 Google 电子表格。从 Salesforce.com 中获取数据非常简单。只需构建一个查询,并提供要在返回数据时执行的回调函数。例如:
var query = 'Select FirstName, LastName, Phone From Contact'; var queryResult = sforce.connection.query(query, queryCallback);
获得 Salesforce.com 的联系信息后,您必须确定将其导出的位置。在 RESTful Google 数据协议中,每个电子表格都可以通过唯一网址来标识。您可以通过查询元 Feed 网址来获取用户的电子表格(和关联的网址):http://spreadsheets.google.com/feeds/spreadsheets/private/full
。以下方法可遍历这些电子表格,以查找具有特定标题的电子表格。找到正确的电子表格后,系统会先获取工作表列表,然后返回第一个工作表的单元格 Feed 网址。
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 电子表格数据 API 中提供的 Feed,请参阅参考指南。
queryCallback
函数使用 getCellFeedUrl
方法查找发送更新单元格请求所需的单元格 Feed 网址,然后一次写入一个单元格的联系信息。
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 }
updateCell
方法存在于 gspreadsheet_snippet.scf S-Control 中。该方法会获取给定行和列中单元格的修改网址,然后发送 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 电子表格数据 API 更新单元格的详细信息,请参阅开发者指南。
Google 电子表格数据 API 使用的是子网域 https://spreadsheets.google.com
,因此您需要先配置 Salesforce.com AJAX 代理服务器并添加 https://spreadsheets.google.com
,然后才能使用上述代码。
您还需要转到 Google 文档并创建新的电子表格来存放数据。请确保将其另存为 Salesforce.com 联系人。
上传这些 S 控件之后,您就可以将联系信息导出到 Google 电子表格了。那其他呢?随着您对 Salesforce.com 和 Google 数据 API 的了解,您还可以编写一些代码,将联系信息从 Google 电子表格导入 Salesforce.com。
总结
本文仅仅是浅层介绍,但现在您已经了解了 Salesforce.com 平台和 Google 数据 API,您可以思考可以编写哪些工具来利用这些强大的系统。Google Data API 系列一直在不断扩充,以提供更多的信息供您在应用中使用,而 Salesforce.com 平台提供了本文中未涵盖的许多实用工具。我将在 AppExchange 中查找您的下一个企业混搭程序。
乐享编码!