Оперативное совершенство - схемы автоматизации


Узнайте больше о операционном совершенстве → Автоматизация и эффективность

Шаблоны

Где искатьКак хорошо выглядит
Платформа | Панели мониторинга✅ Все показатели, связанные с КПЭ, включены как минимум в одну панель мониторинга
Платформа | Документация✅ Выводы для каждой автоматизации измеримы и привязаны к срокам
Платформа | Документация✅ Для каждого КПЭ указаны подотчетные заинтересованные лица

Антишаблоны

Где искатьКак плохо выглядит
Платформа | Панели мониторинга⚠️ Отчетность по КПЭ не существует или в панелях мониторинга отсутствуют показатели, связанные с некоторыми КПЭ
Платформа | Документация⚠️ КПЭ существуют без подотчетных заинтересованных лиц
Платформа | Документация⚠️ КПЭ не существуют для автоматизации или имеют неясные временные промежутки для измерений

Шаблоны

Где искатьКак хорошо выглядит
Платформа | Поток✅ Flow Builder используется для автоматизации, запущенной записью (замена конструктора процессов и бизнес-правил)
Платформа | Поток✅ Потоки, запущенные записью, с выполнением перед сохранением используются для заполнения полей перед созданием записи
Платформа | Поток✅ Потоки обрабатывают логику решений, циклы, выноски API, операции DML и сложную многоэтапную оркестрацию
Платформа | Поток✅ Управление транзакциями потока используется для подтверждения промежуточных изменений при необходимости
Платформа | Поток✅ Обработка ошибок реализована для изящного восстановления ошибок в потоках
Платформа | Поток✅ Реактивные потоки окон предоставляют динамические взаимодействия пользователя
Платформа | Поток✅ Декларативная автоматизация выбирается, когда бизнес-пользователям или администраторам нужно изменить логику без участия разработчика
Платформа | Поток✅ Переменные не относятся к жестко запрограммированным значениям (для типов записей, пользователей и т. д.)
Платформа | Поток✅ Оттекает логика руки в Apex в контекстах большого объема данных
Платформа | Поток✅ Подпотоки используются для разделов процессов, которые нужно повторно использовать в бизнесе
Платформа | Поток✅ Все автоматически запущенные потоки используют элементы решения и/или приостановления для оценки критериев входа и предотвращения бесконечных циклов или выполнения по сравнению с большими объемами данных
Платформа | Поток✅ Пользователям предлагается предоставить данные только при невозможности использования существующих системных данных
Платформа | Поток✅ Потоки организованы в иерархической структуре, состоящей из основного потока и поддерживающих подпотоков
Платформа | Поток✅ Все вводные данные пользователя имеют четкую цель в потоке
Платформа | Поток✅ Каждый поток служит одной конкретной цели
Платформа | Поток✅ Каждый этап выполняет определенную детальную задачу
Платформа | Поток✅ Все потоки, запущенные в контексте пользователя, абстрактные транзакции системного контекста в подпотоки, последовательно размещенные после элемента «Приостановить» для создания новой транзакции
Платформа | Поток✅ Все потоки, запущенные записью, имеют заполненные значения порядка триггеров
Платформа | Поток✅ Потоки, использующие выноски внешней системы или длительные процессы, используют асинхронные пути
Платформа | Поток✅ С помощью оркестратора создаются сложные последовательности операций связанных данных (вместо вызова нескольких подпотоков в монолитном потоке)
Платформа | Проверка✅ Целостность данных внедряется на уровне платформы посредством правил проверки, правил повторов и обязательных полей
Платформа | Проверка✅ Правила проверки предотвращают недопустимый ввод данных перед сохранением (более эффективно, чем проверка триггера)
Платформа | Процессы утверждения✅ Многоэтапная маршрутизация утверждений обрабатывает параллельные и последовательные пути утверждения с делегированными ответственными за утверждение
Платформа | Процессы утверждения✅ Архитектура утверждения учитывает сценарии исключения (все ответственные за утверждение в отпуске, срочное бизнес-требование в обход обычного утверждения)

Антишаблоны

