Обычная транзакция и UpgradeOpen

Автор Тема: Обычная транзакция и UpgradeOpen  (Прочитано 7181 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Очень интересный и тонкий момент использования UpgradeOpen внутри обычной транзакции: http://adn-cis.org/v-autocad-2018.1-metod-upgradeopen-privodit-k-fatalnoj-oshibke-vnutri-tranzakczii.html
Первый раз за долгие годы смешение механизмов open/close и обычных транзакций приводит к фатальной ошибке AutoCAD. Так что будьте осторожны и пересмотрите свои коды. Autodesk'овцы обещают исправить это поведение в одном из ближайших обновлений, но лучше перестраховаться...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Обычная транзакция и UpgradeOpen
« Ответ #1 : 07-08-2017, 12:09:19 »
Цитировать
Метод UpgradeOpen () - это оболочка для C ++ метода AcDbObject::upgradeOpen (), которая предназначена для механизма open/close, а не для механизма транзакций.
Ничего себе новости! Надо будет пересмотреть коды. Спасибо!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обычная транзакция и UpgradeOpen
« Ответ #2 : 07-08-2017, 12:43:45 »
Цитировать
Метод UpgradeOpen () - это оболочка для C ++ метода AcDbObject::upgradeOpen (), которая предназначена для механизма open/close, а не для механизма транзакций.
Ничего себе новости! Надо будет пересмотреть коды. Спасибо!
Я как-то тоже не обращал на это внимание, хотя и был в курсе...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Обычная транзакция и UpgradeOpen
« Ответ #3 : 07-08-2017, 12:49:44 »
Так ведь раньше не было проблем.
Просмотрел сейчас свои коды и пришёл к выводу, что в 90% случаев надежнее и эстетичнее будет заменить транзакцию на открытие через Open, чем их рекомендации выполнять.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обычная транзакция и UpgradeOpen
« Ответ #4 : 07-08-2017, 12:56:48 »
Так ведь раньше не было проблем.
Да. Выставлялся флажок того, что для объекта, участвующего в транзакции, выполнялся UpgradeOpen и нужна дополнительная обработка. В 2018.1 что-то поменяли и испортили.
Просмотрел сейчас свои коды и пришёл к выводу, что в 90% случаев надежнее и эстетичнее будет заменить транзакцию на открытие через Open, чем их рекомендации выполнять.
Эстетичнее - 100%. Но требуется повышенная внимательность.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Обычная транзакция и UpgradeOpen
« Ответ #5 : 09-08-2017, 15:33:42 »
"С заботой о вас. Ваш Autodesk"  ;D

Александр, спасибо за информацию!

Отмечено как Решение Александр Ривилис 10-08-2017, 00:26:00

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обычная транзакция и UpgradeOpen
« Ответ #6 : 09-08-2017, 17:48:49 »
Судя по дальнейшему обсуждению в той теме не всё так страшно. Это касалось только слоёв (LayerTableRecord) и только зависимых (isDependent == true). Только если они участвовали в транзакции и для них было выполнено UpgradeOpen без DowngradeOpen, то в AutoCAD 2018.1 возникает Fatal Error.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение