Начало работы со Scratch Org


Salesforce неуклонно движется к тому, чтобы разработчики могли безболезненно начать работать с CI/CD, используя SF. Давайте же посмотрим, как это происходит. Пройдем через весь цикл создания и настройки ScratchOrg. Чтобы лучше понять процесс, будем работать только с CLI.

1. Необходимое для начала работы с ScratchOrg
2. Создание проекта
3. Создание ScratchOrg
4. Удаление ScratchOrg
5. Получение метаданных
6. Push changes to Scratch and DevHub
7. Pemission Set Assigment
8. Import/Export of data
9. Заключение

Необходимое для начала работы с ScratchOrg

  1. Установленное VSC и Salesforce CLI (command-line interface). Пошаговый туториал тут.

  2. Developer org, без включенного префикса, иначе ничего не выйдет. Нужно перейти в Setup > DevHub > Enable.

Создание проекта

После того как установлен SF CLI, вызывать команды можно находясь в любом разделе - как через VSC терминал, так и через Git Shell.

Команда, которая создаст проект с базовой структурой
Команда: sfdx force:project:create -n HelloScratch

После ввода команды в терминале VSC, был создан проект. Теперь стоит обратить внимание на некоторые файлы.

(1) - в этом файле будут определяться параметры для будущей ScratchOrg. К нему мы ещё вернёмся

Если выполнить эту же команды из Git Shell, то получите такой же результат.

Создание ScratchOrg

Dev Hub

Перед тем как создать ScratchOrg, необходимо подключиться к основной организации, она носит название DevHub. Она будет управлять всеми ScratchOrg, относящимся к ней.

  1. Login to DevHub
    Команда: sfdx force:auth:web:login -d -a DevHub
    Для sandbox используем
    Команда: sfdx force:auth:web:login --setalias vscodeOrg --instanceurl https://test.salesforce.com/ --setdefaultusername

-d - указывает, что это будет основанная DevHub организация при создании ScratchOrg
-a - alias для DevHub

Вызываем команду, вводим логин и пароль в окне браузера.

Теперь, если ввести команду: sfdx force:org:list
Будет показан список подключенных организаций и список ScratchOrg(которых пока что нет).

Если подключенных организаций несколько, то напротив основной будет стоять (D)
image

Теперь создадим ScratchOrg.

ScratchOrg

ScratchOrg может быть создана пустой, с базовыми настройками, которые вы видите в файле project-scratch-def.json
Но настройки будущей организации всегда можно изменить.

  1. Команда, которая создаст оргу, основываясь на вышеупомянутом файле.
sfdx force:org:create -s -f HelloScratch/config/project-scratch-def.json -a "HelloSO"

Теперь при вводе команды: sfdx force:org:list
Можно увидеть организацию, которую вы создали

Можете открыть её, и осмотреться, введите команду:

sfdx force:org:open -u HelloSO

Где HelloSO, это ALIAS вашей организации.

или

sfdx force:org:open -u USERNAME 

USERNAME - имя юзера для вашей организации.

P.S :speech_balloon: Данные о ScratchOrg и токены хранятся на локальной машине. Поэтому создав ScratchOrg, на одной машине и вдруг оказавшись за другим устройством, вы хоть и сможете зайти на DevHub и даже увидеть все свои ScratchOrg в интерфейсе, но из CLI доступа у вас к ним не будет.

Удаление ScratchOrg

Иногда случается так, что в ScratchOrg исчезает необходимость - тогда её можно удалить
командой: sfdx force:org:delete -u HelloSO

Либо через интерфейс вашей основной организации, перейдя в раздел Active Scratch Org.
Кстати, если вы удаляете организацию и достигли лимита, то это не значит что вместо неё сможете сразу создать новую: использованный лимит на создание организаций остаётся прежним.

Получение метаданных

На моей основной организации DevHub существует ApexClass HelloScratch. Пусть ScratchOrg HelloSO и привязана к DevHub, но метаданные ещё потребуется вытянуть.

Поэтому, сейчас мы стянем все классы, что имеются на DevHub на нашу локальную машину, а после отправим их на нашу Scratch Org.

Команда: sfdx force:source:retrieve -m ApexClass -u DevHub

После чего можно заметить, как в проекте появился новый класс.
image

На скретч организации, этих данных пока-что нет.