Где искатьКак плохо выглядит
Платформа | Поток⚠️ Конструктор процессов и бизнес-правила, используемые для новой автоматизации (Flow Builder - стратегическое направление)
Платформа | Поток⚠️ Программная автоматизация, используемая, когда бизнес-пользователям или администраторам необходимо изменить логику без участия разработчика
Платформа | Поток⚠️ В потоках отсутствует обработка ошибок, что приводит к плохому восстановлению ошибок
Платформа | Поток⚠️ Переменные имеют жестко запрограммированные значения
Платформа | Поток⚠️ Потоки должны быть деактивированы вручную до пакетной загрузки данных
Платформа | Поток⚠️ Части потока повторяются в потоках, а не используют подпотоки
Платформа | Поток⚠️ Потоки инициируют уведомления о “необработанном исключении”
Платформа | Поток⚠️ Даже простые потоки регулярно приводят к ошибкам, связанным с ограничениями регулятора
Платформа | Поток⚠️ Потоки требуют дополнительных вводных данных для предоставления контекста
Платформа | Поток⚠️ Потоки служат нескольким целям
Платформа | Поток⚠️ Группы связанных этапов содержат функции, которые накладываются на группы этапов в других потоках
Платформа | Поток⚠️ Потоки запрашивают вводные данные пользователя, когда сохраненные данные могут использоваться вместо них
Платформа | Поток⚠️ Потоки требуют вводных данных, данные которых не используются
Платформа | Поток⚠️ Выполнение DML посредством коллекции, выводимой из компонента окна (использование параметра «Использование кодов и всех значений полей из записи или коллекции записей» при создании, обновлении или удалении элемента, когда коллекция выводима из компонента окна)
Платформа | Поток⚠️ Потоки, запущенные записью, вообще не используют атрибуты порядка триггеров или не используют значения порядка триггеров последовательно
Платформа | Поток⚠️ Асинхронные пути не используются последовательно или вообще
Платформа | Поток⚠️ Крупные монолитные потоки пытаются координировать сложные последовательности операций связанных данных (с подпотоками или без них)
Платформа | Процессы утверждения⚠️ Архитектура утверждения не учитывает сценарии исключения (все ответственные за утверждение в отпуске, срочные бизнес-требования)
Платформа | Проверка⚠️ Целостность данных применяется только в триггерах вместо правил проверки (проверка триггеров менее эффективна и более сложна)

Шаблоны

Где искатьКак хорошо выглядит
Platform | Apex✅ Инфраструктура средства обработки триггеров применяет один триггер на объект, пакетирование, разделение проблем и предотвращение рекурсивного выполнения
Platform | Apex✅ Обработчики триггеров делегируют в классы обслуживания для бизнес-логики, сохраняя четкое разделение проблем
Platform | Apex✅ Триггеры используют защиту от рекурсии посредством статических флагов или выделенного класса управления рекурсией
Platform | Apex✅ Будущий Apex используется экономно, для выносок или DML системного объекта
Platform | Apex✅ Вызовы Async Apex используют «В очереди» для «цепочки» сложных DML между транзакциями
Platform | Apex✅ Пакетный Apex используется для больших объемов данных (обрабатывает большие объемы данных с выделенными контролирующими ограничениями на фрагмент)
Platform | Apex✅ Пакетные задания имеют обработку ошибок, которая регистрирует неудачные записи, не останавливая пакетное выполнение целиком
Platform | Apex✅ Bulk API используется только при обработке больших объемов данных (собственные SOAP и REST API, используемые для обработки меньших объемов данных)
Platform | Apex✅ Apex в очереди используется для сложной оркестрации бизнес-правил, внешних выносок с логикой повтора попытки и обработки, пользующейся ограничениями асинхронизации
Platform | Apex✅ Запланированный Apex выполняет обработку по фиксированным расписаниям для ночного обслуживания, ежедневной отчетности, периодической синхронизации интеграции и бизнес-правил на основе времени
Платформа | Стандарты проектирования✅ Сценарии использования для синхронных и асинхронных операций в автоматизации четко расписаны как часть стандартов проектирования
Платформа | Документация✅ Четко расписаны запланированные и потенциальные пути выполнения автоматизаций

Антишаблоны

