Я разрабатываю плагин 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
Привет @RahulBhobe. Большое спасибо за вашу ссылку. Теперь мне удалось заставить его работать, разработав собственный обработчик ошибок (на основе существующего примера кода) и используя «Application.RegisterFailuresProcessor(myFailureProcessor)», как это предлагается в документе.
предупреждающий глотатель успешно используется в Forge Design Automation для Revit. Вы также можете ознакомиться с другими предложениями от The Building Coder или Обнаружение и обработка диалогов и сбоев, а также в тематической группе на DA4R — автоматизация проектирования для Revit. Он включает в себя демонстрацию адаптация предупредительного глотателя для DA4R.
Привет, Джереми. Извините за мой поздний ответ и спасибо за ваш ответ! Прочитав документ более внимательно (включая ссылку @RahulBhobe), мне удалось заставить его работать, используя парадигму «Application.RegisterFailuresProcessor(myFailureProcessor)».
Круто здорово!!
Вы уже ознакомились с этой документацией и попробовали ее? forge.autodesk.com/en/docs/design-automation/v3/… Не получилось?