Push changes to Scratch and DevHub

Наиболее простой способ сохранить данные на scratchOrg - это
команда: sfdx force:source:push
Она отправит локальные компоненты на ScratchOrg. Salesforce DX следит за тем что было изменено между локальным хранилищем и скретч организацией.

В идеале, на DevHub метаданные должны заливаться только если все тесты прошли, а команда заапрувила pull request, так как в это статье мы только знакомимся с SFDX, то уж простите, зальём всё сразу на DevHub.

  1. Перед этим понадобиться конвертировать необходимые метаданные.

Команда: sfdx force:source:convert -r YOURPATH\classes -d deploy
-r - то что вы конвертируете
-d - папка, куда будут сохранены конвертированные данные

После этого у вас в проекте в указанном месте появится папка с “конвертированными” данными.

image

  1. Теперь можно деплоить
    Команда: sfdx force:mdapi:deploy -d YOURPATH\deploy -u DevHub -w 3
    В результате, после сообщения об успешном деплое, можете проверить на вашей организации, что все данные перенесены.

P.S :speech_balloon: По сути, вся эта конвертация - всего лишь генерация package.xml файла. Если попробуете добавить его в папку с классами и запустить команду для деплоя, указав новый путь, то получите точно такой же результат.

Pemission Set Assigment

Перед тем как начать работу с данными, потребуется назначить Permission Set.

  1. Перейдите на ScratchOrg, sfdx force:org:open -u HelloSO

  2. Создайте Permission Set, настройте его так, что-бы вы имели доступ к изменению записей.

  3. Затяните этот Pemission Set к себе в локальный проект.
    Команда: sfdx force:source:pull -u test-kwpkodrzs31a@example.com

  4. Теперь его нужно назначить пользователю, по USERNAME. Admin - имя PS который я создал.
    Команда: sfdx force:user:permset:assign --permsetname Admin --targetusername test-kwpkodrzs31a@example.com

Теперь у нас есть больше возможностей :muscle:

Import/Export of data

Для более удобного тестирования функционала, необходимо иметь набор записей, который был бы приближён к реальным условиям. К тем, что будут происходить на продакшене.

Записи с продакшена никто, естественно вам не предоставит, это было бы очень безответственно. Поэтому существуют заготовки, в виде json файлов. Которые помогут быстро наполнить вашу ScratchOrg данными.

Export Data

  1. Для начала, переключимся на DevHub, ведь сейчас все команды что мы выполняем направлены на ScratchOrg.
    Команда: sfdx force:config:set defaultusername=bogomaz@sparkybit.com
    Эта команда, по USERNAME для DevHub организации сделает её организацией по умолчанию. Теперь она принимает все наши команды.

  2. Запросим данные для Account.
    Команда: sfdx force:data:soql:query --query "SELECT Id, Name FROM Account"

  3. Если выданный результат, это как раз то, что нужно, то теперь упакуем это в json.
    Команда: sfdx force:data:tree:export --query "SELECT Id, Name FROM Account" --prefix Accounts --outputdir MockData --plan

В результате будет создано два файла:
image

Import Data

Перенесём же эти данные в ScratchOrg.

  1. Переключимся обратно на ScratchOrg
    Команда: sfdx force:config:set defaultusername=test-kwpkodrzs31a@example.com

  2. Импорт ранее полученных данных
    Команда: sfdx force:data:tree:import --plan YOURPATH\MockData\Accounts-Account-plan.json

Готово! Если перейти на ScratchOrg, то найдёте там созданные аккаунты.

Заключение

Во всём этом сильно не хватает хорошо настроенного CI, ведь ради этого и был задуман Salesforce DX. Чтобы оптимизировать процесс разработки. В следующей теме рассмотрим как начать работать с Salesforce DX и Git.
Если у вас остались вопросы - задавайте в комментариях!

3 Likes

А как открыть эту оргу для мануального тестирование? Ссылка хранится в главное орге?

Можете открыть её c помощью

sfdx force:org:open -u HelloSO

Где HelloSO, это ALIAS вашей организации.

или

sfdx force:org:open -u USERNAME 

USERNAME - имя юзера для вашей организации.

1 Like

Да, можно увидеть свои организации в главной. Но доступ из CLI только с той машины с которой ты их создавал)

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