Где искатьКак плохо выглядит
Platform | Apex⚠️ Несколько триггеров для одного объекта с непредсказуемым порядком выполнения и накладывающейся логикой
Platform | Apex⚠️ Бизнес-логика, встроенная непосредственно в файлы триггера, затрудняет тестирование
Platform | Apex⚠️ Отсутствие инфраструктуры средства обработки триггеров или непоследовательность схем триггеров в объектах
Platform | Apex⚠️ Пакетные задания Apex имеют очень маленький размер области (например, размер области = 1)
Platform | Apex⚠️ Пакетный Apex, используемый для внешних выносок (большие объемы данных Salesforce, переносимые во внешнюю систему посредством пакетного Apex)
Platform | Apex⚠️ Функции Async Apex, используемые произвольно (Методы будущего и Apex в очереди используются непоследовательно или взаимозаменяемо)
Platform | Apex⚠️ Async Apex используется редко
Platform | Apex⚠️ Операции базы данных не имеют четкой, последовательной логики передачи выполнения в пакет Apex при необходимости
Платформа | Стандарты проектирования⚠️ Сценарии использования для синхронных и асинхронных операций не рассматриваются
Платформа | Документация⚠️ Вызов автоматизации не задокументирован

Шаблоны

Где искатьКак хорошо выглядит
Платформа | События платформы✅ События платформы используются для автоматизации под управлением событий, которая отделяет публикаторов от подписчиков
Платформа | События платформы✅ Издатели не знают о подписчиках и публикуют файр-н-файт
Платформа | События платформы✅ Несколько подписчиков реагируют на события независимо посредством потоков, запущенных событиями платформы, триггеров Apex или внешних интеграций
Платформа | События платформы✅ Коды воспроизведения используются для воспроизведения пропущенных событий из любой точки 72-часового окна сохранности
Платформа | События платформы✅ События платформы включают межорганизационные коммуникации, уведомления внешней системы и внутреннюю оркестрацию бизнес-правил

Антишаблоны

Где искатьКак плохо выглядит
Платформа | События платформы⚠️ Прямая связь между издателями и подписчиками, предотвращающая компоновочную автоматизацию
Платформа | События платформы⚠️ Обновление уровня организации напрямую вызывает обновление возможности, уведомление группы, работающей с организациями, и синхронизацию хранилища данных в одной транзакции (плотная связь требует изменений в логике организации при каждой необходимости новой обработки в нисходящем направлении)
Platform | Apex⚠️ Использование события платформы «Опубликовать немедленно» ad hoc (события в реальном времени, используемые вместо «Опубликовать после обязательства», вне зависимости от требований к заказу на публикацию или рисков блокировки записи)

Шаблоны

Где искатьКак хорошо выглядит
Platform | Apex✅ операторы сравнения положительных логических параметров (INCLUDES, IN) используются в качестве основной или только логики
Platform | Apex✅ SOQL избегает = NULL, != NULL или использует их экономно после положительных операторов сравнения
Platform | Apex✅ SOQL не использует операторы LIMIT 1
Platform | Apex✅ SOQL не использует ключевое слово ALL ROWS
Platform | Apex✅ SOQL не отображается в циклах
Platform | Apex✅ Специальные критерии отображаются в SOSL (не SOQL)
Platform | Apex✅ Заявления SOQL позволяют избежать сравнения LIKE или частичного сравнения текста
Platform | Apex✅ SOQL добавляется в блоки try-catch
Platform | Apex✅ Переменные не относятся к жестко запрограммированным значениям (для типов записей, пользователей и т. д.)
Platform | Apex✅ Каждый класс служит одной конкретной цели
Platform | Apex✅ Каждый метод выполняет определенную, детализированную задачу
Platform | Apex✅ Все переменные ввода имеют четкое назначение в классе
Platform | Apex✅ Выполнение кода требует минимального количества ресурсов

Антишаблоны

