Проблемы С Richtext

Тема в разделе "Lotus - Программирование", создана пользователем JohnLemon, 7 ноя 2014.

  1. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Здравствуйте, пытаюсь реализовать историю изменения полей в RichText, есть такой код
    Код (Text):
    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, в чем проблема ??
     
  2. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    вот с ходу и не скажешь из-за чего, может из-за итогового размера самого поля. Просто нотеса побили большое поле, "нарезочкой" с размером до 65кб.
     
  3. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Там первое поле 306 байт а два других вообще по 58
     
  4. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Может скрин поможет )
     

    Вложения:

  5. ty3uk

    ty3uk Well-Known Member

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

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    А это чем опасно, что оно бьется на части ? Вообще бы хотелось конечно историю по красивее оформить, может что посоветуете ?
     
  7. ty3uk

    ty3uk Well-Known Member

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

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

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Да вот мне как раз не хотелось бы документы плодить. Хочу записывать историю просто в поле в документе.
    А что у RichText разве есть ограничения на размер поля ?
     
  9. ty3uk

    ty3uk Well-Known Member

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

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

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Вообще подумываю оформить RT как в виде html и отображать значения в div или таблице. Но пока что то не могу найти примеры и не могу понять на сколько это реально
     
  11. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    ниразу не пробовал такого, попробуй поиграться с параметрами поля, вторая закладка RT поля, нижняя галка
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    в РТ пишется майм - и никаких особенностей, можно в брекетах (типа []) сам код, css только инлайн
     
Загрузка...

Поделиться этой страницей