EraseSchemaAndAllEntities

Автор Тема: EraseSchemaAndAllEntities  (Прочитано 5091 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
EraseSchemaAndAllEntities
« : 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.  
« Последнее редактирование: 28-12-2020, 20:53:31 от sdv79 »

Отмечено как Решение sdv79 29-12-2020, 10:54:02

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: EraseSchemaAndAllEntities
« Ответ #1 : 28-12-2020, 20:14:31 »
Да, он нормально не работает, но, вообще говоря, он должен использоваться только для отладки.

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

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

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


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

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: EraseSchemaAndAllEntities
« Ответ #2 : 28-12-2020, 20:49:43 »
Пробовал так. При наполнении списка транзакциями, выдает ошибку - не закончена предыдущая :(

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: EraseSchemaAndAllEntities
« Ответ #3 : 29-12-2020, 09:46:05 »
Видимо, ты где-то ошибся.

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

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: EraseSchemaAndAllEntities
« Ответ #4 : 29-12-2020, 10:39:02 »
Да, была ошибка. Заработало, спасибо.


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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: EraseSchemaAndAllEntities
« Ответ #5 : 29-12-2020, 10:43:55 »
Ну я ж сказал, ошибся