Избегайте самой большой ошибки, от которой вам нужно будет отучиться

Если обучение и использование Salesforce не является вашей единственной постоянной работой, вы, скорее всего, находитесь в режиме «делай сейчас, учись позже». Независимо от того, являетесь ли вы руководителем группы по продажам, маркетингу или работе с клиентами или целой армией сотрудников, пытающихся поддерживать бизнес в порядке, у вас мало времени, и вам важны результаты больше, чем процесс.

Если бы я мог нажать кнопку паузы и заставить вас остановиться и сначала научиться чему-то, то это была бы массовость. Это происходит по трем причинам: (1) его легко выучить, (2) легко реализовать, (3) это кошмар, который нужно отучить и отменить, если его не заметят.

Мы разделим группировку на три простых раздела, в которых ответим: что это такое, почему это важно и как его использовать.

Что такое группировка?

Массовая обработка - по своей сути - это выбор дизайна, позволяющий сделать один большой запрос вместо множества мелких. Несколько получателей для одного электронного письма, несколько товаров в одной коробке Amazon и прием всех заказов на обед - все это реальные примеры массового использования.

Когда мы абстрагируем наши реальные примеры, мы видим, что все они имеют одну общую черту: какой-то внешний контейнер, обычно список или набор элементов. Мы создаем единую полезную нагрузку, которая удовлетворяет несколько запросов одновременно, вместо того, чтобы обрабатывать каждое электронное письмо / товар / заказ отдельно. Это суть увеличения объема.

С точки зрения Salesforce, массовая обработка основана на эффективной обработке и извлечении данных. Проще говоря, мы не хотим извлекать / вставлять / обновлять / удалять данные по одному.

Давайте продолжим, чтобы объяснить важность не только массовости, но и того, почему вам нужно изучить ее сейчас, а не позже.

Почему так важна группировка?

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

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

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

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

Как использовать Bulkification?

Не существует единственного «способа» всегда масштабировать процесс; тем не менее, есть общие шаблоны проектирования, которые мы представим, рассмотрев массовость запросов DML и SOQL.

Запросы DML

DML - сокращение от языка манипулирования данными - это механизм для вставки, обновления, удаления данных. На случай, если мы непосвящены, вот простой пример.

Account acc = new Account();
acc.Name = 'Our Test Account';
insert acc;

Последняя строка выполняет фактическое сохранение, вставляя новую учетную запись в базу данных. Мы хотим избежать чего-то вроде этого:

for(Integer i=0; i < 5; i++) {
   Account acc = new Account();
   acc.Name = 'Test Account ' + String.valueOf(i);
   insert acc;
}

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

List<Account> accounts = new List<Account>();
for(Integer i=0; i < 5; i++) {
   Account acc = new Account();
   acc.Name = 'Test Account ' + String.valueOf(i);
   accounts.add(acc);
}
insert accounts;

Мы все еще создаем пять аккаунтов, но сейчас делаем только один запрос DML. Намного лучше!

SOQL-запросы

SOQL - сокращение от языка запросов объектов Salesforce - это механизм для получения данных от объекта (и его родственников). SOQL очень похож на SQL, вот пример.

List<Contact> contacts = [SELECT AccountId FROM Contact];

В приведенном выше примере мы получаем AccountId всех контактов. То, что мы не хотим делать дальше, выглядит примерно так:

for(Contact con : contacts) {
   Account acc = [
      SELECT Name 
      FROM Account 
      WHERE Id = :con.AccountId
   ];
   // Do stuff
}

Почему это плохо? Мы делаем отдельный запрос SOQL для каждого контакта. Мы можем масштабировать это, создав набор идентификаторов учетных записей и объединить их в один запрос.

Set<Id> accountIds = new Set<Account>();
for(Contact con : contacts) {
   if(con.AccountId != NULL) {
      accountIds.add(con.AccountId);
   }
}
List<Account> accounts = [
   SELECT Name
   FROM Account
   WHERE Id IN :accountIds
];
for(Account acc : accounts) {
   // Do stuff
}

Мы используем набор, чтобы использовать его естественное свойство удаления дубликатов. Небольшая корректировка кода превращает то, что могло быть сотнями запросов SOQL для отдельных учетных записей (многие из которых потенциально дублированы), в один объемный запрос.

Вывод

Как видите, массовость - это относительно простая концепция, и ее нетрудно реализовать. Однако игнорирование массовости может иметь катастрофические результаты. Ограничения регулятора можно легко пропустить во время тестирования или при первоначальном заполнении растущей среды.

Игнорирование передовых методов групповой обработки приведет к повторению процессов позже, после того, как они будут созданы, и сложность станет проблемой.

Как можно раньше научиться массовому обучению приносить дивиденды. Прежде чем вы это узнаете, вы сразу же начнете наращивать объемы!

Поделитесь своим опытом, вопросами и отзывами ниже. Следуйте Коду 85 для получения дополнительных руководств по программированию на простом языке. Спасибо за внимание!