Работа С Rtf Полями.

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

Статус темы:
Закрыта.
  1. haldey

    haldey Гость

    Доброго времени суток!
    Прошу помочь решить задачку, как хранить историю изменения полей.
    Вообщем у меня получилось сохранять только 2-й и последующие варианты.
    При первом сохранении документ не сохраняется если убрать первый If.
    Sub Querysave(Source As Notesuidocument, Continue As Variant)
    Dim rtitem, RDateItem As Variant
    Set cuid = Source
    Set CurDoc = cuid.Document
    Set rtitem = curdoc.GetFirstItem( "numberhistory" )
    Set RDateItem = curdoc.GetFirstItem( "RDatehistory" )

    If CurDoc.old_number(0)<>"" Then 'Если не проверять то документ не сохранится
    If CurDoc.old_number(0) <> CurDoc.Number(0) Then
    Call curdoc.replaceitemvalue("old_number", CurDoc.Number(0))
    Call CurDoc.Save(True, False)
    If rtitem.Type = RICHTEXT Then
    Call rtitem.AppendText( CurDoc.Number(0) & {, } & getAFSession.CurrentUser.ShortName & {, } & Format$(Now, "dd.mm.yyyy hh:mm"))
    Call rtitem.AddNewLine( 1 )
    Call curdoc.Save(False, True)
    curdoc.SaveOptions="0"
    Call cuid.Close()
    End If
    End If
    End If

    If CurDoc.old_number(0)="" Then
    Call curdoc.replaceitemvalue("old_number", CurDoc.Number(0))
    End If

    '============================================================================
    ========

    If CurDoc.old_RDate(0)<>"" Then 'Если не проверять то документ не сохранится
    If CurDoc.old_RDate(0) <> CurDoc.RDate(0) Then
    Call curdoc.replaceitemvalue("old_RDate", CurDoc.RDate(0))
    If RDateItem.Type = RICHTEXT Then
    Call RDateItem.AppendText( CurDoc.RDate(0) & {, } & getAFSession.CurrentUser.ShortName & {, } & Format$(Now, "dd.mm.yyyy hh:mm"))
    Call RDateItem.AddNewLine( 1 )
    Call curdoc.Save(False, True)
    curdoc.SaveOptions="0"
    Call cuid.Close()
    End If
    End If
    End If

    If CurDoc.old_RDate(0)="" Then
    Call curdoc.replaceitemvalue("old_RDate", CurDoc.RDate(0))
    End If

    End Sub
     
  2. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Call CurDoc.Save(True, False) в событии Querysave!
    и прочий винегрет:
    Код (LotusScript):
    curdoc.SaveOptions="0"
    Call cuid.Close()
    как же я это люблю!..
    и кто-то после этого смеет заявлять, что платформа не пользуется популярностью?
     
  3. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    В помощь начинающиму.
    VladSH написал правильно, но для Вас непонятно.
    Немного расшифрую "винегрет"
    1. в Querysave так делать не надо:
    Call curdoc.Save(False, True)
    curdoc.SaveOptions="0"
    Call cuid.Close()
    Никогда.
    Если не хочется сохранять док, используйте параметр в Querysave - Continue :
    например: If (почему не надо сохранять) Then Continue = False
    2. Source он и в Африке Sourse:
    Set cuid = Source ??????
    Set CurDoc = cuid.Document ??????
    если уж очень хочется, то просто Set CurDoc = Source.Document,
    хотя здесь - это лишнее.
    3. RTF поле, как-бы не причем.
    хочется сохранять историю в поле "RDatehistory" флаг Вам в руки:
    если для показа в UI - делаете его (текстовое поле "RDatehistory") "multivalue" с разделителем для показа "NewLine" и дописывайте в конец.
    Например: Source.Document.RDatehistory = Source.Document.RDatehistory(0)+chr(13)+{новая строка}
    Переписывайте код, все получится. И более внимательно читайте Help, там много интересного!
     
  4. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    1. Часто так делаю (для каждой проверки свой выход):
    Код (LotusScript):
    If (почему не надо сохранять) Then
    Continue = False
    Exit Sub     'это не нужно делать только в onSubmit
    End If
    3. Изменений м.б. очень много, можем выпасть за 32kb, возможно потому RT.
    Значения в текстовое поле добавлял бы так:
    Код (LotusScript):
    Call Source.Document.replaceItemValue("ItemName", FullTrim(ArrayAppend(Source.Document.getItemValue("ItemName"), newValue)))
    И перестал бы делать такие проверки:
    Код (LotusScript):
    If CurDoc.old_number(0)<>"" Then
    так гораздо лучше:
    Код (LotusScript):
    If Len(ndCurrent.getItemValue("ItemName")(0)) <> 0 Then
    Добавлено: обсуждение по последнему излиянию уехало сюда.
     
  5. haldey

    haldey Гость

    А в принципе в UI можно так делать?
    Пример брал из helpa, правда там button
    Код (Text):
    Sub Click(Source As Button)
    Dim w As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim docA As NotesDocument
    Dim rtitemA As Variant
    Dim rtitemB As Variant
    Set uidoc = w.CurrentDocument
    Set docA = uidoc.Document
    Call uidoc.Save
    Set rtitemA = docA.GetFirstItem( "Body" )
    Set rtitemB = docA.GetFirstItem( "Body1" )
    If ( rtitemA.Type = RICHTEXT And _
    rtitemB.Type = RICHTEXT ) Then
    Call rtitemA.AddNewLine(1)
    Call rtitemA.AppendRTItem( rtitemB )
    docA.body1 = " "
    docA.SaveOptions = "0"
    Call docA.Save(False, True)
    Call uidoc.Close
    End IF
    End Sub
    Хотелось сделать именно через RTF по причине 32К
     
  6. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    haldey
    В принципе, можно. Как и ездить по встречке.
     
Загрузка...
Похожие Темы - Работа Rtf Полями
  1. anna
    Ответов:
    5
    Просмотров:
    584
  2. Andrey Kha
    Ответов:
    0
    Просмотров:
    32
  3. Hoasker
    Ответов:
    0
    Просмотров:
    65
  4. garri671
    Ответов:
    0
    Просмотров:
    57
  5. lelik200969
    Ответов:
    0
    Просмотров:
    54
Статус темы:
Закрыта.

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