如何处理Revit API中的失败?

时间:2018-06-12 10:03:59

标签: revit-api pyrevit

我正在尝试避免在使用Revit 2018 API复制大量墙壁时收到警告消息,例如当某些墙壁重叠时。为此,我正在实现Building Coder中记录的FailureHandler类,稍微适用于Python,同时也记录了here

现在,在一个简单的测试案例中,复制一些不会引起任何警告/错误的(我试过没有处理故障,只是复制墙壁,它完美无缺,没有任何错误),当我实现并使用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()

同样,如果没有所有这些failureHandler注意事项,此例程会创建没有警告/错误的墙

有人可以解释一下为什么会回滚吗? FailureProcessingResult.ProceedWithCommit不会暗示事务应该提交吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

请浏览Detecting and Handling Dialogues and Failures上的Building Coder主题组,尤其是关于Gathering and Returning Failure Information的最新讨论。