Как создать несколько файлов в API автоматизации проектирования для редактирования и загрузки результата в виде одного zip-файла - PullRequest
0 голосов
/ 03 июля 2019

Я работаю над проектом, в котором мне необходимо создать несколько файлов Revit, сжать их все вместе и загрузить файл ZIP в качестве вывода в API автоматизации проектирования для Revit.Мой проект полностью работает, как и ожидалось, на моем локальном компьютере, но когда я загружаю свой 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, затем используются для создания zip-файла с именем «RevitObjects.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 автоматизации проектирования для Revit.Разве нам не разрешено выполнять операцию удаления в рабочем каталоге.Я попытался создать папку и выполнить ту же операцию, упомянутую выше, но получил сообщение об отказе в доступе.Дайте мне знать, где я ошибся.Также будет оценено любое руководство для достижения этой целиСпасибо

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Если аргумент json очень большой, вы можете предоставить «inputParameters.json» в качестве входного файла вместо передачи всего в полезную нагрузку WorkItem

0 голосов
/ 04 июля 2019

Прежде всего, да, система Design Automation поддерживает вывод нескольких файлов revit, очень просто, что вам просто нужно установить параметр zip равным «true» вашего вывода, и в вашем плагине сохранить весь ваш выходной файл в папку, которую вы назвали в выходном параметре "localName", пожалуйста, проверьте мою запись в блоге по адресу https://forge.autodesk.com/blog/how-generate-dynamic-number-output-design-automation-revit-v3 для всех подробностей.

Вам не разрешен доступ к любым другим папкам, кроме текущей рабочей папки, вы можете создать подпапку в текущей рабочей папке и поместить все свои файлы туда.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...