Отметить транзакцию как неудачную, увеличить счетчик повторов и отложить ее повторную обработку в процессе UiPath - PullRequest
1 голос
/ 01 августа 2020

Есть ли способ пометить транзакцию как сбойную и заставить оркестратор увеличить счетчик повторов, но в то же время отложить обработку транзакции, скажем, на 2 часа?

В моем сценарии я Я ищу некоторые данные в базе данных, и если они не найдены, я хочу пометить транзакцию как неудавшуюся и увеличить количество повторных попыток до 1 в оркестраторе, и я хочу, чтобы эта неудавшаяся транзакция была отложена на пару часов.

Предполагая, что база данных в конечном итоге будет обновлена ​​соответствующими данными через час, когда оркестратор запускает соответствующего бота и пытается повторно обработать транзакцию через 2 часа, она будет успешной.

Если, с другой стороны, база данных все еще не содержит данных, и прошло 2 часа, транзакция снова завершится ошибкой, и мне нужно, чтобы оркестратор увеличил повторную попытку до 2, и он отложит ее еще на 2 часа.

Наконец, если данные через 2 часа все еще нет (т.е. прошло 6 часов), я хочу транс действия для повторного сбоя, увеличьте количество повторных попыток до 3 и прекратите попытки его обработки, предполагая, что оно достигло максимального числа повторных попыток, установленного в очереди в оркестраторе. Вероятно, он отправит электронное письмо, чтобы уведомить администратора.

Несколько вещей, которые я не понимаю:

Почему не повторяется попытка исключения для бизнеса. Для меня вышеупомянутый сценарий представляет собой сбой бизнес-правила (т. Е. Данные не найдены в базе данных), но если я понял, что говорится в рабочем процессе «Установить статус транзакции», он не будет пытаться повторно обработать исключение бизнес-правила. Для меня это бессмысленно, по крайней мере, исходя из моего сценария.

Означает ли это, что единственный способ увеличить счетчик повторов в оркестраторе - это сгенерировать системное исключение? Это просто неправильно, и я не хочу делать снимок в соответствии с SetTransactionStatus при работе с такого рода исключениями. Я что-то упустил ??

Также при вызове отложенного действия я вижу, что он меняет статус транзакции с «не удалось» на «новый», что тоже не идеально, но при необходимости можно смириться с этим. Для меня важно то, что счетчик повторных попыток не сбрасывается в оркестраторе при его вызове, но поскольку при вызове отложенного действия статус меняется с неуспешного на новый, я обеспокоен тем, что он сбросит счетчик, который будет проблема.

Я еще не проверял, остается ли количество повторных попыток при вызове действия «Отложить», поскольку я еще не прошел через весь процесс.

Каков правильный способ добиться этого? Можно ли этого достичь?

Спасибо

PS: Прошу прощения за длинный пост, но я подумал, что предоставил как можно больше деталей.

UPDATE-1

@ kwoxer предположил, что это может быть повторяющийся вопрос, но я не верю, что это так.

Сообщение введите описание ссылки здесь касается того, что происходит к статусам, когда транзакция создается и вызывается какое-то действие для изменения статуса, но не касается того, как обработать неудачное бизнес-правило и как бороться с повторными попытками. и желание повторить попытку через несколько часов должно быть достижимо с использованием встроенных функций, но при этом рассматривается как исключение бизнес-правила, а также полагаться на счетчик повторов, чтобы эта операция не продолжалась вечно.

Это также должен дать вам больше контроля над тем, что должно произойти со статусом, т.е. откладывание неудавшейся транзакции должно быть действительным, и статус не должен сбрасываться на «Новый» o по крайней мере, у вас должна быть возможность установить статус.

Я опубликовал потенциальный «обходной путь» в своем ответе на @kwoxer, но я думаю, что это некрасиво и действительно wi sh был способ справиться с этим с помощью встроенных функций, и я надеюсь, что кто-то может предложить что-то, что я, возможно, пропустил, или лучшее решение.

Спасибо.

1 Ответ

0 голосов
/ 02 августа 2020

Решения пока нет. Вы не можете использовать статус транзакции в Orchestrator для обработки дальнейших запусков процесса.

Вместо этого вы можете сделать что-нибудь еще. Создайте триггер, который позволит процессу запускаться 3 раза в 2, 4 и 6 часов через:

запустить cron

Теперь после того, как первый запуск на 2 завершился неудачно с бизнес-ошибкой, вы записываете количество повторных попыток в любой файл. Но на самом деле при жестком кодировании процесс запускается через задание cron, вам это не нужно. В любом случае, когда процесс запускается, вы просто проверяете этот файл, и у вас есть собственный механизм для обработки ошибок бизнес-процесса. Но в их конвейере сейчас ничего нет.

Другой вариант - использовать очередь вместо записи в файл. Но очередь не поддерживает настраиваемые флаги. Так что, если флагов, заданных через Set transaction status, достаточно, лучше возьмите это.

...