1. Имеется определение динамического, аннотативного блока отметки, в составе которого определён атрибут, отображающий нужное числовое значение (вычисленное посредством формулы и полей). Атрибуту назначено значение по умолчанию в виде текста "Якорь не указан". 2. Имеется определение не динамического, аннотативного блока якоря.
В атрибутах вхождений блока отметки прописывается формула, в которой из координаты Y точки вставки отметки вычитается координата Y точки вставки нужного якоря и результат делится на 1000.
В контекстное меню отметок добавлены два пункта: - Назначить якорь - Показать якорь
В контекстное меню якоря добавлен пункт: - Показать зависимые отметки
Значение формулы, присваиваемой атрибуту вхождения отметки назначается программно.
Описание проблемы:
Небольшой "затык" возник при нахождении всех отметок, связанных с указанным якорем...
В коде я извлекаю из атрибута исходный текст (не путать с отображаемым значением) так:
Полученное значение анализируется при помощи регулярного выражения и возвращает (посредством именованного сохранения) идентификатор блока отметки (если он присутствует).
Новый текст атрибуту (может содержать формулы и поля) назначаю так (когда присваиваю отметке нужный якорь):
// Назначаем нужную формулу, вычисляющую значение отметки
// (формула указана в конфигурационном файле)
attRef.TextString= attNewValue;
В результате отметкам успешно назначаются формулы и числовые значения корректно отображаются.
Теперь, если не закрывая документ, повторно выполнить getTextWithFieldCodes для атрибутов тех же самых вхождений блока отметки, то получаю не новую, назначенную мною формулу, но старое текстовое значение: "Якорь не указан".
Если же документ закрыть и снова открыть, то в этом случае getTextWithFieldCodes вернёт обновлённую строку, назначенную атрибуту.
Может я не оттуда, откуда надо считываю строку, присваиваемую атрибуту вхождения? Либо назначаю не туда, куда следовало бы?
Выкладывай код и файл в котором выскакивает ошибка - "хелловорд" из 2 вышеуказанных функций ведет себя корректно (сразу отображает и и при повторном запуске выдает новую строку).
Название: Re: Текстовая строка, назначенная атрибуту вхождения дин. аннотативного блока
Отправлено: Андрей Бушман от 06-03-2014, 15:37:52
Нашёл ошибку. Когда я в цикле обрабатывал вхождения блока, то в выборку попадали ненужные. Изначально я фильтровал так:
foreach(Db.ObjectId id in ids.Where(n => n.IsValid&&
!n.IsNull&&!n.IsErased&&!n.IsEffectivelyErased)){
...
Недоставало проверки IsEffectivelyErased в виду чего в выборку попадали лишние объекты. В хело ворде присутствовала эта же ошибка, но он отработал нормально в виду того, что я там не производил дополнительных манипуляций в виде добавления новых и удаления существующих вхождений.