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

VladSh

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

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

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

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

Коллеги, кто-то пробовал бороться с этим?
Может как-то можно противодействовать этому? Или может кто-то уже пересобирал это поле программно?
 

savl

Lotus Team
28.10.2011
2 625
314
BIT
544
Если на базе уже включен largeSummary то ничего больше сделать нельзя, там ограничение на 16Мб в документ, но не более 64К в поле.
Я бы выносил эти линки из документа, замена на HTML или что-то другое. Тут надо конкретику знать.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
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).
 

savl

Lotus Team
28.10.2011
2 625
314
BIT
544
Про тикет в личку ответил.
про то как $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-ку при желании перейти, но покурить придется.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
Н-да, интересный тип поля этот NOTELINKS (7)...
TypeName(NotesItem.Values) возвращает EMPTY.
Экспорт документа в dxl ничего не дал - поля "$Links" там просто нет, как будто никогда и не существовало.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
45
Н-да, интересный тип поля этот NOTELINKS (7)...
TypeName(NotesItem.Values) возвращает EMPTY.
Экспорт документа в dxl ничего не дал - поля "$Links" там просто нет, как будто никогда и не существовало.
А dxl туда сюда снегурочка) документ восстанавливает в полном объеме?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
А dxl туда сюда снегурочка) документ восстанавливает в полном объеме?
Я ж выше написал, что при извлечении оно теряется. Его нет в результирующем dxl. Потому не могу втянуть обратно, т.к. не знаю формат этого типа поля.
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Не сильно поможет, но по мне так это ошибка в структуре базы. Надо в респонсы эти линки убирать хотя бы по дате создания или другому критерию.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
473
Н-да, интересный тип поля этот NOTELINKS (7)...
TypeName(NotesItem.Values) возвращает EMPTY.
Экспорт документа в dxl ничего не дал - поля "$Links" там просто нет, как будто никогда и не существовало.
а поднять ОДС до 54 (на в12)?
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
@lmike
Непонятно, как 8-е и 9-е клиенты на поднятие отреагируют...

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

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

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