Документация 0.4 Справочник действий
Попытка / перехват
control.tryCatch · Управление · контейнер
Перехватывает ошибки шагов «Try»; «Finally» выполняется всегда
Перехватывает ошибки шагов ветки „Try“: вместо остановки процесса выполняются шаги ветки „Catch“, а ветка „Finally“ выполняется всегда — и после успеха, и после ошибки. Так обрабатывают ожидаемые сбои: дубликат в очереди, неверные данные заявки, недоступный сайт — и продолжают работу со следующим элементом.
Свойства #
| Свойство | Имя в файле | Значение | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|---|
| Переменная ошибки | errorVariable |
имя переменной | нет | error |
Результат #
Действие не возвращает значений.
Вложенные шаги #
| Ветка | Имя в файле |
|---|---|
| Try | try |
| Catch | catch |
| Finally | finally |
Как работает #
- Переменная ошибки (
errorVariable, по умолчаниюerror) — в ветке „Catch“ в ней объект{ code, message, stepId }: код ошибки (ElementNotFound,UserThrow,QueueItemDuplicate…), текст и id шага, где она случилась. Пример условия:error.code === 'QueueItemDuplicate'. - Ошибка внутри „Catch“ поднимается выше — к внешнему перехвату или останавливает процесс.
- При нажатии «Стоп» ветка „Finally“ не выполняется: запуск должен закончиться быстро.
- Перехваченная ошибка видна в «Лог» студии и в журнале задания; шаг с ошибкой отмечается в дизайнере.
Ошибки #
Сам шаг ошибок не создаёт. Чтобы после разбора всё же завершить процесс ошибкой, добавьте в „Catch“ шаг
control.throw — например, со своим текстом и {{ error.message }}.
Пример #
Пропустить заявку, которая уже есть в очереди, а другие ошибки не скрывать:
{
"type": "control.tryCatch",
"props": { "errorVariable": "error" },
"children": {
"try": [ { "type": "orch.queueAddItem", "props": { "queue": "Заявки", "payload": "row", "reference": "{{ row['Номер'] }}" } } ],
"catch": [
{
"type": "control.if",
"props": { "condition": "error.code === 'QueueItemDuplicate'" },
"children": {
"then": [ { "type": "control.log", "props": { "level": "warn", "message": "Заявка {{ row['Номер'] }} уже есть — пропущена" } } ],
"else": [ { "type": "control.throw", "props": { "message": "Не удалось добавить заявку: {{ error.message }}" } } ]
}
}
]
}
}