Отметить транзакцию как неудачную, увеличить счетчик повторных попыток и отложить ее повторную обработку в процессе UiPath

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

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

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

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

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

Я не понимаю нескольких вещей:

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

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

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

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

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

Спасибо

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

ОБНОВЛЕНИЕ-1

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

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

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

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

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

Спасибо.


person Thierry    schedule 01.08.2020    source источник
comment
Отвечает ли это на ваш вопрос? Поток транзакции очереди UiPath - требуется лучшее понимание   -  person kwoxer    schedule 01.08.2020
comment
К сожалению, это не так. Он по-прежнему не сообщает мне, как увеличить счетчик повторных попыток для бизнес-исключения. Кроме того, действие «Отложить» изменяет статус, что я также считаю неправильным. Я не верю, что ни то, ни другое невозможно, но я подумал, что проверю, есть ли другой способ сделать это.   -  person Thierry    schedule 02.08.2020
comment
Я подумал об уродливом обходном пути (я так думаю!), Который мог бы сработать. На основе идентификатора транзакции (или некоторого другого уникального ключа) создайте файл флага или запись в базе данных, которая будет отслеживать количество сбоев, увеличивать счетчик транзакции и сбрасывать его в случае успеха. Если он достигает максимального числа повторных попыток, пометьте транзакцию как неудачную. Все, что мне нужно выяснить, это как остановить транзакцию, чтобы она была помечена как успешная, если не возникают ни бизнес, ни системные исключения. Честно говоря, боль, поскольку я считаю, что вам должно быть разрешено откладывать неудачную транзакцию независимо от типа исключения.   -  person Thierry    schedule 02.08.2020


Ответы (1)


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

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

триггер cron

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

Это не совсем то, что вы хотели, но лучший обходной путь, пока UiPath не реализует нечто подобное. Но в их конвейере сейчас ничего нет.


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

person kwoxer    schedule 02.08.2020
comment
Да, я, вероятно, пойду с решением с файлом флага, хорошо! Спасибо, что нашли время помочь! Оценил :) - person Thierry; 03.08.2020