Итак, вы хотите получить данные от Salesforce быстро, дешево и без управления серверами? Вам повезло! Используя JSforce и облачные функции Firebase, вы можете приступить к работе в кратчайшие сроки!

1.0 Вещи, которые вам понадобятся…

1.1 Учетная запись пользователя Salesforce (вы будете использовать ее как учетную запись службы)

Прежде всего вам потребуется учетная запись пользователя Salesforce с достаточными разрешениями для запроса необходимых данных. Если вы являетесь администратором Salesforce, это не должно быть проблемой, в противном случае просто найдите своего администратора Salesforce и вежливо спросите его. Вам также потребуется пароль для этой учетной записи, и, в зависимости от вашей среды Salesforce, вам также может понадобиться ключ безопасности.

1.2 Запрос Salesforce SOQL

Вам нужно будет получить правильный запрос SOQL, чтобы вернуть нужные данные. Это SQL-подобный запрос, который используется для запроса данных в Salesforce. Workbench — отличный инструмент для тестирования запросов SOQL и проверки правильности получаемых данных. Запрос SOQL выглядит примерно так:

ВЫБЕРИТЕ Id ОТ контакта, ГДЕ Имя КАК «A%» И MailingCity = «Калифорния»

1.3 Node.js и NPM

Вам нужно будет установить Node.js и npm на свой локальный компьютер. Проверьте, какую версию Node.js Firebase в настоящее время поддерживает здесь, а затем обязательно используйте эту версию. На момент написания Firebase рекомендовал Node v6.14.0. Я использую NVM (менеджер версий узлов) для изменения версий, когда мне это нужно. Обратите внимание, что я использую Ubuntu (это просто делает подобные вещи намного проще), поэтому любые команды CLI, написанные в этом посте, могут не обязательно работать на Windows или Mac.

1.4 Редактор кода

Я использую VS Code, но вы можете использовать все, что вам удобно.

1.5 Проект Firebase

Перейдите в консоль Firebase, чтобы создать новый проект с именем jsforce-functions. Это довольно простой процесс, просто следуйте за своим носом. Вам понадобится учетная запись Google.

2.0 Настройка функций Firebase

В Firebase есть хорошая документация по настройке функций здесь. Все сводится к установке интерфейса командной строки Firebase и инициализации функций Firebase в папке вашего проекта, поэтому позвольте мне подытожить:

2.1. Установите FIrebase CLI глобально с помощью npm:

npm install -g firebase-tools

2.2 Создайте папку для размещения вашего проекта на локальном компьютере:

mkdir jsforce-functions

2.3 Смените каталог на свой проект:

cd jsforce-functions

2.4 Войдите в Firebase из CLI:

firebase login

2.5 Инициализируйте функции Firebase в вашем проекте:

firebase init functions

2.6 Вам будет предложено выбрать проект, поэтому выберите тот, который вы только что создали:

> jsforce-functions

2.7 Вам будет предложено выбрать между JavaScript и Typescript, выберите JavaScript:

> Javascript

2.8 Вас спросят, хотите ли вы использовать ESLint. Не надо, мы просто тестируем вещи здесь. Нажмите Н:

? Do you want to use ESLint to catch probable bugs and enfore style? (Y/n)

2.9 Вас спросят, хотите ли вы установить зависимости с помощью npm. Нажмите Y:

Do you want to install dependencies with npm now? (Y/n)

2.10 Если все получилось, откройте папку проекта в VS Code, и теперь у вас должна быть такая структура проекта:

3.0 Напишите код!

3.1 Настройка структуры проекта

В нашем проекте jsforce-functions/functions/index.js является точкой входа в наши функции. Мы могли бы написать облачную функцию прямо здесь, но это станет грязным и сложным в обслуживании, если наш проект разрастется. Вместо этого мы создадим несколько подпапок и будем более организованными. Мы собираемся избегать написания длинных функций, которые делают много вещей, а вместо этого напишем ряд меньших функций, которые легче понять и поддерживать.

Стоит отметить, что на момент написания Firebase рекомендовал использовать Node v6.14.0 с Firebase Functions. Это означает, что мы пока не можем использовать async/await и другие более новые синтаксис и функции JS. Впрочем, ничего страшного, мы можем просто использовать старые добрые промисы.

В папке functions создайте 2 новые папки с именами jsforce-functions/functions/fetch-data и jsforce-functions/functions/display-data. В jsforce-functions/functions/fetch-data создайте новый файл с именем jsforce-functions/functions/sf-auth. В этом файле мы создадим функцию для обработки аутентификации в Salesforce.

