REST для коммивояжёра: использование данных Google на Salesforce.com

Лейн ЛиаБраатен, Google Developer Programs
Ноябрь 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 без каких-либо инструкций. Сначала мне потребовалась небольшая помощь, поэтому вот что я сделал, чтобы увидеть приложение Рона в действии.

  1. Установить приложение:
    • Перейдите на страницу «Google Календарь Mash-up» и нажмите «Получить сейчас» .
    • Введите свои учетные данные ADN и нажмите «Продолжить» .
    • Ознакомьтесь с Условиями и положениями и нажмите «Продолжить» .
    • Нажмите кнопку «Далее» на странице «Проверка содержимого пакета».
    • Выберите уровень безопасности и нажмите «Далее» .
    • Нажмите «Установить» .
  2. Настройте прокси-сервер Salesforce.com AJAX
    • В меню «Настройка администрирования» выберите «Элементы управления безопасностью» | «Параметры удаленного сайта» .
    • Нажмите «Новый удаленный сайт» .
    • Введите Google в качестве «Имени удаленного сайта», а в качестве «URL-адреса удаленного сайта» используйте https://www.google.com .
    • Нажмите «Сохранить» .
  3. Добавьте кнопку «Добавить в Google» на страницу сведений о мероприятии:
    • В меню «Настройка приложения» выберите Настроить | Действия | Макеты страниц событий .
    • Нажмите «Изменить» в строке «Макет мероприятия».
    • Дважды щелкните область «Кнопки страницы сведений».
    • Выделите «Добавить в Google» и нажмите стрелку вправо (>), чтобы добавить кнопку.
    • Нажмите ОК .
    • Нажмите кнопку «Сохранить» на странице «Свойства макета страницы».
  4. Экспортировать событие
    • Нажмите «Домой» в левом верхнем углу, чтобы просмотреть календарь.
    • Если у вас нет событий, нажмите «Новое событие» , чтобы создать его.
    • Щелкните событие, чтобы просмотреть страницу сведений о событии.
    • Нажмите кнопку Добавить в 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 и настроить кнопку, которая будет его вызывать.

  1. Используйте Eclipse для публикации файла S-Control:
    • Щелкните правой кнопкой мыши свой проект Apex и выберите Apex | Синхронизировать с Salesforce .
    • Найдите новый S-Control в дереве каталогов, щелкните его правой кнопкой мыши и выберите Переопределить удаленный и опубликовать на сервере .
    • Если вы не можете найти свой S-Control, возможно, Apex Toolkit уже загрузил его для вас, но рекомендуется использовать перспективу синхронизации, чтобы убедиться, что на сервере запущена последняя версия кода.
  2. Используйте пользовательский интерфейс Salesforce.com для определения кнопки, которая будет вызывать этот элемент S-Control:
    • В меню «Настройка приложения» выберите Настроить | Контакты | Кнопки и ссылки .
    • В разделе «Пользовательские кнопки и ссылки» нажмите кнопку Создать .
    • Введите Export to Google в качестве метки и оставьте Export_to_Google в качестве имени.
    • Выберите «Кнопка списка» в качестве типа отображения.
    • Выберите «Пользовательский S-Control» в качестве источника контента.
    • В качестве поведения выберите «Отображать в существующем окне с боковой панелью».
    • Выберите «export_contacts» в меню пользовательских S-элементов управления.
  3. Добавить кнопку в список контактов:
    • В меню «Настройка приложения» выберите Настроить | Контакты | Макеты поиска .
    • Нажмите «Изменить» в строке «Просмотр списка контактов».
    • Выделите «Экспорт в Google» и нажмите стрелку вправо (>), чтобы добавить кнопку.
    • Нажмите «Сохранить» .
  4. Проведите тест-драйв:
    • Откройте вкладку Контакты .
    • Выберите «Все контакты» в качестве вида и нажмите « Перейти!» .
    • Нажмите новую блестящую кнопку «Экспорт в 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 .

Удачного кодирования!

Ресурсы