首页 > 解决方案 > 以编程方式启动 BIM360 Docs 协作

问题描述

为了升级到当前版本的 Revit,我们必须将文件从 BIM360 Teams 迁移到 BIM360 Docs。由于我们有数百个文档,我希望尽可能地自动化这个过程。

Forge API 允许我从 BIM360 Teams 下载所有 Revit 文件。我还可以使用 Revit API 或第三方应用程序(例如Bulk File Upgrader `)将它们全部升级到 Revit 2019。

使用 Forge BIM360 API,我能够以编程方式创建新项目,并从 Team Drive 上传文件和文件夹。我难以以自动化方式完成的步骤是为升级的 Revit 2019 文件启动协作。有没有一种方法可以通过 Revit API 或 Forge API 来完成?或者是否有其他方法可以让我自动完成这两个 Autodesk Cloud Collaboration 解决方案之间的迁移?

我遇到了这个关于发布模型的教程,这表明需要通过 Revit UI 手动启动每个 Revit 文件的协作。我希望找到这个建议的替代解决方案。

谢谢!

标签: autodesk-forgerevit-api

解决方案


我的同事 Eason Kang 康益升证实,您可以使用我之前回答中提供的步骤来实现此目的,如下所示:

Revit 2019.2 和未来版本包括对“单用户工作流”(非工作共享云模型)的支持。同时,他们公开API来启动非工作共享云模型,并将非工作共享云模型转换为工作共享云模型(C4R)。

您可以使用单用户 API 来解决您提到的情况,如下所示:

  • 将下载的文件和非工作共享文件保存到本地文件系统。
  • 通过 API 调用启动非工作共享云模型Document.SaveAsCloudModel
  • 通过 API 将其转换为 C4R 模型Document.EnableCloudWorksharing

这是他的报告,其中包括解决凭证问题的方法:

问题:我想使用 Revit 2020 API 将本地 RVT 保存到我的 BIM360 帐户(已激活 Design Collaboration 服务),但 Revit 总是抛出异常,提示我没有访问权限。我有一个有效的 C4R 许可证,并且能够从我通过 Revit UI 传递给 API 的文件夹 id 打开 C4R 模型。什么不见​​了?

代码:

  doc.SaveAsCloudModel(
    "urn:adsk.wipprod:fs.folder:co.8rtX03jDQXKnssA1FfrEXw",
    doc.Title);

例外:

  • Autodesk.Revit.Exceptions.RevitServerUnauthorizedException:您没有云模型权限来访问云中的此资源

答:您需要在manage.autodesk.com.

回应:谢谢你的澄清。我将“Revit 的云模型”与 C4R 混淆了,并且我的 manage.autodesk.com 中没有设置“Revit 的云模型”权利。

答: “Revit 的云模型”是 Revit 2019.2 以来提供的一项新服务。它是 Revit 和 Revit LT 订阅的一部分。

顺便说一句,与 C4R 模型的主要区别在于,一次只有一个用户可以使用这种方法创建的模型。

回应:太好了!

我根据需要设置了我的 Revit 订阅,按照 Jeremy 上面分享的步骤进行操作,并确认它可以正常工作!

您可以使用以下步骤通过 Revit API 实现目标:

  • 通过对Document.SaveAsCloudModel.
  • 通过 API 将其转换为 C4R 模型Document.EnableCloudWorksharing

这是我实现这个的测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;

namespace adsk.c4r
{
  [Transaction(TransactionMode.Manual)]
  public class Command : IExternalCommand
  {
    public Result Execute(
      ExternalCommandData commandData,
      ref string message,
      ElementSet elements)
    {
      UIApplication uiapp = commandData.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Application app = uiapp.Application;

      string template = app.DefaultProjectTemplate;
      string filename = @"D:\DevZone\ADN\t5021\revit_api_c4r_test_6.rvt";
      string name = System.IO.Path.GetFileName(filename);

      Document doc = app.NewProjectDocument(template);
      doc.SaveAs(filename);

      try
      {
        doc.SaveAsCloudModel(
          "urn:adsk.wipprod:fs.folder:co.aCd1tMmrTxucmJcmtYTLBQ",
          name);

        var cloudPath = doc.GetCloudModelPath();

        if(doc.CanEnableCloudWorksharing())
        {
          doc.EnableCloudWorksharing();
        }

        TaskDialog.Show("Revit",
          string.Format("{0} is a C4R model now", name));

        doc.Close();

        uiapp.OpenAndActivateDocument(cloudPath, new OpenOptions(), false);
      }
      catch(Exception ex)
      {
        System.Diagnostics.Trace.WriteLine(ex.Message);
        return Result.Cancelled;
      }
      return Result.Succeeded;
    }
  }
}

推荐阅读