如何创建公共 Forge 设计自动化活动和包?

Posted

技术标签:

【中文标题】如何创建公共 Forge 设计自动化活动和包?【英文标题】:How to create public Forge Design Automation Activity and Package? 【发布时间】:2021-06-19 02:29:38 【问题描述】:

我想创建一个公开的Design Automation Activity 和 Package,以便其他具有未知 ClientId 和 Secret 的 Forge 应用程序可以使用我们的公司 DA 工具。所以我在有效载荷上设置了isPublic: true 标志,但令我非常绝望的是,它不起作用。

看看我下面的POST activity有效载荷:

const activityParams = 
  id: DA_ACTIVITY_ID,
  commandLine: [ 
    `$(engine.path)\\accoreconsole.exe ` +
    `/i \"$(args[inputDwg].path)\" ` + 
    `/al \"$(appbundles[$DA_APP_BUNDLE_ID].path)\" ` + 
    `/s \"$(settings[script].path)\"` 
  ],
  parameters: 
    inputDwg: 
      description: "input .dwg",
      localName: "input.dwg",
      ondemand: false,
      required: true,
      verb: "get",
      zip: false
    ,
    result: 
      description: "result .json",
      localName: "result.json",
      ondemand: false,
      required: false,
      verb: "put",
      zip: false
    
  ,
  settings: 
    script: "(command \"EXTRACTGEOBIMDATA\")\n"
  ,
  description: "GeoBIM Extract Data",
  engine: DA_ENGINE,
  appbundles: [
    fullAppBundleId
  ],
  isPublic: true

我注意到的第一件事是成功创建活动后的响应不包含isPublic字段:

我不得不注意的第二件事是尝试针对该活动执行工作项会导致错误:

请注意,当使用相同的凭据运行时,活动和工作项运行良好。

【问题讨论】:

isPublic 是 DA V2 的功能,V3 中没有,需要与大家分享活动。这是新的工作流程,但我们默认允许 0 个公共共享。 forge.autodesk.com/en/docs/design-automation/v3/reference/http/… 谢谢伙计,那么你是如何在伪造应用程序之间创建共享的呢?我只是在那里看到一个 GET 端点? 【参考方案1】:

我们目前不允许人们创建公共活动。这是因为尚不清楚当事方如何建立必要的信任关系。听起来在您的场景中,共享将发生在同一个组织内。他们是否拥有相同的电子邮件域(例如 xyz@somecompany.com 将与 bla@somecompany.com 共享)?

【讨论】:

完全没有,我们希望我们可以部署一些公司活动和相关的捆绑包,我们的客户在运行我们的 Web 服务执行 DA 作业时可以利用这些包,同时提供他们自己的 Forge 凭据……这听起来像是实际上是个坏消息。 AppBundles 也一样吗?谢谢 是的,AppBuncles 也一样。同样,我们不允许这样做的原因是我们担心公共应用程序包/活动可能会伤害其用户。 今天的解决方法是,为您希望与之共享活动/应用程序包的每个客户创建一个别名,并通过设置接收器参数与单个客户共享它伪造应用程序密钥/昵称。 您能否指出一些更具体的文档来说明如何实现这一目标?我得到了别名部分,但共享和设置接收器参数部分对我来说非常模糊。另外,根据我上面的问题,那么您实际上如何在伪造应用程序之间创建共享?我只是在那里看到一个 GET 端点:forge.autodesk.com/en/docs/design-automation/v3/reference/http/…。谢谢。【参考方案2】:

Design Automation V3 允许您使用单独的别名与特定的 Forge 应用共享 Activity 或 AppBundle。

如果您在为活动和 AppBundle 创建别名时查看文档,可以在名为“receiver”的请求正文中设置一个可选参数。如果您要共享的 Forge 应用在 Design Automation 中有一个设置,您可以指定一个 Forge 应用客户端 ID 或昵称。

请注意,如果您要设置为接收者的 Forge 应用使用昵称,则必须使用该昵称而不是应用客户端 ID。

https://forge.autodesk.com/en/docs/design-automation/v3/reference/http/activities-id-aliases-POST/ https://forge.autodesk.com/en/docs/design-automation/v3/reference/http/appbundles-id-aliases-POST/

【讨论】:

请注意,今天我们只支持为每个别名指定一个接收者 谢谢,Forge 文档应该得到更多的爱和清晰:我需要某种程度来理解“receiver:string - 与之共享别名的用户”。实际上的意思是“你想设置为接收者的Forge应用。如果它使用昵称,则必须使用该昵称,否则使用应用clientId。”

以上是关于如何创建公共 Forge 设计自动化活动和包?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Forge API 中向元素添加参数

Autodesk Forge 设计自动化 - Inventor - failedInstructions (FailedMissingOutput)

Autodesk 设计自动化活动:如何区分输入和输出参数

在 Forge Viewer 中显示设计自动化 API 的输出

Autodesk Forge 设计自动化/模型衍生 API - 查看器缓存 svf 文件

Forge API - Design Automation Inventor 2022 兼容性