UiPath: Вычитка asset-ов при недоступном Orchestrator-е

Темплейт Robotic Enterprise Framework в UiPath по умолчанию настроен так, чтобы продолжать выполнение процесса, если Оркестратор недоступен. При этом в лог отправляются предупреждения о каждом asset-e, который UiPath не смог вычитать. Это хорошо только в том случае, если у вас есть значения всех переменных в локальном файле Config.xlsx, но если все данные хранятся в asset-ах, то такой подход может привести к неприятным последствиям.

Вот как выглядит внутренность цикла For..Each для вычитки asset-ов:

Если во время вычитки какого-либо одного или всех asset-ов возникнет проблема, то всё, что мы получим, — это ворнинг в логе. Представим себе, что у нас есть переменная tempFolder, которая содержит путь к папке, которая очищается при каждом запуске процесса. Также этот путь различный для каждого робота, а потому на вкладке Settings файла Config.xlsx значение для этой переменной не указано.

В результате в переменную tempFolder попадет пустое значение, а пустое значение пути соответствует текущей папке, где находится всё содержимое проекта. Процесс попытается очистить текущую папку, сумеет грохнуть несколько файлов и свалится при попытке удалить заблокированные процессом UiPath.exe файлы. С такими ситуациями обычно тяжело разбираться, а потому необходимо явно останавливать процесс, если при вычитке asset-ов произошла ошибка.

Если попросту заменить активити Log Message на Throw, то станет ещё хуже, так как весь блок For..Each тоже обёрнут в Try..Catch, при этом в случае исключения в лог помещается уже не Warning, а Trace, еще больше усложняя анализ проблемы. Поэтому лучше всего избавиться от обоих блоков Try..Catch и оставить простую конструкцию:

Теперь процесс остановится в самом начале, не сумев вычитать хотя бы один asset и не пытаясь выполнять какие-либо дальнейшие действия.

И напоследок несколько вариантов ошибок, которые могут случаться при вычитке asset-ов:

  • Loading asset failed: Orchestrator information is not available. Please check if UiPath Robot Service is started.
  • Loading asset failed: Could not find an asset with this name. Error code: 1002
  • Get Orchestrator asset: The remote name could not be resolved: ‘cloud.uipath.com’
  • Get Orchestrator asset: Unable to connect to the remote server
  • A task was canceled

Последняя ошибка наиболее интересна, так как случается редко и обычно происходит из-за того, что с серверами Orchestrator-a что-то не в порядке.