Опять Richtext

  • Автор темы Fugitive
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Fugitive

#1
Уважаемые подскажите как лучше реализовать:
есть 2 поля rich
1 - история
2 - текущее сообщение.
В текущее сообщение может вставляться и текст и картинки и линки на доки/базы. Как вставить программно всю инфу из второго поля в начало первого поля ???
Пробовал через begininsert, но ругается если есть картинка.
Код:
	Set rtnav = rtitem.CreateNavigator
Call rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH)		
...
Call rtitem_res.BeginInsert(rtnav)
Как рабоитать с begininsert если нужно вставить и картинку и текст..... ??????
 
E

Elena Nefedova

#4
Это принципиально делать в режиме редактирования при открытом документе?
 
A

allex

#5
а поле с сортировкой сделать, в тоаком порядке как тебе надо
 
D

Domino6

#6
<!--QuoteBegin-Fugitive+22:05:2006, 10:40 -->
<span class="vbquote">(Fugitive @ 22:05:2006, 10:40 )</span><!--QuoteEBegin-->Цитата

AppendRTItem


этот метод вставляет в конец документа - не подходит
[snapback]36346" rel="nofollow" target="_blank[/snapback]​
[/quote]
А 3-ра использовать слабо
Создать слабо
1. Создать новый
2. Аппенд текущий
3. Аппенд хистори
4. Перезаписать хистори

Это как задачка из цикла:
есть перменная A=7 и переменная B=9, необходимо поменять значения переменных не используя других переменных
 
D

Domino6

#8
<!--QuoteBegin-Fugitive+22:05:2006, 11:28 -->
<span class="vbquote">(Fugitive @ 22:05:2006, 11:28 )</span><!--QuoteEBegin-->Подскажите как реализовать этот пункт !!!
[snapback]36363" rel="nofollow" target="_blank[/snapback]​
[/quote]

Есть 2-ва поля Текст и История
при сохранении к тексту бобавляеш историю (AppendTRItem)
А потом полученным делаеш ReplaceItem для Истории. Текст очищаеш
В итоге
История = Текст+История
Текст= ""
 
F

Fugitive

#9
а как сделать replaceitem чтобы заменилось все поле целиком ?
Код:
Call doc.ReplaceItemvalue("result",rtitem_buf.values)
игнорирует картинки. Че я не так делаю ? :)
 
E

Elena Nefedova

#10
Описание в хелпе св-ва Values такое: String. The text in the field, rendered into plain text.
Так что и не будет этим способом картинок.
 
F

Fugitive

#11
Как тогда это поле полностью заменить на новое значение ?
Может почистить его как-нибудь ?
 
E

Elena Nefedova

#12
Если обработка в пользовательском интерфейсе принципиальна, то см. методы Copy, Past, Cut, GotoField и тому подобные объекта NotesUIDocument.
Если нет - используйте то, что посоветовали коллеги выше, не открывая документы.
 
F

Fugitive

#13
Если обработка в пользовательском интерфейсе принципиальна, то см. методы Copy, Past, Cut, GotoField и тому подобные объекта NotesUIDocument.
С rich я играюсь в postsave.

Если нет - используйте то, что посоветовали коллеги выше, не открывая документы.
Посоветовали replaceitem. Как его реализовать? Подскажите код, пожалуйста, как сделать replace одного ricgh на другой.
 
E

Elena Nefedova

#14
И чего вы после этого ждете?
В Postsave вообще не корректно изменять значения полей текущего документа. Тогда уж в Querysave.

Посоветовали replaceitem. Как его реализовать? Подскажите код, пожалуйста, как сделать replace одного ricgh на другой.
Реализовать можно, закрыв документ предварительно.
ReplaceItem - это метод класса NotesItem, из которого все свойства и методы наследует NotesRichTextItem (+ свои собственные). Все примеры в хелпе есть.

А вообще, произвольная обработка RichText представляет из себя не самую простую задачу.
Вам лучше рассказать, что именно вы пытаетесь сделать. Возможно, задача решается проще.
 
F

Fugitive

#15
И чего вы после этого ждете?
Я жду помощи более опытного специалиста, чем я. Я пытаюсь решить конкретную задачу. Советуюсь и прошу помощи.

В Postsave вообще не корректно изменять значения полей текущего документа. Тогда уж в Querysave.
В Querysave нельзя обратиться к полям типа rich! Эти поля доступны только после сохранения документа.

ReplaceItem - это метод класса NotesItem, из которого все свойства и методы наследует
NotesRichTextItem (+ свои собственные). Все примеры в хелпе есть.
Вы говорите про ReplaceItemvalue ???? Если да, то ReplaceItemvalue метод класса notesdocument. Если нет, то что это за метод ReplaceItem у класса NotesItem?? Дайте описание из хелпа.

