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

ADN Club => Revit API => Тема начата: sdv79 от 28-12-2020, 18:54:58

Название: EraseSchemaAndAllEntities
Отправлено: sdv79 от 28-12-2020, 18:54:58
Schema.EraseSchemaAndAllEntities позволяет удалить Хранилище (схему) во всех открытых документах. Данный код работает на одном документе, как заставить это работать для всех открытых документов (проблема с транзакциями), или как удалить все хранилища во всех отрытых документах?
https://www.revitapidocs.com/2019/80983aac-0cca-c211-1c7b-b5350624f046.htm

Код - C# [Выбрать]
  1. // фрагмент А
  2.     var transaction = new Transaction(doc, "Transaction");
  3.      transaction.Start();
  4.  
  5.       Schema
  6.      .ListSchemas()
  7.      .ForEach(schema =>
  8.       { Schema.EraseSchemaAndAllEntities(schema, true); });
  9.  
  10.        doc.Regenerate();
  11.  
  12.         transaction.Commit();
  13.  

Пробовал, но выдает ошибку  :(
Код - C# [Выбрать]
  1. using (var transGroup = new TransactionGroup(doc, "TransactionGroup"))
  2. {
  3.    transGroup.Start();
  4.  
  5. var uiApp = commandData.Application;
  6.  
  7.  uiApp
  8. .Application
  9. .Documents
  10. .Cast<Document>()
  11. .ForEach(familyDocument =>
  12. {
  13.    // фрагмент А
  14. });
  15.  transGroup.Assimilate();
  16. }
  17.  
Название: Re: EraseSchemaAndAllEntities
Отправлено: Александр Игнатович от 28-12-2020, 20:14:31
Да, он нормально не работает, но, вообще говоря, он должен использоваться только для отладки.

Его можно починить (условно, см. дальше), если в каждом документе (Application.Documents) запустить транзакцию - собрать транзакции в список, потом вызвать метод EraseSchemaAndAllEntities, а потом пройтись по полученному списку транзакций и закоммитить каждую.

Почему условно? Если документ является связанным файлом, то транзакцию в нем ты не запустишь.

Ну и ещё почитай Remarks в описании метода.

Название: Re: EraseSchemaAndAllEntities
Отправлено: sdv79 от 28-12-2020, 20:49:43
Пробовал так. При наполнении списка транзакциями, выдает ошибку - не закончена предыдущая :(
Название: Re: EraseSchemaAndAllEntities
Отправлено: Александр Игнатович от 29-12-2020, 09:46:05
Видимо, ты где-то ошибся.
Название: Re: EraseSchemaAndAllEntities
Отправлено: sdv79 от 29-12-2020, 10:39:02
Да, была ошибка. Заработало, спасибо.

Название: Re: EraseSchemaAndAllEntities
Отправлено: Александр Игнатович от 29-12-2020, 10:43:55
Ну я ж сказал, ошибся


(https://i.postimg.cc/948y4HzH/bug.png) (https://postimg.cc/948y4HzH)