Как обрабатывать сбои в Revit API?
Я пытаюсь избежать получения предупреждающих сообщений при копировании множества стен с помощью Revit 2018 API, например, когда некоторые перекрываются. Для этого я реализую класс FailureHandler, как описано в Building Coder, немного адаптированный для Python, как также описано здесь.
Теперь, в простом тестовом примере, копирующем несколько стен, которые не вызывают каких-либо предупреждений / ошибок (я пытался, не заботясь о сбоях, просто копируя стены, это работает без ошибок), когда я реализую и использую FailureHandler класс, все мои транзакции создания стены являются RolledBack. Они не должны, так как нет никаких предупреждений! Я сократил реализацию FailureHandler до ее строгого минимума, чтобы попытаться понять поведение, но он продолжает откатывать транзакции...
Вот моя реализация FailureHandler:
class FailureHandler(IFailuresPreprocessor):
def __init__(self):
self.ErrorMessage = ""
self.ErrorSeverity = ""
def PreprocessFailures(self, failuresAccessor):
return FailureProcessingResult.ProceedWithCommit
Как вы можете видеть, я ожидал, что это просто продолжит транзакцию. Но это откатывается.
Основная рутина:
wallTransaction = Transaction(doc,"creating new walls")
wallTransaction.Start()
failureHandlingOptions = wallTransaction.GetFailureHandlingOptions()
failureHandler = FailureHandler()
failureHandlingOptions.SetFailuresPreprocessor(failureHandler)
failureHandlingOptions.SetClearAfterRollback(True)
wallTransaction.SetFailureHandlingOptions(failureHandlingOptions)
newWall = Wall.Create(doc, geoLine, wallTypeId, levId, wallHeight, 0, False, True)
wallTransaction.Commit()
print wallTransaction.GetStatus()
Опять же, без учета всех этих отказов и ошибок, эта процедура создает стены без предупреждения / ошибок.
Может кто-нибудь объяснить мне, почему он откатывается? Разве FailureProcessingResult.ProceedWithCommit не будет означать, что транзакция должна фиксироваться?
Большое спасибо!
1 ответ
Пожалуйста, изучите тематическую группу Building Coder по обнаружению и обработке диалогов и сбоев, особенно последнее обсуждение по сбору и возвращению информации о сбоях.