Где искатьКак плохо выглядит
Platform | Apex⚠️ Выписки SOQL используют критерии NOT, NOT IN в качестве основного или единственного оператора сравнения (неизбирательно)
Platform | Apex⚠️ В операторах SOQL используется ключевое слово ALL ROWS (неизбирательно)
Platform | Apex⚠️ Выписки SOQL используют критерии = NULL, != NULL в качестве основного или единственного оператора сравнения (неизбирательно)
Platform | Apex⚠️ Переменные имеют жестко запрограммированные значения
Platform | Apex⚠️ SOQL отображается в циклах
Platform | Apex⚠️ Выписки SOQL часто используют критерии фильтрации LIKE и специальных символов (неизбирательно)
Platform | Apex⚠️ SOQL не добавляется в блоки try-catch
Platform | Apex⚠️ Выписки SOQL используют LIMIT 1 (неизбирательно)
Platform | Apex⚠️ SOSL редко или не всегда используется для критериев выбора специальных символов
Platform | Apex⚠️ Занятия служат нескольким целям
Platform | Apex⚠️ Методы выполняют несколько задач или методы выполняют задачи, которые не соответствуют заявленной цели класса, в который они входят
Platform | Apex⚠️ Переменные ввода фактически не используются в методах
Platform | Apex⚠️ Методы неоправданного извлечения данных из базы данных или внешних систем

Шаблоны

Где искатьКак хорошо выглядит
Platform | Apex✅ Настраиваемые исключения используются для создания расширенных сообщений об ошибках и логики
Platform | Apex✅ Код добавляет все DML, SOQL, выноски и другие важные этапы процесса в блоки try-catch
Platform | Apex✅ Методы класса базы данных могут использоваться исключительно для всех операций над данными (вместо DML)
Platform | Apex✅ В асинхронном и пакетном контекстах вместо DML используются методы класса базы данных
Платформа | Aura✅ JavaScript обрабатывает все операции над данными и критические этапы процесса в блоках try-catch
Платформа | Aura✅ В блоках try-catch собственный Error JavaScript используется в операторе броска (не используется $A.error())
Платформа | Aura✅ Вся исправляемая логика ошибки отображается в операторе catch и предоставляет четкие сообщения пользователя
Платформа | Поток✅ Потоки с операциями над данными, выносками и другой логикой критической обработки имеют пути ошибок для всех ключевых действий
Платформа | Поток✅ Потоки окон последовательно используют коннекторы ошибок для отображения ошибок пользователям
Платформа | Поток✅ Настраиваемые сообщения об ошибках настроены на ошибки, которые отобразятся на экране
Platform | Веб-компоненты Lightning (LWC)✅ JavaScript объединяет все операции над данными и критические этапы процесса в блоки if ()/else if ()
Platform | Веб-компоненты Lightning (LWC)✅ Все функции @wire используют свойства data и error, предоставленные API
Platform | Веб-компоненты Lightning (LWC)✅ Все if (error)/else if (error) операторы содержат логику для обработки ошибок и предоставления информативных сообщений

Антишаблоны

Где искатьКак плохо выглядит
Platform | Apex⚠️ DML, SOQL, выноски или другие важные этапы процесса, которые не всегда добавляются в пробные блоки
Platform | Apex⚠️ Методы класса базы данных не используются
Platform | Apex⚠️ Операции над данными, выполняемые исключительно посредством DML
Platform | Apex⚠️ Выписки из System.debug отображаются в производственном коде (без комментариев)
Платформа | Aura⚠️ JavaScript не поддерживает последовательное добавление операций над данными и критических этапов процесса в блоки try-catch
Платформа | Aura⚠️ Компоненты используют $A.error()
Платформа | Aura⚠️ Логика исправляемой ошибки не всегда отображается в операторах catch, а сообщения об ошибках пользователям не понятны
Платформа | Поток⚠️ Потоки не используют пути ошибок последовательно или вообще
Платформа | Поток⚠️ Настраиваемые сообщения об ошибках не используются, поэтому пользователям отображается стандартное сообщение «В данном потоке произошла необработанная ошибка»
Platform | Веб-компоненты Lightning (LWC)⚠️ Функции @wire не используют свойства data и error, предоставленные API (или не используют их последовательно)
Platform | Веб-компоненты Lightning (LWC)⚠️ При использовании операторы if (error)/else if (error) фактически не содержат логики для обработки ошибок и предоставления полезных сообщений об ошибках
Platform | Веб-компоненты Lightning (LWC)⚠️ JavaScript не использует последовательно if ()/else if () блоки с операциями над данными или критическими этапами процесса