Revit API - 如何检查打开的事务、子事务或组事务

Revit API - How to check for open Transactions, Sub-transactions, or Group Transactions

我正在开发一个按钮,我可以在其中打开一个项目文档和一个家庭文档。我正在尝试关闭家庭文件,但我收到一条错误消息:

Autodesk.Revit.Exceptions.InvalidOperationException: 'Close is not allowed when there is any open sub-transaction, transaction, or transaction group.'

我检查了我所有的交易,它们都是使用 transactionName.Start(document)transactionName.Commit()

开始和提交的

有谁知道检查任何正在进行的活动交易的方法吗?

我也试过使用

'RevitCommandId closeDoc = RevitCommandId.LookupPostableCommandId(PostableCommand.Close); uiapp.PostCommand(closeDoc);'

然而,这往往只是想关闭我的项目文件。

////////////////////////////////更新///////// //////////////////// 太棒了,我刚刚发现我不需要使用 uiapp.OpenAndActivateDocument()。我不知道您可以在不打开文档的情况下编辑家庭。这解决了我的问题。不过,我仍然很好奇是否有办法检查未结交易。

Afaik,Revit API 不允许您从外部检查事务是否已启动。您需要访问 Transaction 对象本身以检查其状态。如果不是您自己创建的,则无法访问它。

你是怎么打开这两个文件的?

您在其中执行了哪些 Revit 命令?

是的,有一种方法可以检查打开的交易,它对制作灵活的辅助函数很有帮助。 Document 对象有一个 IsModifiable 属性 - 本质上,如果一个交易是开放的,那么这就是 True。

我是这样使用的:

autoTransaction = False
if not document.IsModifiable:
     t = Transaction(document, 'New Transaction cause no transaction was open')
     t.Start()
     autoTransaction = True

# go ahead and modify the database

if autoTransaction:
     t.Commit()

到目前为止,它对我很有帮助,希望对您有所帮助!