• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Appendrtitem криво работает

  • Автор темы PavelT100
  • Дата начала
P

PavelT100

Есть doc as NotesDocument и есть код.

Код:
	Dim rtitem As NotesRichTextItem
Set rtitem = New NotesRichTextItem(doc, "Body1" )

Call rtitem.AppendText( "PRUVET MIR !!!" )	
Call rtitem.AddNewLine( 1 )

Dim rtitemOld As NotesRichTextItem 
Set rtitemOld=doc.GetFirstItem("Body")	
Call rtitem.AppendRTItem(rtitemOld)
Call rtitemOld.Remove()

Call doc.CopyItem(rtitem, "Body")			
Call rtitem.Remove()	
doc.Save(True, False )

И работает он почти хорошо. Но когда приходит письмо-документ присланный из ОutLook, например, у которого, например, текст поля Body выделен цветом, красным, например, то в резудьтате работы этого кода цвет пропадает и становится чёрным, что очень досаждает авторитетных пользователей.
Везде где смотрел обсуждение работы AppendRTItem приводились примерно такие приёмы работы с кодом как у меня. Но нигде не встречал описание таких проблем.
Может что-нибудь подскажите ?
 
M

morpheus

Вам наверное понгядобяться такие классы как NotesRichTextRange \ NotesRichTextStyle
 
P

PavelT100

Вам наверное понгядобяться такие классы как NotesRichTextRange \ NotesRichTextStyle

Понять бы как их ещё можно использовать. У меня получается пока что лажа даже со сканированием стилей. Код почти из документации.
Код:
...
Dim rtitemOld As NotesRichTextItem 
Set rtitemOld=doc.GetFirstItem("Body")	

Dim rtnavBodyOld As NotesRichTextNavigator
Set rtnavBodyOld = rtitemOld.CreateNavigator	 

Dim rtrangeOld As NotesRichTextRange
Set rtrangeOld = rtitemOld.CreateRange

Call DisplayRange(rtrangeOld, rtnavBodyOld, RTELEM_TYPE_TEXTPARAGRAPH, "Text paragraph")
...
Sub DisplayRange(rtrange As NotesRichTextRange, rtnav As NotesRichTextNavigator, elemType As Integer, elemTypeStr)
If rtnav.FindFirstElement(elemType) Then
count% = 0
Do
count% = count% + 1
Call rtrange.SetBegin(rtnav)

If elemType = RTELEM_TYPE_TABLECELL Or _
elemType = RTELEM_TYPE_TEXTPARAGRAPH Or _
elemType = RTELEM_TYPE_TEXTRUN Then
Call MsgBox( elemTypeStr & " " & count% & _
" Type: " & rtrange.Type & Chr(13) & _
"Text run: " & rtrange.TextRun & Chr(13) & _
"Text paragraph: " & rtrange.TextParagraph)

Dim style As NotesRichTextStyle		
Set style = rtrange.Style
Call MsgBox("COLOR = " & style.Notescolor )
Call MsgBox("FONTSIZE = " & style.Fontsize )

Else
Call MsgBox(elemTypeStr & " " & count% & " Type: " & rtrange.Type & Chr(13))
End If
Loop While rtnav.FindNextElement(elemType)
Else
Call MsgBox( "No element of this type in Body" )
End If
End Sub

При этом правильно выводится rtrange.Type, rtrange.TextRun, rtrange.TextParagraph, но COLOR равен 0, а FONSIZE сегда равен 12, что совсем не так.
 
P

PavelT100

И чем дальше тем всё больше и больше....
Если документ - письмо сделано и послано (и приянто разумеется) в Лотусе, то простое .Appendtext("QQ") добавляет надпись в конец поля со стилем который был у крайнего параграфа - что ожидаемо.
А вот если пиьмо было создано на стороне, у меня Outlook-ом и послано в Лотус, то .Appendtext("QQ") приводит к катострофическому форматированию - пропадает цвет и размеры шрифтов, всё становится черным и предыдущий текст и добавленный.

Вот почему так происходит ? Неужели никто не сталкивался ?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
потому чта в то время как людя пользуют рендереры обкатаные в тырнете, индусы приляпали свои глюкафичи к нотусам...
получайте майм (если он пришёл) и работайте с майм частями
 
A

AvasKvas

Дня доброго вам желаю, товарищи!
У меня появилась похожая проблема, только пропадает ртф таблица, остается только текст.

Действия следующие:
-) программно создаю документ, заполняю в ртф поле таблицей.
-) Вывожу этот документ в диалоговом окне для заполнения нехватающих данных,все нормально отображается.
-) Если жмакать ОК без заполнения, то я вывожу сообщения что какое-то поле не заполнено и заново открываю это диалоговое окно. Вот тут то все и ломается, пропадает форматирование.

Но это я обошел, делая копирование и удаление ртф поля.(скопировал поле во временный документ, потом удалил в текущем, затем скопировал обратно).

Все бы хорошо, но потом стал делать печать этого документа. Сделал печатную форму, вывожу документ по этой печатной форме в диалоговом окне, а форматирования нет. копирование и удаления поля не помагает. И что то нет мыслей как с этим бороться!? Есть у кого совет?

да еще чято странно. что есть поле с еще одной таблицей, но оно (это поле) первоначально на форме не отображается. Дак в печатной форме зато все норм.
 
D

divankin

Проверьте галочки скрытия.
Скорей всего у вас где-то выставлена галка Hide paragrath when document is -> Printed
 
A

AvasKvas

При чем тут скрытие? У меня пропадает форматирование в ртф поле, текст отстается но не в виде таблице, как было изначально.
 
D

divankin

Проблема только в диалоговом окне? А если вместо открытия печатной формы в диалоговом окне, сохранить документ и закончить выполнение программы, а потом открыть сохраненный документ то таблица есть?

Попробуйте в QueryClose сделать
Call notesUIDocument.Refresh(True) (если в QueryCLose нельзя, то сделайте по кнопке на форме)
также попробуйте в QueryClose сделать Call notesUIWorkspace.RefreshParentNote( )
 
A

AvasKvas

В том то и дело,что документ сохранен. Таблица в нем нормальная. Потом перед выводом на принтер, открываю этот документ в диалоговом окне, а там уже форматирование уже пропало. мало того,если еще и сохранить документ, то и при обычном открытии такой же вид получается.

Поробую сделать, то что вы рекомендуете!Спасибо!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!