ОБСУЖДЕНИЕ

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

5 ответов 4 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Доброго времени суток!
Прошу помочь решить задачку, как хранить историю изменения полей.
Вообщем у меня получилось сохранять только 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
 
Call CurDoc.Save(True, False) в событии Querysave!
и прочий винегрет:
Код:
curdoc.SaveOptions="0"
Call cuid.Close()
как же я это люблю!..
и кто-то после этого смеет заявлять, что платформа не пользуется популярностью?
 
В помощь начинающиму.
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, там много интересного!
 
1. Часто так делаю (для каждой проверки свой выход):
Код:
If (почему не надо сохранять) Then
Continue = False
Exit Sub	 'это не нужно делать только в onSubmit
End If
3. Изменений м.б. очень много, можем выпасть за 32kb, возможно потому RT.
Значения в текстовое поле добавлял бы так:
Код:
Call Source.Document.replaceItemValue("ItemName", FullTrim(ArrayAppend(Source.Document.getItemValue("ItemName"), newValue)))
И перестал бы делать такие проверки:
Код:
If CurDoc.old_number(0)<>"" Then
так гораздо лучше:
Код:
If Len(ndCurrent.getItemValue("ItemName")(0)) <> 0 Then
Добавлено: обсуждение по последнему излиянию уехало сюда.
 
1. в Querysave так делать не надо:
Call curdoc.Save(False, True)
curdoc.SaveOptions="0"
Call cuid.Close()
Никогда.
Если не хочется сохранять док, используйте параметр в Querysave - Continue :
например: If (почему не надо сохранять) Then Continue = False

А в принципе в UI можно так делать?
Пример брал из helpa, правда там button
Код:
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К
 
haldey
В принципе, можно. Как и ездить по встречке.
 
Статус
Закрыто для дальнейших ответов.

Статистика тем

Создано
haldey,
Последний ответ от
VladSh,
Ответы
5
Просмотры
4 012