1

我正在开发一个按钮,在该按钮上打开了一个项目文档并打开了一个家庭文档。我正在尝试关闭家庭文档,但是我收到一条错误消息:

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

我已经检查了我的所有交易,它们都使用transactionName.Start(document)and启动和提交transactionName.Commit()

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

我也尝试过使用

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

但是,这往往只想关闭我的项目文档。

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

4

2 回答 2

1

是的,有一种方法可以检查打开的交易,它对制作灵活的辅助功能非常有帮助。该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()

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

于 2020-06-07T03:53:59.770 回答
0

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

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

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

于 2020-06-06T19:49:03.910 回答