Оперативное совершенство - схемы автоматизации
Узнайте больше о операционном совершенстве → Автоматизация и эффективность
Шаблоны
| Где искать | Как хорошо выглядит |
|---|---|
| Платформа | Панели мониторинга | ✅ Все показатели, связанные с КПЭ, включены как минимум в одну панель мониторинга |
| Платформа | Документация | ✅ Выводы для каждой автоматизации измеримы и привязаны к срокам |
| Платформа | Документация | ✅ Для каждого КПЭ указаны подотчетные заинтересованные лица |
Антишаблоны
| Где искать | Как плохо выглядит |
|---|---|
| Платформа | Панели мониторинга | ⚠️ Отчетность по КПЭ не существует или в панелях мониторинга отсутствуют показатели, связанные с некоторыми КПЭ |
| Платформа | Документация | ⚠️ КПЭ существуют без подотчетных заинтересованных лиц |
| Платформа | Документация | ⚠️ КПЭ не существуют для автоматизации или имеют неясные временные промежутки для измерений |
Шаблоны
| Где искать | Как хорошо выглядит |
|---|---|
| Платформа | Поток | ✅ 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 () блоки с операциями над данными или критическими этапами процесса |