Ноябрь 2007 г.
Введение
Salesforce.com и Google размещают популярные приложения «ПО как услуга», и обе организации предоставляют API, позволяющие разработчикам получать доступ к обширным хранилищам данных, лежащих в основе этих приложений. Всё становится интереснее, когда мы объединяем оба набора API. G Suite продолжает всё чаще использоваться в корпоративной среде, а Salesforce.com создал обширную платформу для создания специализированных бизнес-приложений, поэтому у разработчиков (то есть и вас!) есть множество возможностей объединить возможности Google и Salesforce.com.
В этой статье вы узнаете, как использовать RESTful API Google Data для создания корпоративных мэшапов, даже если вы только начинаете работать с платформой Salesforce.com или протоколом Google Data. Я помогу вам настроить среду разработки, установить существующий мэшап Salesforce.com и Google, а затем написать свой собственный.
Привет, Salesforce.com!
Если вы, как и я, новичок в Salesforce.com, вам нужно начать с регистрации учётной записи разработчика в ADN (Apex Developer Network). Учётная запись разработчика предоставляет вам полнофункциональный аккаунт Salesforce.com, а также доступ к вики-ресурсу и форумам Apex .
Далее вам понадобится Apex Toolkit для Eclipse. Для работы набора инструментов требуются Java 1.5 и Eclipse 3.2.2 или более поздние версии. Если вы знакомы с Eclipse, сайт обновления для набора инструментов находится http://www.adnsandbox.com/eclipsetoolkit/10.0/
. Если вы не знакомы с плагинами Eclipse или во время установки что-то пошло не так, подробные инструкции по установке можно найти на вики Apex.
После установки инструментария вы получите доступ к справке Apex, интегрированной в справочную систему Eclipse. В Eclipse перейдите в раздел «Справка» | «Содержимое справки» | Apex Toolkit for Eclipse, чтобы ознакомиться с этой информацией. Один из справочных ресурсов — это краткое руководство, которое покажет вам, как создать новый проект и добавить элементы S-Control, классы и триггеры. Если вы ранее не работали с кодом Apex, вам следует изучить это руководство и создать проект Apex, прежде чем двигаться дальше.
Экспорт событий в Google Календарь
Рон Хесс написал приложение -мэшап для Google Календаря , которое позволяет экспортировать события из Salesforce.com в Google Календарь. Рон также написал статью , в которой объясняется, как работает его мэшап. Приложение Google Таблицы, которое я покажу вам позже, создано по образцу мэшапа Рона для Google Календаря. Спасибо, Рон!
Если вы опытный пользователь Salesforce.com, то, вероятно, сможете интегрировать и использовать приложение Рона Google Calendar без каких-либо инструкций. Сначала мне потребовалась небольшая помощь, поэтому вот что я сделал, чтобы увидеть приложение Рона в действии.
- Установить приложение:
- Перейдите на страницу «Google Календарь Mash-up» и нажмите «Получить сейчас» .
- Введите свои учетные данные ADN и нажмите «Продолжить» .
- Ознакомьтесь с Условиями и положениями и нажмите «Продолжить» .
- Нажмите кнопку «Далее» на странице «Проверка содержимого пакета».
- Выберите уровень безопасности и нажмите «Далее» .
- Нажмите «Установить» .
- Настройте прокси-сервер Salesforce.com AJAX
- В меню «Настройка администрирования» выберите «Элементы управления безопасностью» | «Параметры удаленного сайта» .
- Нажмите «Новый удаленный сайт» .
- Введите Google в качестве «Имени удаленного сайта», а в качестве «URL-адреса удаленного сайта» используйте https://www.google.com .
- Нажмите «Сохранить» .
- Добавьте кнопку «Добавить в Google» на страницу сведений о мероприятии:
- В меню «Настройка приложения» выберите Настроить | Действия | Макеты страниц событий .
- Нажмите «Изменить» в строке «Макет мероприятия».
- Дважды щелкните область «Кнопки страницы сведений».
- Выделите «Добавить в Google» и нажмите стрелку вправо (>), чтобы добавить кнопку.
- Нажмите ОК .
- Нажмите кнопку «Сохранить» на странице «Свойства макета страницы».
- Экспортировать событие
- Нажмите «Домой» в левом верхнем углу, чтобы просмотреть календарь.
- Если у вас нет событий, нажмите «Новое событие» , чтобы создать его.
- Щелкните событие, чтобы просмотреть страницу сведений о событии.
- Нажмите кнопку Добавить в Google .
- Нажмите «ОК» в оповещении JavaScript.
- Войдите в систему, используя свое имя пользователя и пароль Google.
- Нажмите «Предоставить доступ» , чтобы предоставить приложению SalesForce доступ на запись в ваш Google Календарь.
- Посмотрите событие в вашем Google Календаре
Создание приложения Google Таблиц
Итак, вы, вероятно, устали от ковыряния страниц Salesforce.com и готовы написать код. Снова запустите Eclipse, и вы увидите, что созданный вами проект Apex теперь содержит элементы управления S-Controls для приложения Google Календарь Рона. Это потому, что Apex Toolkit для Eclipse постоянно синхронизируется с Salesforce.com — круто, правда?
Вы можете создать собственное приложение Google Data, используя некоторые функции мэшапа Google Calendar, например, элементы управления аутентификацией. В оставшейся части этого раздела я покажу вам, как создать приложение, которое экспортирует ваши контакты 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 | Новый S-Control . Присвойте новому S-Control метку и имя export_contacts , оставьте тип « Пользовательский HTML» и нажмите «Готово» .
Новый элемент S-Control будет содержать HTML-файл-скелет. Вам нужно будет добавить фрагмент JavaScript в раздел <head>, но можно сначала заполнить раздел <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 | Синхронизировать с Salesforce .
- Найдите новый S-Control в дереве каталогов, щелкните его правой кнопкой мыши и выберите Переопределить удаленный и опубликовать на сервере .
- Если вы не можете найти свой S-Control, возможно, Apex Toolkit уже загрузил его для вас, но рекомендуется использовать перспективу синхронизации, чтобы убедиться, что на сервере запущена последняя версия кода.
- Используйте пользовательский интерфейс Salesforce.com для определения кнопки, которая будет вызывать этот элемент S-Control:
- В меню «Настройка приложения» выберите Настроить | Контакты | Кнопки и ссылки .
- В разделе «Пользовательские кнопки и ссылки» нажмите кнопку Создать .
- Введите Export to Google в качестве метки и оставьте Export_to_Google в качестве имени.
- Выберите «Кнопка списка» в качестве типа отображения.
- Выберите «Пользовательский S-Control» в качестве источника контента.
- В качестве поведения выберите «Отображать в существующем окне с боковой панелью».
- Выберите «export_contacts» в меню пользовательских S-элементов управления.
- Добавить кнопку в список контактов:
- В меню «Настройка приложения» выберите Настроить | Контакты | Макеты поиска .
- Нажмите «Изменить» в строке «Просмотр списка контактов».
- Выделите «Экспорт в Google» и нажмите стрелку вправо (>), чтобы добавить кнопку.
- Нажмите «Сохранить» .
- Проведите тест-драйв:
- Откройте вкладку Контакты .
- Выберите «Все контакты» в качестве вида и нажмите « Перейти!» .
- Нажмите новую блестящую кнопку «Экспорт в Google» .
- Следите за «точками_ожидания», но не ждите, что произойдет что-то еще.
Взаимодействие с таблицами Google
Если вы посмотрите на исходный код мэшапа Google Календаря, вы увидите, что файл gcal_snippet.scf содержит абстракцию для сервера Google Календаря. Для взаимодействия с Google Таблицами вам потребуется создать аналогичный файл для сервера Google Таблиц. Я повторно использовал код Рона Хесса для использования прокси-сервера Salesforce.com AJAX и аутентификации с помощью Google AuthSub , заменив функцию, записывающую события в Google Календарь, на функцию, записывающую информацию в Google Таблицы. Полный исходный код этого файла доступен в gspreadsheet_snippet.scf .
Затем я добавил JavaScript в элемент управления S-Control export_contacts.scf для запроса контактной информации из Salesforce.com и записи её в Google Таблицу. Извлечь данные из Salesforce.com легко. Просто создайте запрос и добавьте функцию обратного вызова, которая будет выполняться при возврате данных. Например:
var query = 'Select FirstName, LastName, Phone From Contact'; var queryResult = sforce.connection.query(query, queryCallback);
Получив контактную информацию с Salesforce.com, вам нужно решить, куда её экспортировать. В протоколе RESTful Google Data каждая таблица идентифицируется по уникальному URL-адресу. Вы можете получить список таблиц пользователя (и связанных URL-адресов), запросив URL-адрес метафида: http://spreadsheets.google.com/feeds/spreadsheets/private/full
. Следующий метод перебирает эти таблицы в поисках таблицы с определённым заголовком. Найдя нужную таблицу, он сначала получает список листов, а затем возвращает URL-адрес фида ячеек для первого листа.
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); } } }
Более подробную информацию о каналах, доступных в API данных Google Spreadsheets, можно найти в Справочном руководстве .
Функция queryCallback
использует метод getCellFeedUrl
для поиска URL-адреса канала ячеек, необходимого для отправки запросов на обновление ячеек, а затем записывает контактную информацию по одной ячейке за раз.
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
существует в элементе управления S-Control gspreadsheet_snippet.scf . Он получает URL-адрес редактирования ячейки в заданных строке и столбце, а затем отправляет HTTP-запрос PUT
, содержащий представление обновлённой ячейки в формате Google Data:
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); }
Более подробную информацию об обновлении ячеек с помощью API данных Google Таблиц можно найти в Руководстве разработчика .
API данных Google Spreadsheets использует поддомен https://spreadsheets.google.com
поэтому, прежде чем приведенный выше код заработает, вам необходимо настроить прокси-сервер Salesforce.com AJAX и добавить https://spreadsheets.google.com
.
Вам также потребуется открыть Google Docs и создать новую таблицу для хранения данных. Сохраните её под именем Salesforce.com Contacts .
После загрузки этих элементов S-Control вы сможете экспортировать свою контактную информацию в таблицу Google. А как насчёт другого способа? Благодаря новым знаниям Salesforce.com и API Google Data вы также можете написать код для импорта контактной информации из таблиц Google в Salesforce.com.
Заключение
Эта статья лишь поверхностно затронула тему, но теперь, когда вы освоили платформу Salesforce.com и API Google Data, подумайте о том, сколько приложений вы можете написать, используя эти мощные системы. Семейство API Google Data постоянно расширяется, предоставляя вам доступ к новым данным для использования в ваших приложениях, а платформа Salesforce.com предлагает множество полезных инструментов , которые не были рассмотрены в этой статье. Я буду ждать вашего следующего корпоративного мэшапа в AppExchange .
Удачного кодирования!