Обработка сбоев при открытии файла Revit (перед любой транзакцией)

Я разрабатываю плагин Revit на С# для экспорта данных из файлов Revit. Этот плагин используется через Design Automation API (то есть, очевидно, без пользовательского интерфейса). Весь процесс отлично работает для некоторых файлов RVT. К сожалению, для некоторых других файлов открытие документа завершается ошибкой до, любая транзакция началась, поэтому я изо всех сил пытаюсь понять, как я могу отловить эти ошибки открытия (и, возможно, удалить соответствующие неудачные элементы), аналогично тому, что предлагается в официальной документации. Транзакции внутри с использованием IFailuresPreprocessor.

Есть ли у кого-нибудь предложения о том, как обрабатывать ошибки во время открытия самого документа? Извините, если я пропущу что-то очевидное. Спасибо!

Часть кода C# доступна здесь (базовый код, как в руководствах по автоматизации проектирования), а также журналы ошибок.

    if (data == null) throw new ArgumentNullException(nameof(data));

    Application rvtApp = data.RevitApp;
    if (rvtApp == null) throw new InvalidDataException(nameof(rvtApp));

    string modelPath = data.FilePath;
    if (String.IsNullOrWhiteSpace(modelPath)) throw new InvalidDataException(nameof(modelPath));

    Document doc = data.RevitDoc;
    if (doc == null) throw new InvalidOperationException("Could not open document.");

    using (Transaction transaction = new Transaction(doc))
    {
        ...
    }

Отчет журнала от Design Automation API:

[03/18/2022 10:18:46] Initialize and  get RCE: (VersionBuild) 22.1.21.13 (VersionNumber) 2022 (SubVersionNumber) 2022.1.2
[03/18/2022 10:31:11] Failure #0: FailureDefinitionId-'0d5f227d-a4fd-4bc2-b539-1a13cd9a9173', Severity-'Error', Description-'Line is too short.', Resolution-'Delete Element(s)'.
[03/18/2022 10:31:11] Failure: Unable to continue because of posted errors. Rolling back transaction.
[03/18/2022 10:31:17] Autodesk.Revit.Exceptions.OperationCanceledException: Opening was canceled.
[03/18/2022 10:31:17]    at Autodesk.Revit.ApplicationServices.Application.OpenDocumentFile(ModelPath modelPath, OpenOptions openOptions)
[03/18/2022 10:31:17]    at DesignAutomationFramework.DesignAutomationData..ctor(Application revitApp, String mainModelPath)
[03/18/2022 10:31:17]    at DesignAutomationFramework.DesignAutomationReadyEventArgs..ctor(Application revitApp, String mainModelPath)
[03/18/2022 10:31:17]    at DesignAutomationFramework.DesignAutomationBridge.SetDesignAutomationReady(Application revitApp, String mainModelPath)
[03/18/2022 10:31:17]    at RevitCoreEngineTest.RceConsoleApplication.Program.UserMain(CommandLineArgs cl)
[03/18/2022 10:31:19] RESULT: Failure - Result of running user app is failure
[03/18/2022 10:31:19] Finished running.  Process will return: TestError

Вы уже ознакомились с этой документацией и попробовали ее? forge.autodesk.com/en/docs/design-automation/v3/… Не получилось?

Rahul Bhobe 18.03.2022 13:46

Привет @RahulBhobe. Большое спасибо за вашу ссылку. Теперь мне удалось заставить его работать, разработав собственный обработчик ошибок (на основе существующего примера кода) и используя «Application.RegisterFailuresProcessor(myFailureProcessor)», как это предлагается в документе.

rajan_brussels 22.03.2022 18:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

предупреждающий глотатель успешно используется в Forge Design Automation для Revit. Вы также можете ознакомиться с другими предложениями от The Building Coder или Обнаружение и обработка диалогов и сбоев, а также в тематической группе на DA4R — автоматизация проектирования для Revit. Он включает в себя демонстрацию адаптация предупредительного глотателя для DA4R.

Привет, Джереми. Извините за мой поздний ответ и спасибо за ваш ответ! Прочитав документ более внимательно (включая ссылку @RahulBhobe), мне удалось заставить его работать, используя парадигму «Application.RegisterFailuresProcessor(myFailureProcessor)».

rajan_brussels 22.03.2022 18:17

Круто здорово!!

Rahul Bhobe 22.03.2022 19:30

Другие вопросы по теме