【问题标题】:Returning Revit elements data as JSON in Forge API在 Forge API 中以 JSON 形式返回 Revit 元素数据
【发布时间】:2020-11-07 11:54:45
【问题描述】:

在使用 Forge API 的 Web 客户端中,我想在模型中获取 Revit 元素的 JSON 数组。使用设计自动化 API,我正在创建一个使用 FilteredElementCollector 检索元素的活动,但是一旦我有了这些元素,我就不确定在我的 Web 服务中检索这些结果的最佳方法。此 Activity 不需要写回 .rvt 文件。

CountItApp 教程 writes the results 到云存储中的 results.txt 文件,然后 Web 应用程序 downloads 该 results.txt 文件并解析结果。在我的 Web 客户端上,我想显示这些结果,但文件 I/O 似乎不是 JSON 数据的一个很好的解决方案。我考虑过的几个替代方案:

  1. 将结果写入外部数据库并在 WorkItem 完成后在我的 Web 应用程序中查询该数据库。据我所知,这是不可能的,因为 Forge 的 restrictions 在 Activity 中进行网络访问。
  2. 使用onComplete 回调传递结果。我不知道这是否可能。

【问题讨论】:

  • 我在答案中添加了更多细节。如果这不起作用并需要更多帮助,请联系forge[DOT]help[AT]autodesk[DOT]com

标签: autodesk-forge autodesk-designautomation


【解决方案1】:

设计自动化允许您使用POST 回调发布带有输出参数的工作项。如果您的活动生成的输出文件是 json 文件,这允许您以 application/json 接收输出数据。

设计自动化还允许您在输出 url 中指定变量 workitem.id。当您的工作项完成时,我们将使用 variable expanded 将此 url 称为该工作项的 id。此动态变量路径允许您确定与该回调关联的工作项 ID。

您可以这样做。首先用硬编码的本地名称result.json定义一个带有这样一个输出参数(verb: post)的活动:

"results": {
    "zip": false,
    "ondemand": false,
    "verb": "post",
    "description": "Results",
    "required": true,
    "localName": "results.json"
}

在您的 appbundle 代码中,将 json 内容以硬编码名称 result.json 的文件保存到当前工作文件夹。

using (StreamWriter sw = File.CreateText("result.json"))
{
    sw.WriteLine(JsonConvert.SerializeObject(data, Formatting.Indented));
    sw.Close();
}

然后你可以像这样发布一个工作项:

"result": {
    "verb": "post",
    "url": "https://www.yourserver.com/results/$(workitem.id)"
}

在回调的服务器实现中,您将获取 json 内容作为有效负载。您可以读取结果并使用套接字或您可能与您的客户端进行的任何其他通信方式与工作项 ID 对应的客户端进行通信。

【讨论】:

  • 谢谢,拉胡尔。我认为这让我得到了我需要的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
相关资源
最近更新 更多