如何在设计自动化中创建多个文件 api for revit 并将结果下载为一个 zip 文件

How to create multiple files in design automation api for revit and download result as one zip file

我正在处理一个项目,我需要创建多个 revit 文件,将它们全部压缩在一起,然后下载 zip 文件作为 Revit 设计自动化 API 的输出。

我的项目在我的本地机器上完全按预期运行,但是当我上传我的 appbundle 并执行我的工作项时,我得到一个 "failedInstructions" 状态。

我不知道是否可以在设计自动化中创建多个 revit 文件API

以下是我尝试过的:

这是我的工作项目 json,你看我正在传递一个 json 数组,其中包含墙的示例数据。

 "arguments":{
        "ElementParams":{
            "url":"{'elementdata':[[{'Keys':'Sytème','Value':'Wall_1'},{'Keys':'Thickness','Value':'120.00'},{'Keys':'Length','Value':'2500.00'},{'Keys':'Height','Value':'1200.00'}],[{'Keys':'Sytème','Value':'Wall_2'},{'Keys':'Thickness','Value':'120.00'},{'Keys':'Length','Value':'2500.00'},{'Keys':'Height','Value':'1200.00'}],[{'Keys':'Sytème','Value':'Wall_3'},{'Keys':'Thickness','Value':'120.00'},{'Keys':'Length','Value':'2500.00'},{'Keys':'Height','Value':'1200.00'}],[{'Keys':'Sytème','Value':'Wall_4'},{'Keys':'Thickness','Value':'120.00'},{'Keys':'Length','Value':'2500.00'},{'Keys':'Height','Value':'1200.00'}]]}"
            },

        "resultFamily":{
            "verb":"put",
            "url":"https://storage.googleapis.com/bucketname/RevitObjects.zip?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
            "headers": {
              "Authorization": "",
              "Content-Type": "application/octet-stream"
            }
        }
    }



在我的代码中,我循环创建了一个新文档。

Document doc = app.NewProjectDocument(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\" + "DefaultTemplates.rte");



并保存并关闭当前文档

SaveAsOptions options = new SaveAsOptions();
options.OverwriteExistingFile = true;
doc.SaveAs(Assembly.GetExecutingAssembly().Location) + "\" + fileName, options);

doc.Close(); //Closing the document

List<string> files = Directory.GetFiles(Assembly.GetExecutingAssembly().Location) + "\").Where(a => a.Contains(Path.GetFileNameWithoutExtension(fileName)) && a.Split('.').Count() > 2).ToList();
foreach (var fl in files)
{
if (File.Exists(fl))
File.Delete(fl);
}

byte[] filebytes = File.ReadAllBytes(GlobalData.TemplatePath + "\" + GlobalData.DestinationFile);
GlobalData.FileList.Add(GlobalData.DestinationFile, filebytes);


这里fileName为Wall_1、Wall_2、Wall_3和Wall_4会循环出现
我在这里做的是保存创建的 revit 文件示例 Wall_1
关闭文件后,有一份文件创建示例 Wall_1.0001.rvt。我删除了所有创建的附加文件并保留一个最终版本并将其添加到文件字节中。

在 byte[] filebytes 中添加的数据然后用于创建名称为 "RevitObjects.zip" 的 zip 文件
之后我删除所有文件。

这个过程在我的本地机器上运行完美,但是当我执行工作项时,创建的日志说明如下:

[07/03/2019 13:47:38] Error: An unexpected error happened during phase CoreEngineExecution of job.
[07/03/2019 13:47:38] Job finished with result FailedExecution
[07/03/2019 13:47:38] Job Status:
{
  "status": "failedInstructions",

日志中没有其他错误消息。

让我知道在设计自动化中是否可以创建多个 revit 文档 api for revit
是否不允许在工作目录下进行删除操作
我尝试创建一个文件夹并执行与上述相同的操作,但我收到一条访问被拒绝的消息。
让我知道我哪里出错了。也将不胜感激任何完成任务的指导
谢谢

首先,是的,Design Automation 系统支持多个 revit 文件输出,您只需将参数 zip 设置为输出的 "true" 非常简单,然后在您的插件中保存您所有的输出文件都保存在您在 "localName" 的输出参数中命名的文件夹中,请查看我位于 https://forge.autodesk.com/blog/how-generate-dynamic-number-output-design-automation-revit-v3 的博客 post 了解所有详细信息。

您不能访问除当前工作文件夹以外的任何其他文件夹,您可以在当前工作文件夹下创建子文件夹并将所有文件放在那里。

希望对您有所帮助。

如果 json 参数非常大,您可以提供一个 "inputParameters.json" 作为输入文件,而不是传递 WorkItem 负载中的所有内容