А вообще, произвольная обработка RichText представляет из себя не самую простую задачу.
Вам лучше рассказать, что именно вы пытаетесь сделать. Возможно, задача решается проще.
В предыдущих постах писал, что нужно в поле richtext реализовать историю сообщений. Главная загвоздка в том чтобы последние записи были в начале поля, а не в конце.
 
E

Elena Nefedova

#16
В Querysave нельзя обратиться к полям типа rich! Эти поля доступны только после сохранения документа.
Эти поля доступны сразу после NotesUIdocument.Refresh(True) - не нужно записывать
Вы говорите про ReplaceItemvalue ???? Если да, то ReplaceItemvalue метод класса notesdocument.
Тут-то вы правы. Это я от поспешности глупость вписала.

В предыдущих постах писал, что нужно в поле richtext реализовать историю сообщений. Главная загвоздка в том чтобы последние записи были в начале поля, а не в конце.
На событие QueryOpen попробуйте повесить такую последовательность:
Call notesRichTextItem_msg.AppendRTItem( notesRichTextItem_hist )
Call notesDocument.RemoveItem( itemName_hist )
Call notesDocument.CopyItem( itemName_msg, itemName_hist )
Call notesDocument.RemoveItem( itemName_msg )
Если документ открывается сразу в режиме редактирования - должно получиться.
Если это получится - можно тогда и с переходом от чтения к редактированию разбираться - не так сложно
 
F

Fugitive

#17
Забавно :)
Вроде все получилось, если писать в rich в postsave, А потом в QueryOpen удалять поле и т.д.
Только вот после postsave смотрю поля документа (не в дебаггере) и вижу что появляются 4 поля с одинаковым именем, имя то в которое я писал текст. :(
Elena Nefedova писала, что изменять значения полей в postsave некорректно, может из-за этого ??

Попытался писать в rich в querysave. Сначала сделал рефреш. Потом записал в rich. Открываю документ и вижу что все что записывал не сохранилось.
Как работать с rich в querysave ?
 
E

Elena Nefedova

#18
Что ж вы так мучаетесь?
Сделала вам тестовый пример Посмотреть вложение RichTextHistory.rar - посмотрите и копайте дальше!
Нельзя!! этим способом перемещать из поля в поле аттачи и внедренные объекты - для этого должно быть отдельное поле

А вообще - люди неспроста создают документы ответов для хранения ответов - посмотрите форум IBM
Если б проще было историю в rich-text пихать, то так бы они и сделали
 

Вложения

F

Fugitive

#19
Мда.....Спасибо большое за пример. Благодарю Вас.
Но, если в риче есть внедренные обьекты, то поле с хистори дублируется ;)
Видно не судьба реализовать такую весч.
Однако, спасибо еще раз ха помощь.
 
N
#20
Для: Fugitive

Notes R. 7.0

Код проверен на работоспособность. Из текущего rtitem "body" в начало rtitem "history" добавляется: текст, графика, вложения, нотес-ссылки на другие объекты (база данных, представление, документ). Новые данные в поле "history" отделяются от уже имеющихся символом новой строки.

Код:
Dim session As NotesSession
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim uidoc_reopen As NotesUIDocument	
Dim body As NotesRichTextItem
Dim history As NotesRichTextItem
Dim body_name As String
Dim history_name As String
Dim temp As NotesRichTextItem
Dim temp_name As String

' global
Set session = New NotesSession
Set ws = New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document	
' items
body_name = "body"
history_name = "history"	
temp_name = "($temp)"
If Not doc.HasItem(body_name) Then
Set body = New NotesRichTextItem(doc, body_name)
Else
Set body = doc.GetFirstItem(body_name)
End If
If Not doc.HasItem(history_name) Then
Set history = New NotesRichTextItem(doc, history_name)
Else
Set history = doc.GetFirstItem(history_name)
End If
Set temp = New NotesRichTextItem(doc, temp_name)
' save changes
Call uidoc.Save
' save temp
Call temp.AppendRTItem(history)	
Call doc.Save(True, True)
' save history
Call history.Remove()
Call doc.Save(True, True)	
Set history = New NotesRichTextItem(doc, history_name)
Call doc.Save(True, True)	
Call history.AppendRTItem(body)
Call history.AddNewline(1)
Call history.AppendRTItem(temp)	
Call temp.Remove()
Call doc.Save(True, True)	
' reopen current doc
doc.SaveOptions = "0"		
Call uidoc.Close		
Set uidoc_reopen = ws.EditDocument(True, doc)
 
Статус
Закрыто для дальнейших ответов.