Закрытие окна "Размещенный запрос на редактирование"

Автор Тема: Закрытие окна "Размещенный запрос на редактирование"  (Прочитано 1983 раз)

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

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
  • Skype: talalaev_d
В локальной копии хранилища есть необходимость при попытке редактирования элемента, если он занят в данный момент кем-либо, автоматически отправлять запрос.
Половину задачи я решил реализовав  свой IFailuresPreprocessor
Код - C# [Выбрать]
  1. public class MyWorksetElementPreprocessor : IFailuresPreprocessor
  2.         {
  3.             public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
  4.             {
  5.                 IList<FailureMessageAccessor> failList = new List<FailureMessageAccessor>();
  6.                 failList = failuresAccessor.GetFailureMessages();
  7.                 foreach (FailureMessageAccessor failure in failList)
  8.                 {
  9.                     FailureDefinitionId failID = failure.GetFailureDefinitionId();
  10.                     if (failID == BuiltInFailures.EditingFailures.OwnedByOther)
  11.                     {
  12.                         failuresAccessor.ResolveFailure(failure);
  13.                         return FailureProcessingResult.ProceedWithRollBack;
  14.                     }
  15.                 }
  16.  
  17.                 return FailureProcessingResult.Continue;
  18.             }
  19.         }
и связал с транзакцией 
Код - C# [Выбрать]
  1. private static Transaction MakeTransaction(Document doc, string name, bool useFailureHandlingOpts)
  2.         {
  3.             Transaction t = new Transaction(doc, name);
  4.             if (useFailureHandlingOpts)
  5.             {
  6.                 FailureHandlingOptions opts = t.GetFailureHandlingOptions();
  7.                 opts.SetClearAfterRollback(true);
  8.                 opts.SetFailuresPreprocessor(new MyWorksetElementPreprocessor());
  9.                 t.SetFailureHandlingOptions(opts);
  10.             }
  11.  
  12.             return t;
  13.         }
Осталась вторая половина - необходимо закрывать окно

Все полезного что смог для этого найти это запись в журнале - Jrn.PushButton "Modal , Размещенный запрос на редактирование , Dialog_Revit_CheckEditabilityGrants" , "Закрыть, IDOK"
Не смог ничего придумать с Dialog_Revit_CheckEditabilityGrants, есть у кого какие мысли по этому поводу?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
talalaev_d, есть событие UIApplication.DialogBoxShowing. Возникает как раз при отображении диалоговых окон. В нем можно обработать закрытие окна. Думаю это то что нужно.

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
  • Skype: talalaev_d
Виктор Чекалин, это тоже пробовал. Такое ощущение что это не стандартный диалог. Любые мои вызовы TaskDialog отлавливаются но на это окно по DialogBoxShowing никакой реакции.

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
  • Skype: talalaev_d
При такой реализации
Код - C# [Выбрать]
  1. uiapp.DialogBoxShowing += new EventHandler<DialogBoxShowingEventArgs>(myDialogBoxShowing);

Код - C# [Выбрать]
  1. void myDialogBoxShowing(object sender, DialogBoxShowingEventArgs e)
  2.         {
  3.              TaskDialogShowingEventArgs e1 = e as TaskDialogShowingEventArgs;
  4.              if (e1 != null && e1.DialogId.Equals("Dialog_Revit_CheckEditabilityGrants"))
  5.             {
  6.                 e1.OverrideResult((int)TaskDialogResult.Close);
  7.             }
  8.         }
Он даже не вызывает событие на это окно. Но все вызовы TaskDialog отлавливает.