• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблемы С Richtext

  • Автор темы JohnLemon
  • Дата начала
J

JohnLemon

Здравствуйте, пытаюсь реализовать историю изменения полей в RichText, есть такой код
Код:
Sub Postsave(Source As Notesuidocument)
'----------------------------------------------------
Dim doc As NotesDocument
Dim rtHistory As NotesRichTextItem
'----------------------------------------------------
Set rtHistory = docs.GetFirstItem("History")
Set docs = Source.Document
'-----------------------------------------------------
i = 0
Forall value_field In docs.FiedlName
Call rtHistory.AppendText ( "Изменено "+masivtemp(i)+" на ---------> "+docs.Getitemvalue(value_field)(0))
Call rtHistory.AddNewLine(1)
Call  docs.Save(True,False,False) 
'-----------------
Messagebox("Старое значение "+masivtemp(i))
Messagebox("Новое значение "+docs.Getitemvalue(value_field)(0))
i=i+1
End Forall
End Sub
Все нормально но вот, почему то в свойствах документа 3 поля History, в чем проблема ??
 
T

ty3uk

вот с ходу и не скажешь из-за чего, может из-за итогового размера самого поля. Просто нотеса побили большое поле, "нарезочкой" с размером до 65кб.
 
J

JohnLemon

вот с ходу и не скажешь из-за чего, может из-за итогового размера самого поля. Просто нотеса побили большое поле, "нарезочкой" с размером до 65кб.
Там первое поле 306 байт а два других вообще по 58
 
J

JohnLemon

Вложения

  • Безымянный.png
    Безымянный.png
    5,9 КБ · Просмотры: 505
T

ty3uk

ну ричтекст вообще поле с своим норовом... попробуй notesRichTextItem.Compact
и не факт, что работа с этим полем будет нормальная, если оно из того документа, которое ты пользователю на редактирование отдаёшь. Делай доп документ, который идёт за основным, к примеру по форме "(history)" в нём два поля, одно ParentUNID и History. пользователю на редактирование (прямое), никогда этот документ не отдавай. В любом случае, рано или поздно ИМХО, поле будет на части биться, хочешь ты этого или нет.
 
J

JohnLemon

В любом случае, рано или поздно ИМХО, поле будет на части биться, хочешь ты этого или нет.
А это чем опасно, что оно бьется на части ? Вообще бы хотелось конечно историю по красивее оформить, может что посоветуете ?
 
T

ty3uk

на данный момент, в моих системах не ведётся история изменений полей. Пока не задумывался как это делать (хотя в одном проекте, минималка есть. там на каждом сохранении проверяется содержание "отслеживаемых полей" и если есть изменения, то формируется доп-документ с соотвествующими данными. Потом, с помощью dxl собирается табличка что, кто, когда и показывается в документе в классике, через хпагесы, показать, вообще не проблема. А так, доп документ содержит поля: кто, когда, какое поле, старое значение, новое значение. Поля мультивалюйные. Ну, естественно, инфа на родительский документ).
Надо отдавать себе отчёт, что отслеживание изменений, достаточно неординарная ситуация (хотя кому как, более чем уверен, что в других системах такое очень давно есть). Большое кол-во документов в базе будет тормозить саму базу (построение вьюх и т.п.) соотвественно такие документы надо выносить в другую базу/базы. Для примера, попробуй в умепосчитать с какой скоростью будут перестраиваться вьюхи в базе с 60т.доков, с безопасностью по видимости документов (не через роли а через группы и т.п.)+ вьюх под 30-ть. А теперь, на каждый документ довесь 3-10-ть изменений(=3-10 доп документов), и поробуй опять посчитать...

Добавлено: а как в документе сформировать простейший список (не замудрённый как у меня с dxl) из других документов в RT, посмотри пример в стандартной базе дискуссии (там, внизу, есть РТ поле, которое показывает дерево ответов)
 
J

JohnLemon

Да вот мне как раз не хотелось бы документы плодить. Хочу записывать историю просто в поле в документе.
Просто нотеса побили большое поле, "нарезочкой" с размером до 65кб
А что у RichText разве есть ограничения на размер поля ?
 
T

ty3uk

есть, толи в 4гб толи в дофига. Как точно оно работает сказать не могу, т.к. нет у меня таких "чистых" полей с большим объёмом текста и без вложений, фоток и т.п. (вложения и фотки, могут сохраняться не непосредственно в поле, а, к примеру, в полях $file).
ну если хочешь прям в документе, то как вариант то что я ранее указал, несколько полей (мультивалюйных) и из них собираешь "итого" и показываешь. Но там тоже есть свои подводные камни. К примеру как показать, тупо строчкой 4-ре поля не получится, т.к. новая строчка в одном поле может быть далеко не в том месте где новая строчка в другом поле. + мультивалюйность, она вещь такая... в оригинальном поле, тож, могут быть множественные значения.

но, как вариант, в поле можешь писать значения, а когда вставляются мультивалюйки, разделять их чемнить что редко встречается, к примеру кмбинацией: "$@#@$" (соотвественно, когда хочешь получить ассив значений от данного значения делаешь так: split(x_what(i),"$@#@$") обратное x_what=appendarray(x_what,join(doc.getitemvalue("pole"),"$@#@$")) тока эта функция работает для строковых, для числовых/дат и т.п. сам додумай, а итого, красиво выводить в РТ поле (как в дискуссии, там главный момент, что РТ не сохраняется + расчитывается при открытии)
 
J

JohnLemon

Вообще подумываю оформить RT как в виде html и отображать значения в div или таблице. Но пока что то не могу найти примеры и не могу понять на сколько это реально
 
T

ty3uk

ниразу не пробовал такого, попробуй поиграться с параметрами поля, вторая закладка RT поля, нижняя галка
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
216
в РТ пишется майм - и никаких особенностей, можно в брекетах (типа []) сам код, css только инлайн
 
Мы в соцсетях:

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