Проблемы С Richtext

JohnLemon

Well-Known Member
20.08.2014
274
5
#1
Здравствуйте, пытаюсь реализовать историю изменения полей в 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, в чем проблема ??
 

ty3uk

Well-Known Member
31.03.2008
170
0
#2
вот с ходу и не скажешь из-за чего, может из-за итогового размера самого поля. Просто нотеса побили большое поле, "нарезочкой" с размером до 65кб.
 

ty3uk

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

JohnLemon

Well-Known Member
20.08.2014
274
5
#6
В любом случае, рано или поздно ИМХО, поле будет на части биться, хочешь ты этого или нет.
А это чем опасно, что оно бьется на части ? Вообще бы хотелось конечно историю по красивее оформить, может что посоветуете ?
 

ty3uk

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

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

JohnLemon

Well-Known Member
20.08.2014
274
5
#8
Да вот мне как раз не хотелось бы документы плодить. Хочу записывать историю просто в поле в документе.
Просто нотеса побили большое поле, "нарезочкой" с размером до 65кб
А что у RichText разве есть ограничения на размер поля ?
 

ty3uk

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

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

JohnLemon

Well-Known Member
20.08.2014
274
5
#10
Вообще подумываю оформить RT как в виде html и отображать значения в div или таблице. Но пока что то не могу найти примеры и не могу понять на сколько это реально
 

ty3uk

Well-Known Member
31.03.2008
170
0
#11
ниразу не пробовал такого, попробуй поиграться с параметрами поля, вторая закладка RT поля, нижняя галка
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 492
367
#12
в РТ пишется майм - и никаких особенностей, можно в брекетах (типа []) сам код, css только инлайн