3.2 Аутентификация в Salesforce

Чтобы запросить Salesforce, нам необходимо пройти аутентификацию. Для этого мы будем использовать библиотеку JSforce, поэтому откройте терминал, измените каталог на jsforce-functions/functions и установите JSforce, выполнив:

sudo npm install -save jsforce

В вашем файле jsforce-functions/functions/package.json теперь должна быть новая запись для JSforce:

Затем вернитесь к jsforce-functions/functions/fetch-data/sf-auth.js. Мы собираемся написать функцию, которая будет обрабатывать аутентификацию и возвращать обещание, содержащее объект conn, который мы будем использовать для формирования нашего запроса Salesforce. Помните, как ранее мы приводили в порядок учетные данные Salesforce? Сейчас самое время их использовать.

В jsforce-functions/functions/fetch-data/sf-auth.js вам нужно будет изменить некоторые переменные:

  • имя пользователя: это имя пользователя для учетной записи Salesforce, с которой мы разобрались ранее.
  • пароль: это либо пароль к вашей учетной записи Salesforce, либо пароль + ключ безопасности одним словом без пробелов. Если вы сомневаетесь, поговорите со своим администратором Salesforce, поскольку я считаю, что это требование зависит от среды Salesforce.
  • loginUrl: вероятно, это URL-адрес, который вы используете для входа на портал Salesforce, однако, если у вас настроена балансировка нагрузки, это может быть не так. Если вы сомневаетесь, обратитесь к администратору Salesforce.

3.3 Запрос Salesforce

Далее нам нужно написать функцию для запроса Salesforce. Создайте новый файл jsforce-functions/functions/fetch-data/sf-query.js. В этом файле вам нужно будет изменить переменную:

  • queryString: это запрос SOQL, который мы подготовили ранее.

3.4 Обработка ответов

Мы уже на пути к собственному API, поэтому теперь нам нужно создать способ обработки ответов.

Создайте новый файл jsforce-functions/functions/fetch-data/send-res.js.

3.5 Связывание наших функций вместе

Наша облачная функция теперь имеет отдельные функции для аутентификации в Salesforce, выполнения запроса Salesforce и отправки ответа на внешний интерфейс. Далее нам просто нужно связать эти функции вместе, чтобы сформировать наш API. Создайте новый файл jsforce-functions/functions/display-data/load.js.

3.6 Обновление index.js

Точка входа в наши функции Firebase — jsforce-functions/functions/index.js. Здесь мы создадим новую функцию, которая будет указывать на jsforce-functions/functions/display-data/load.js. При развертывании Firebase Cloud Functions считывает все функции, объявленные в этом файле, и автоматически создает конечные точки HTTP, которые запускают эти функции. Это означает, что вы можете просто загрузить URL-адрес для запуска вашей функции.

4.0 Запустите функцию Firebase!

4.1 Выполняйте свою функцию локально

Одной из моих любимых функций Firebase Functions является возможность локального обслуживания ваших функций. Это делает отладку и устранение неполадок намного проще, чем необходимость развертывания вашей функции в облаке и работы с журналами оттуда. Для этого откройте терминал, перейдите в каталог jsforce-functions/functions и выполните:

sudo firebase serve

Это даст вам URL:

http://localhost:5000/jsforce-functions/us-central1/load

Просто откройте его в своем браузере, и ваша функция запустится! Если это не сработает в первый раз, просто проверьте свою консоль, чтобы увидеть, где что-то падает.

4.2 Разверните свою функцию в облаке

Как только все заработает как надо, вы можете развернуть свою функцию в облаке, чтобы она была доступна в любом месте. Прежде чем сделать это, чрезвычайно важно остановиться и подумать о том, какие данные вы разрешаете публиковать. В этом руководстве не показана аутентификация в облачных функциях, поэтому любой, у кого есть URL-адрес, может загрузить любые данные Salesforce, к которым ваш запрос SOQL предоставляет доступ. Вы должны убедиться, что ваш жестко закодированный запрос не раскрывает никакой конфиденциальной информации или, по крайней мере, ничего, что еще не является общедоступным. Вы были предупреждены!

Как только вы убедитесь, что данные, которые вы делаете общедоступными, могут быть общедоступными, откройте свой терминал и запустите:

sudo firebase deploy

Это должно дать вам URL-адрес, который выглядит примерно так:

https://us-central1-somecoolproject.cloudfunctions.net/load