以编程方式启动BIM360 Docs合作

时间:2018-12-22 03:41:55

标签: autodesk-forge revit-api

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

forge API允许我从BIM360 Teams下载所有Revit文件。我还可以使用Revit API或this Bulk File Upgrader之类的第三方应用程序将它们全部升级到Revit 2019。

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

我碰到了this tutorial on publishing models,这表明需要通过Revit UI为每个Revit文件手动启动协作。我希望找到此建议的替代解决方案。

谢谢!

3 个答案:

答案 0 :(得分:0)

很抱歉延迟回答。

此问题听起来与Revit API讨论论坛中提出的问题相似,并升级为ADN案例14906646 Old topic brought back - changing link paths to Cloud paths

我们已经与Revit,C4R,Forge和Desktop Connector开发团队提出了这个问题,引起了热烈的讨论,但尚未找到明确的答案。

我们正在竭尽全力进行研究,并将尽快提供更具结论性的答案。

答案 1 :(得分:0)

开发团队仍在讨论此问题。同时,他们还说:

此请求记录在开发问题REVIT-140793中。

可能有一种变通办法来实现您所需要的。

Revit 2019.2和更高版本包含对“单用户工作流程”的支持-这是非工作共享的云模型。同时,他们公开API以启动非工作共享云模型,并将非工作共享云模型转换为工作共享云模型(C4R)。

因此,我认为您可以使用单用户API解决以下情况:

  1. 保存下载的文件和非工作共享文件(本地文件)。
  2. 通过对Document.SaveAsCloudModel的API调用来启动非工作共享云模型。
  3. 通过API Document.EnableCloudWorksharing将其转换为C4R模型。

答案 2 :(得分:0)

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

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

您可以使用单用户API解决以下情况:

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

这是他的报告,包括以下方式的凭据问题解决方案:

问题:我想使用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的云模型”权利。

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

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

顺便说一句,与C4R模型的主要区别在于,一次只能由一个用户使用此方法创建的模型。

回复:很好!

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

您可以按照以下步骤通过Revit API实现目标:

  • 通过对Document.SaveAsCloudModel的API调用启动非工作共享的云模型。
  • 通过API Document.EnableCloudWorksharing将其转换为C4R模型。

这是我实现此目标的测试代码:

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;
    }
  }
}