Все - сдаюсь! Уже очень много испробовал вариантов - и логичных и нелогичных. Не могу никак понять правильный порядок действий (чувствую, что вот где-то рядом)
Имеется анонимный блок. Мне нужно изменять содержимое BlockTableRecord для вхождения блока. Т.е. получается всегда один BlockTableRecord и для него один BlockReference.
Для "описания" содержимого блока используется специальный класс, в котором я запоминаю ObjectId вхождения блока.
Для обновления содержимого получаются такие действия:
1. Я получаю экземпляр моего описательного класса по выбранному блоку
2. Я вызываю метод, которые обновляет геометрию (для примера - полилинию)
3. Затем методом из того-же класса я обновляю и BlockTableRecord:
3.1. По сохраненному ObjectId получаю BlockReference. По нему получаю BlockTableRecord в котором все стирается
3.2. В BlockTableRecord добавляется новое содержимое
4. Я вызываю метод UpdateAnonymousBlocks() для BlockTableRecord что вызывает и обновление BlockReference.
Так вот вся загвоздка в том, что для пункта 3 нужно открывать транзакцию!
При использовании этих шагов в GripsOverrule все отлично работает и никаких проблем нет. Но мне нужно, чтобы блок обновлялся и при изменении его свойств. А тут остается только ObjectOverrule.Close(). Но при всех возможных вариантах что-то сделать в ObjectOverrule.Close() (который срабатывает для BlockReference) ловятся фатальные ошибки. Причем, на попытках открыть транзакцию в п.3. Что в общем-то логично, т.к. BlockReference у меня в этот момент уже открыт и я его пытаюсь открыть опять
В общем - я уже порядком запутался =(
Как мне кажется - для обновления из GripsOverrule мне нужно оставить п.3, а при обновлении из ObjectOverrule.Close() мне нужно как-то использовать п.3 без транзакций
Поправьте и подскажите, если я что не так понимаю. А то и поговорить-то не с кем об этом ))