Избегайте самой большой ошибки, от которой вам нужно будет отучиться
Если обучение и использование 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 для получения дополнительных руководств по программированию на простом языке. Спасибо за внимание!