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

Лейн ЛиаБраатен, Google Developer Programs
ноябрь 2007 г.

Введение

Salesforce.com и Google размещают популярные приложения «Программное обеспечение как услуга», и обе организации предоставляют API-интерфейсы, которые позволяют разработчикам получать доступ к большим хранилищам данных, на которых работают эти приложения. Все становится интереснее, когда мы объединяем оба набора API-интерфейсов. G Suite по-прежнему все больше и больше используется в корпоративных условиях, а Salesforce.com создала обширную платформу для создания пользовательских бизнес-приложений, поэтому у разработчиков (это вы!) есть много возможностей объединить мощь Google и Salesforce.com. .

В этой статье показано, как использовать RESTful API данных Google, чтобы начать создавать корпоративные гибридные приложения, даже если вы только начинаете работать с платформой Salesforce.com или протоколом данных Google. Я помогу вам настроить среду разработки, установить существующий мэшап Salesforce.com и Google, а затем написать свой собственный.

Здравствуйте, Salesforce.ru!

Если вы новичок в Salesforce.com, как и я, вам нужно начать с регистрации учетной записи разработчика в ADN, Apex Developer Network. Учетная запись разработчика дает вам полнофункциональную учетную запись Salesforce.com, а также доступ к вики Apex и форумам обсуждений .

Затем вам нужно получить набор инструментов Apex для Eclipse. Инструментарий требует Java 1.5 и Eclipse 3.2.2 или выше. Если вы знакомы с Eclipse, сайт обновления программного обеспечения для набора инструментов находится по адресу http://www.adnsandbox.com/eclipsetoolkit/10.0/ . Если вы не знакомы с подключаемыми модулями Eclipse или что-то пошло не так во время установки, вики Apex содержит подробные инструкции по установке .

После установки инструментария вы можете получить доступ к справочному содержимому Apex, интегрированному в справочную систему Eclipse. В Eclipse выберите Справка | Содержание справки | Apex Toolkit для Eclipse , чтобы увидеть это содержимое. Одним из справочных ресурсов является краткое руководство, которое покажет вам, как создать новый проект и добавить элементы S-Control, классы и триггеры. Если вы раньше не работали с кодом Apex, вам следует пройти это руководство и создать проект Apex, прежде чем двигаться дальше.

Экспорт событий в Календарь Google

Рон Хесс написал приложение Google Calendar Mash-up , которое позволяет экспортировать события из Salesforce.com в Google Calendar. Рон также написал статью , в которой объясняет, как работает его мэшап. Приложение Google Spreadsheets, которое я покажу вам позже, создано по образцу мэшапа Google Calendar Рона. Спасибо Рон!

Если вы являетесь опытным пользователем Salesforce.com, вы, вероятно, сможете интегрировать и использовать приложение Рона Google Calendar без каких-либо инструкций. Сначала мне нужна была небольшая помощь, поэтому вот что я сделал, чтобы увидеть приложение Рона в действии.

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

Создание приложения Google Spreadsheets

Хорошо, вы, вероятно, устали щелкать страницы Salesforce.com и готовы написать код. Запустите Eclipse еще раз, и вы увидите, что созданный вами проект Apex теперь содержит S-Controls для приложения Google Calendar Рона. Это связано с тем, что Apex Toolkit для Eclipse постоянно синхронизируется с Salesforce.com — здорово, правда?

Вы можете создать собственное приложение Google Data, повторно используя некоторые функции Google Calendar Mash-up, например элементы управления аутентификацией. В оставшейся части этого раздела я покажу вам, как создать приложение, которое экспортирует ваши контакты 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-контроль . Дайте новому S-Control метку и имя export_contacts , оставьте тип Custom HTML и нажмите Finish .

Новый S-Control будет содержать каркас HTML-файла. Вы добавите кучу JavaScript в <head>, но вы можете сначала заполнить <body>, чтобы было что показать пользователю во время экспорта контактов. Скопируйте этот HTML-код в тело вашего S-Control, чтобы отобразить «точки ожидания» и логотип Google Spreadsheets:

<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:
    • В меню «Настройка приложения» нажмите «Настроить | Контакты | Кнопки и ссылки .
    • В разделе «Пользовательские кнопки и ссылки» нажмите «Создать» .
    • Введите «Экспорт в Google» в качестве ярлыка и оставьте имя «Экспорт_в_Google» .
    • Выберите «Кнопка списка» в качестве типа отображения.
    • Выберите «Пользовательский S-Control» в качестве источника контента.
    • Выберите «Отображать в существующем окне с боковой панелью» в качестве поведения.
    • Выберите «export_contacts» в меню Custom S-Controls.
  3. Добавьте кнопку в список контактов:
    • В меню «Настройка приложения» нажмите «Настроить | Контакты | Поиск макетов .
    • Нажмите « Изменить» в строке «Список контактов».
    • Выделите «Экспорт в Google» и нажмите стрелку вправо (>), чтобы добавить кнопку.
    • Нажмите Сохранить .
  4. Возьмите его на тест-драйв:
    • Щелкните вкладку Контакты .
    • Выберите «Все контакты» в качестве вида и нажмите «Перейти»! .
    • Нажмите на новую блестящую кнопку «Экспорт в Google» .
    • Следите за «waiting_dots», но не ожидайте, что произойдет что-то еще.

Взаимодействие с таблицами Google

Если вы посмотрите на исходный код Google Calendar Mash-up, вы увидите, что файл gcal_snippet.scf содержит абстракцию для сервера Google Calendar. Для взаимодействия с таблицами Google вам потребуется создать аналогичный файл для сервера таблиц Google. Я повторно использовал код Рона Хесса для использования AJAX-прокси Salesforce.com и аутентификации с помощью 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 существует в gspreadsheet_snippet.scf S-Control. Метод получает URL-адрес редактирования ячейки в заданной строке и столбце, а затем отправляет 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);
} 

Дополнительную информацию о том, как обновлять ячейки с помощью API данных Google Spreadsheets, можно найти в Руководстве разработчика .

API данных Google Spreadsheets использует поддомен https://spreadsheets.google.com поэтому, прежде чем приведенный выше код заработает, вам необходимо настроить прокси-сервер Salesforce.com AJAX и добавить https://spreadsheets.google.com .

Вам также нужно будет перейти в Google Docs и создать новую электронную таблицу для хранения данных. Убедитесь, что вы сохранили его как Контакты Salesforce.com .

После загрузки этих S-Controls вы сможете экспортировать свою контактную информацию в электронную таблицу Google. А как насчет другого пути? Благодаря новым знаниям о Salesforce.com и API данных Google вы также можете написать код для импорта контактной информации из таблиц Google в Salesforce.com.

Заключение

В этой статье мы затронули только самую суть, но теперь, когда вы освоили платформу Salesforce.com и API данных Google, подумайте обо всех приложениях, которые вы можете написать для использования этих мощных систем. Семейство API-интерфейсов Google Data постоянно расширяется, предоставляя вам больше информации для использования в ваших приложениях, а платформа Salesforce.com предлагает множество полезных инструментов , которые не были рассмотрены в этой статье. Я буду искать ваш следующий корпоративный мэшап на AppExchange .

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

Ресурсы