【问题标题】:Revit API - How to check for open Transactions, Sub-transactions, or Group TransactionsRevit API - 如何检查打开的事务、子事务或组事务
【发布时间】:2020-09-25 04:41:39
【问题描述】:

我正在处理一个打开项目文档和家庭文档的按钮。我正在尝试关闭家庭文档,但是我收到一条错误消息:

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()。我不知道您可以在不打开文档的情况下编辑家庭。这解决了我的问题。不过,我仍然很好奇是否有办法检查未结交易。

【问题讨论】:

    标签: revit-api revit revitpythonshell pyrevit


    【解决方案1】:

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

    你是如何打开这两个文件的?

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-23
        • 2015-03-26
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-09
        相关资源
        最近更新 更多