Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: talalaev_d от 22-06-2017, 04:09:14

Название: Закрытие окна "Размещенный запрос на редактирование"
Отправлено: talalaev_d от 22-06-2017, 04:09:14
В локальной копии хранилища есть необходимость при попытке редактирования элемента, если он занят в данный момент кем-либо, автоматически отправлять запрос.
Половину задачи я решил реализовав  свой 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.         }
Осталась вторая половина - необходимо закрывать окно
(https://s30.postimg.org/3yfzd1c71/2017-06-22_3-56-14.jpg) (https://postimg.org/image/3yfzd1c71/)
Все полезного что смог для этого найти это запись в журнале - Jrn.PushButton "Modal , Размещенный запрос на редактирование , Dialog_Revit_CheckEditabilityGrants" , "Закрыть, IDOK"
Не смог ничего придумать с Dialog_Revit_CheckEditabilityGrants, есть у кого какие мысли по этому поводу?
Название: Re: Закрытие окна "Размещенный запрос на редактирование"
Отправлено: Виктор Чекалин от 22-06-2017, 09:53:43
talalaev_d, есть событие UIApplication.DialogBoxShowing (http://www.revitapidocs.com/2017/a5b8870c-d2b8-d3e8-fa35-e9e2166d54f5.htm). Возникает как раз при отображении диалоговых окон. В нем можно обработать закрытие окна. Думаю это то что нужно.
Название: Re: Закрытие окна "Размещенный запрос на редактирование"
Отправлено: talalaev_d от 22-06-2017, 12:34:47
Виктор Чекалин, это тоже пробовал. Такое ощущение что это не стандартный диалог. Любые мои вызовы TaskDialog отлавливаются но на это окно по DialogBoxShowing никакой реакции.
Название: Re: Закрытие окна "Размещенный запрос на редактирование"
Отправлено: talalaev_d от 22-06-2017, 13:13:02
При такой реализации
Код - 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 отлавливает.