Распухает поле $Links

VladSh

начинающий
Lotus Team
11.12.2009
1 803
164
BIT
276
Проблема при пересохранении таких документов - ошибка 4000 "Notes error: Adding entry will cause text list to exceed 64K. Entry not added.".

Один из примеров - документ, содержит 2 item'а $Links (инфу покопировал из ScanEZ):

Общее количество линковКоличество уникальных линковРазмер поля, bytes
16355665402
5286021122

Объединил уникальные значения из этих двух item'ов, снова взял уникальные и в сумме получилось те же 60 линков.

Коллеги, кто-то пробовал бороться с этим?
Может как-то можно противодействовать этому? Или может кто-то уже пересобирал это поле программно?
 
Если на базе уже включен largeSummary то ничего больше сделать нельзя, там ограничение на 16Мб в документ, но не более 64К в поле.
Я бы выносил эти линки из документа, замена на HTML или что-то другое. Тут надо конкретику знать.
 
largeSummary пока не включить... неясно, как поведут себя клиенты 8-й версии (у нас их подавляющее большинство, и никто переводить на 9-ки не хочет, т.к. огромное количество работы).

Эти документы, линки на которые содержатся в поле "$Links" (61), берутся из версионной иерархии.
Работает это так: на OueryOpen документа берётся определённое текстовое поле (содержит массив UNID + адрес базы, где сейчас находится версия), и на его основании иерархия перестраивается при каждом открытии документа. Но richtext-поле, в которое записываются линки, зачем-то сохраняется в документе.

Видимо при UI-сохранении документа Lotus автоматически формирует поле "$Links" на основании тех ссылок, которые имеются в сохраняемых в документе richtext-полях. Подтверждение.

Проблема 64K, как оказалось, никак не связана с системным полем "$Links", т.к. оно non-summary. Надо искать причину в другом.

Но проблема распухания документа при бездумном добавлении линков Лотусом в "$Links" при добавлении/замене линков в ричтексте + сохранении дока в UI есть. В одном из моих частных случаях хорошо, что в документе больше нет полей содержащих ссылки, и я могу перед пересоданием иерархии просто грохнуть поле "$Links", но в других - имеем проблему.

Так и просится багрепорт.
@savl, если можно, заведи пожалуйста.
Предлагаемое решение - в коде, где Lotus добавляет записи в поле "$Links", нужно анализировать каждый добавляемый линк на наличие UNID'а в поле.
1. Если он есть, тогда:
- если местоположение (БД) отличается, то заменять этот линк новым;
- если не отличается - игнорировать добавление.
2. Если нет, то просто добавляем, как сейчас.
Либо если не захотят это дорабатывать, то пусть дают возможность нам самим программно работать с полями типа NOTELINKS (7).
 
Про тикет в личку ответил.
про то как $links появляется - это правда, только при ui сейве.
Проблема 64К - связана с документом, до largesummary ограничение как раз 64К на документ:
Previously the combined size of all summary data fields in a document was limited to 64 K
Что касается обновления клиентов, бесплатный марвел позволяет обновиться до 10.0.1Fp2, то есть можно даже на 9-ку при желании перейти, но покурить придется.
 
Н-да, интересный тип поля этот NOTELINKS (7)...
TypeName(NotesItem.Values) возвращает EMPTY.
Экспорт документа в dxl ничего не дал - поля "$Links" там просто нет, как будто никогда и не существовало.
 
Н-да, интересный тип поля этот NOTELINKS (7)...
TypeName(NotesItem.Values) возвращает EMPTY.
Экспорт документа в dxl ничего не дал - поля "$Links" там просто нет, как будто никогда и не существовало.
А dxl туда сюда снегурочка) документ восстанавливает в полном объеме?
 
А dxl туда сюда снегурочка) документ восстанавливает в полном объеме?
Я ж выше написал, что при извлечении оно теряется. Его нет в результирующем dxl. Потому не могу втянуть обратно, т.к. не знаю формат этого типа поля.
 
Не сильно поможет, но по мне так это ошибка в структуре базы. Надо в респонсы эти линки убирать хотя бы по дате создания или другому критерию.
 
Н-да, интересный тип поля этот NOTELINKS (7)...
TypeName(NotesItem.Values) возвращает EMPTY.
Экспорт документа в dxl ничего не дал - поля "$Links" там просто нет, как будто никогда и не существовало.
а поднять ОДС до 54 (на в12)?
 
@lmike
Непонятно, как 8-е и 9-е клиенты на поднятие отреагируют...

Думаю, что всё проще окажется. Никто мне внятно так и не смог объяснить, зачем хранить этот ричтекст с линками, если он перевычисляется при каждом открытии документа, а после сохранения нигде не используется. Потестирую ещё, и если всё норм, то SaveToDisk = False и до свиданья. А в старых доках пройдусь и грохну эти item'ы и всё, - базе сразу полегчает.

Обновлено: почти так и сделал. Пришлось чуток кода переписать, но всё без хранения этих полей оказалось норм!
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!