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()
到目前为止,它对我很有帮助,希望对您有所帮助!
我正在开发一个按钮,我可以在其中打开一个项目文档和一个家庭文档。我正在尝试关闭家庭文件,但我收到一条错误消息:
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()
到目前为止,它对我很有帮助,希望对您有所帮助!