Как обрабатывать сбои в 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 по обнаружению и обработке диалогов и сбоев, особенно последнее обсуждение по сбору и возвращению информации о сбоях.

Другие вопросы по тегам