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

12/06/2015

Как определить есть ли активная транзакция

Вопрос: Есть ли какой-нибудь способ определить, существует ли в текущий момент активная транзакция или нет?

Ответ: Да, такой способ есть. Тем не менее, полнота ответа зависит от того, что же вы понимаете под активной транзакцией. Могу предположить, что вы подразумеваете транзакцию, которая в текущий момент времени находится в открытом состоянии. Т.е. между ее началом и подтверждением или откатом.

Если так, то вот этот способ.

Если свойство Document.IsModifiable возвращает true, то в этом документе есть открытая транзакция.

Но, если это свойство возвращает false, то это совсем не значит, что нет активной транзакции. Это также может означать, что существует транзакция, но документ не может быть изменен, например, когда транзакция находятся в состоянии разрешения ошибки при подтверждении транзакции. Достоверным источником, который скажет, что нет активной транзакции, являются свойства Document.IsModifiable и Document.IsReadOnly. Если значения обоих свойств равны false, то активной транзакции нет.

Так же стоит взглянуть на пояснения к свойству Document.IsModifiable в файле справки.

Это не постоянное состояние документа, в отличии от Document.IsReadOnly. Значение этого свойства может меняться динамически много раз во время жизненного цикла документа. Не зависимо от того, в каком режиме открыт документ, изменение в документе может быть произведено только в открытой транзакции. Более того, если в документе есть открытая транзакция, то это еще не значит, что он находится в режиме редактирования. Хотя это довольно редкая ситуация, но все же она может случиться, например, при регенерации модели, обработки ошибок, или других событиях. При попытке отредактировать не редактируемый документ, возникнет исключение ModificationOutsideTransactionException.

Источник: http://thebuildingcoder.typepad.com/blog/2015/06/archsample-active-transaction-and-adnrme-for-revit-mep-2016.html#3

Автор перевода: Виктор Чекалин

Обсуждение: http://adn-cis.org/forum/index.php?topic=2789

Опубликовано 12.06.2015