Try-Catch с «Configure run after» в Power Automate
Паттерн Try-Catch в Power Automate: с помощью областей (scopes) и Configure run after контролируемо перехватывайте, протоколируйте и сообщайте об ошибках.
Сбой посреди flow неприятен, а сбой, который никто не замечает, — опасен. В Power Automate нет встроенного Try-Catch, как в классических языках программирования, но с помощью комбинации областей (Scopes) и настройки Configure run after ты можешь построить именно такой паттерн самостоятельно. В результате получается flow, который при ошибке не просто обрывается, а реагирует контролируемо, протоколирует ошибку и при необходимости сообщает о ней.
В этой статье мы шаг за шагом покажем, как строить области Try, Catch и Finally, как правильно настроить для них условия выполнения после (run-after) и как при ошибке добраться до самого текста ошибки. Основу для этого дает официальная документация Microsoft, а именно руководство по надежной обработке ошибок и обзор областей в облачных flow.
Почему в Power Automate нет классического Try-Catch
В языках программирования исключение перехватывается блоком Try-Catch: код выполняется в части Try, а при ошибке управление автоматически переходит в часть Catch. Power Automate работает иначе: у каждого действия есть условие выполнения после (run-after), которое по умолчанию установлено на «выполнено успешно». Если предыдущее действие завершается ошибкой, следующее действие просто пропускается, и весь flow прерывается, если ты не настроишь иначе.
Именно здесь и вступает в игру паттерн Try-Catch: ты группируешь свою основную логику в области (Scope), добавляешь вторую область для обработки ошибок и настраиваешь ее условие выполнения после так, чтобы она запускалась только при ошибке в первой области. Так ты получаешь структурно то же поведение, что и Try-Catch, только настроенное через интерфейс, а не через код.
Структура: области Try, Catch и Finally
Для полноценного паттерна обработки ошибок ты создаешь три области подряд:
- Try: Область с твоей основной бизнес-логикой, то есть действиями, которые должны выполняться в штатном режиме.
- Catch: Вторая область сразу под ней, которая запускается только тогда, когда в области Try что-то идет не так. Здесь ты протоколируешь ошибку или отправляешь уведомление.
- Finally: Третья область, которая выполняется всегда, независимо от результата — успешно ли завершилась область Try или нет. Удобно для завершающих операций, таких как закрытие соединения или установка поля статуса.
Каждую область ты добавляешь через Добавить действие и поиск «Область», подробно описано в руководстве Создание и использование областей. Обязательно давай областям осмысленные имена: «Try», «Catch» и «Finally» понятны с первого взгляда и делают flow читаемым и для коллег, которые позже возьмут его в работу.
Пошагово: настройка Configure run after
Вот как настроить условие выполнения после для области Catch:
- Открой область Catch в конструкторе и выбери меню «...» в правом верхнем углу.
- Выбери Configure run after (по-немецки: «Ausführen nach konfigurieren»).
- В списке появляется предыдущая область, то есть «Try», с четырьмя флажками: выполнено успешно, завершилось ошибкой, пропущено и истекло время ожидания.
- Сними флажок с «выполнено успешно» и вместо этого установи флажки «завершилось ошибкой», «пропущено» и «истекло время ожидания».
- Подтверди кнопкой Готово.
Таким образом область Catch запускается только тогда, когда область Try завершается не совсем гладко. Для области Finally ты действуешь так же, но устанавливаешь все четыре флажка, включая «выполнено успешно». Так эта область выполняется в любом случае, независимо от того, чем закончилась область Try. Важно: хотя бы один флажок всегда должен оставаться активным — полностью пустым условие сохранить нельзя.
Считывание ошибки в области Catch
Область Catch, которая знает лишь, что что-то пошло не так, но не знает что именно, мало помогает в поиске причины. Чтобы получить конкретное сообщение об ошибке, ты используешь в области Catch действие Фильтр массива в сочетании с функцией выражения `result()`, которая возвращает статус и вывод предыдущих действий. Из этого отфильтрованного ответа ты извлекаешь код и текст ошибки и помещаешь их, например, в действие Создать HTML-таблицу, которое ты отправляешь по электронной почте или сохраняешь в списке журнала ошибок в SharePoint или Dataverse.
Кроме того, функция `workflow()` предоставляет метаданные о текущем запуске flow, например ID среды и flow. В сочетании с действием Составить ты можешь построить из этого прямую ссылку на неудачный запуск, которую вставляешь в уведомление. Таким образом, в почтовый ящик попадает не просто информация «произошла ошибка», а сразу путь к тому месту, где ты можешь ее устранить.
Типичные подводные камни
- Глубина вложенности: Power Automate допускает максимум восемь вложенных уровней из областей, условий, switch-блоков и циклов. Если ты вкладываешь паттерны Try-Catch друг в друга, следи за этим ограничением, иначе flow больше нельзя будет сохранить.
- Совокупный статус вместо отдельного действия: Если область завершается ошибкой, конструктор сначала сообщает только статус «Сбой» для всей области целиком. Какое именно действие внутри нее было фактически виновато, ты увидишь только развернув область в журнале выполнения.
- Триггеры и действия ответа не должны находиться внутри области. Они должны оставаться снаружи, чтобы flow корректно запускался и отвечал.
- Слишком много областей: Не каждому отдельному действию нужна собственная область. Используй паттерн Try-Catch целенаправленно там, где он действительно приносит пользу, например при критичных операциях записи или обращениях к внешним системам, иначе flow станет излишне запутанным.
Если ты хочешь надежно встроить этот паттерн в более крупный продуктивный flow или не уверен, где именно в твоем процессе действительно нужна область Catch, тебе поможет консалтинг NordFlux по Power Automate. При этом ты сохраняешь полный контроль над своим flow и своими данными, мы лишь помогаем с грамотным построением.
Часто задаваемые вопросы
Является ли Configure run after тем же самым, что и Try-Catch в языке программирования?
Технически нет, функционально — да. В Power Automate нет встроенной концепции исключений, при которой действие автоматически переходит на путь обработки ошибки. Но с помощью условия выполнения после для области ты достигаешь того же поведения: область Catch запускается только тогда, когда область Try завершается ошибкой, точно так же, как блок catch при исключении.
Нужно ли устанавливать отдельное условие выполнения после для каждого отдельного действия?
Нет. Если ты группируешь свои действия в области Try, достаточно одной настройки Configure run after для всей области целиком, вместо того чтобы защищать каждое действие по отдельности. Именно это одно из практических преимуществ областей по сравнению с множеством отдельных условий выполнения после на уровне действий.
Что произойдет, если я случайно оставлю флажок «выполнено успешно» установленным для области Catch?
Тогда область Catch будет запускаться и в том случае, если область Try завершилась успешно, что противоречит смыслу пути обработки ошибок. Для настоящей области Catch последовательно снимай флажок с «выполнено успешно» и включай только «завершилось ошибкой», «пропущено» и «истекло время ожидания».
Могу ли я дополнительно использовать политику повторов вместе с Configure run after?
Да, эти два механизма хорошо дополняют друг друга. Политика повторов в настройках действия сначала пытается автоматически повторно выполнить временно неудавшееся действие, в идеале с экспоненциально растущими интервалами. Только если действие завершается ошибкой и после всех повторов, вступает в силу твоя область Catch через условие выполнения после.
Как узнать, какое действие внутри неудавшейся области было настоящей причиной проблемы?
Открой соответствующий запуск flow в журнале выполнения и разверни там неудавшуюся область. Поскольку область сообщает наружу только один совокупный статус, конкретное сообщение об ошибке вместе с красной пометкой ты увидишь только на уровне отдельного действия внутри области.
NordFlux UG (haftungsbeschränkt)
NordFlux создаёт цифровых сотрудников для организаций: автоматизации и КИ-агентов, которые берут на себя повторяющуюся работу. Вы сохраняете контроль.
Конкретные вопросы по автоматизации или КИ?
В рамках бесплатного первичного анализа мы напрямую обсудим Ваш случай. Без обязательств.