Подавление ошибок FailuresAccessor

Автор Тема: Подавление ошибок FailuresAccessor  (Прочитано 2368 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн OlgaАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Доброго времени суток.
Мне необходимо подавить ошибку (т.е без раскрытия окна ошибки, как бы нажать кнопку "Отсоединить элементы")

использую такой класс:
Код - C# [Выбрать]
  1. public class FailureHandler : IFailuresPreprocessor
  2.     {
  3.         public FailureProcessingResult PreprocessFailures( FailuresAccessor failuresAccessor)
  4.         {
  5.             foreach (FailureMessageAccessor fma in failuresAccessor.GetFailureMessages())
  6.             {
  7.                 fma.SetCurrentResolutionType(FailureResolutionType...);
  8.             }
  9.             return FailureProcessingResult.Continue;
  10.         }
  11.  
  12.     }
  13.  

для FailureMessageAccessor можно записать  только итоговый тип  fma.SetCurrentResolutionType(FailureResolutionType...), но  что бы я туда ни записывала, отсоединение не происходит.
где может быть ошибка?



« Последнее редактирование: 27-04-2021, 15:40:40 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подавление ошибок FailuresAccessor
« Ответ #1 : 27-04-2021, 15:41:20 »
Olga,
Напоминаю о правиле форматирования кода на нашем форуме!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Подавление ошибок FailuresAccessor
« Ответ #2 : 27-04-2021, 18:19:43 »
У меня получилось вот так:
Код - C# [Выбрать]
  1. app.ControlledApplication.FailuresProcessing += OnFailuresProcessing;
  2. ...
  3. private void OnFailuresProcessing(object sender, FailuresProcessingEventArgs e)
  4. {
  5.         var failureAccessor = e.GetFailuresAccessor();
  6.  
  7.         var disjointFailures = failureAccessor
  8.                 .GetFailureMessages(FailureSeverity.Warning)
  9.                 .Where(x => x.GetFailureDefinitionId() == BuiltInFailures.JoinElementsFailures.JoiningDisjointWarn)
  10.                 .ToList();
  11.  
  12.         if (disjointFailures.Count == 0)
  13.                 return;
  14.  
  15.         foreach (var failure in disjointFailures)
  16.         {
  17.                 failure.SetCurrentResolutionType(FailureResolutionType.DetachElements);
  18.  
  19.                 failureAccessor.ResolveFailure(failure);
  20.         }
  21.  
  22.         e.SetProcessingResult(FailureProcessingResult.ProceedWithCommit);
  23. }

Разница с твоим случаем - я здесь обрабатываю предупреждение, а не ошибку, на вскидку не вспомнил, что нужно сделать, чтобы выдавало именно ошибку, а не предупреждение.

Соответственно, GetFailureMessages(FailureSeverity.Warning) меняешь на FailureSeverity.Error, а BuiltInFailures.JoinElementsFailures.JoiningDisjointWarn на BuiltInFailures.JoinElementsFailures.JoiningDisjoint.

Дай знать по результатам, есть небольшое сомнение, что будет работать с Error-ом. По-хорошему, я бы ещё проверку добавил, что FailureMessage.HasResolutionOfType(FailureResolutionType.DetachElements) вернёт истину

Оффлайн OlgaАвтор темы

  • ADN OPEN
  • Сообщений: 24
  • Карма: 0
Re: Подавление ошибок FailuresAccessor
« Ответ #3 : 29-04-2021, 15:29:43 »
ни у Application  ни у UIApplication  нет метода ControlledApplication. Как можно получить этот класс?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Подавление ошибок FailuresAccessor
« Ответ #4 : 29-04-2021, 15:34:31 »
Эмм...



Ту же логику можно и в IFailuresPreprocessor реализовать.