Опять Richtext

Тема в разделе "Lotus - Программирование", создана пользователем Fugitive, 22 май 2006.

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

    Fugitive Гость

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

    Domino6 Гость

    AppendRTItem
     
  3. Fugitive

    Fugitive Гость

    этот метод вставляет в конец документа - не подходит :eek:
     
  4. Elena Nefedova

    Elena Nefedova Гость

    Это принципиально делать в режиме редактирования при открытом документе?
     
  5. allex

    allex Гость

    а поле с сортировкой сделать, в тоаком порядке как тебе надо
     
  6. Domino6

    Domino6 Гость

    <!--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, необходимо поменять значения переменных не используя других переменных
     
  7. Fugitive

    Fugitive Гость

    Подскажите как реализовать этот пункт !!! :)
     
  8. Domino6

    Domino6 Гость

    <!--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 для Истории. Текст очищаеш
    В итоге
    История = Текст+История
    Текст= ""
     
  9. Fugitive

    Fugitive Гость

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

    Elena Nefedova Гость

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

    Fugitive Гость

    Как тогда это поле полностью заменить на новое значение ?
    Может почистить его как-нибудь ?
     
  12. Elena Nefedova

    Elena Nefedova Гость

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

    Fugitive Гость

    С rich я играюсь в postsave.

    Посоветовали replaceitem. Как его реализовать? Подскажите код, пожалуйста, как сделать replace одного ricgh на другой.
     
  14. Elena Nefedova

    Elena Nefedova Гость

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

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

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

    Fugitive Гость

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

    В Querysave нельзя обратиться к полям типа rich! Эти поля доступны только после сохранения документа.

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

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

    Elena Nefedova Гость

    Эти поля доступны сразу после NotesUIdocument.Refresh(True) - не нужно записывать
    Тут-то вы правы. Это я от поспешности глупость вписала.

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

    Fugitive Гость

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

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

    Elena Nefedova Гость

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

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

    Fugitive Гость

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

    nor Гость

    Для: Fugitive

    Notes R. 7.0

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

    Код (Text):
    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)
     
Загрузка...
Похожие Темы - Опять Richtext
  1. vitte
    Ответов:
    10
    Просмотров:
    2.875
  2. Renat11111
    Ответов:
    8
    Просмотров:
    3.699
  3. sanch
    Ответов:
    5
    Просмотров:
    3.082
  4. NickProstoNick
    Ответов:
    5
    Просмотров:
    2.701
  5. aameno2
    Ответов:
    4
    Просмотров:
    3.117
Статус темы:
Закрыта.

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