• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Notesrichtextitem

  • Автор темы Event01
  • Дата начала
E

Event01

По ходу знакомства с Лотусом возникла одна сложная проблема.
Такая проблема: как отобразить в документе поле NotesRichTextItem созданное с помощью метода new или createrichtextitem?
(В свойствах документа это поле есть.)
 
A

Akupaka

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

вывод - нужно добавить на форму RT-поле
 
E

Event01

вывод - нужно добавить на форму RT-поле
да, так работает в документах, где уже создано поле, но возникает следующая проблема. При создании нового документа с добавленным на форму RT - полем и использовании метода createrichtextitem для создания итема с таким же именем, это поле остается пустым несмотря ни на какие изменения с richtextitem.
 
A

Akupaka

ой... я не выдержу снова это объяснять ;)
мужики, помогайте!..

дело в том, что работать с richtext на уи и бэкэнде параллельно нельзя прямо - нужно через зад...
поэтому конкретный совет можно сделать только, если будет поставлена конкретно задача.
пока могу лишь посоветовать поискать по форуму по работе с richtext...
тут рядом есть ветка, если умеешь абстрагироваться от задачи, то должен понять суть... :blink:
https://codeby.net/threads/30217.html
 
E

Event01

поэтому конкретный совет можно сделать только, если будет поставлена конкретно задача.
задача очень проста.
есть форма с одним полем типа Rich Text, имя поля "F1", есть action со следующим кодом
[codebox]Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim curdoc As NotesDocument
Dim rtitem As Variant
Set uidoc = ws.CurrentDocument
Set curdoc = uidoc.Document

Set rtitem = curdoc.CreateRichTextItem("F1")
Call rtitem.AppendText( "ABC" )
Call curdoc.Save( False, True )
End Sub[/codebox]
Нужно, чтобы после нажатия кнопки содержимое отображалось в поле.
 
O

Omh

В данной задаче можно начать с uidoc'a, а не с background документа.
А именно
Код:
Call UIDocFieldSetText("F1", "ABC")
 
O

Omh

Ну тогда откупорить гуголь и почитать, как переоткрыть документ, что такое SaveOptions = "0" и почему richtext не появляется сразу.
На самом деле, это уже пержёвано пицот раз, не то что до состояния кашицы, а уже на атомы разобрано ;)
И на этом форуме и на -надцати других.

Если о сути, то надо переоткрыть ui документ после апдейта ричтекста.
 
A

Akupaka

короче гря, смотри код, анализируй, испытывай ;)
https://codeby.net/threads/30217.html?vi...st&p=139560
https://codeby.net/threads/30217.html?vi...st&p=139567

тот самый финт, о котором там грится - переоткрытие УИ-документа после изменения richtext'а, чтобы отобразить эти изменения... (через зад)
просто, это на столько пережеванная тема... и каждый новичек стремиться задать похожий вопрос :blink:
 
E

Event01

Ну тогда откупорить гуголь и почитать, как переоткрыть документ, что такое SaveOptions = "0" и почему richtext не появляется сразу.
что то типо этого? ;)
[codebox]Dim wksp As New NotesUIWorkspace
Dim session As New NotesSession
Dim uidoc As NotesUIDocument, uidocNew As NotesUIDocument
Dim doc As NotesDocument
Dim rti As NotesRichTextItem
Dim strFieldname As String

Set uidoc = wksp.CurrentDocument
uidoc.Refresh True ' do this if the rich text field is editable, to get the current contents in case user has modified them.
Set doc = uidoc.Document ' get the back-end document for the document open on screen.
strFieldname = uidoc.CurrentField ' remember the current field if any
Set rti = doc.GetFirstItem("BodyZ") ' insert your fieldname here, generally "Body"

' Make your rich text changes here, for instance:
'Call rti.AddNewLine(1, True)
'Call rti.AppendText(Now & ": log entry.")
If session.NotesBuildVersion >= 190 Then
rti.Update ' ND6 only
Else
Call doc.ComputeWithForm(True, False) ' caution, as this may erase some field values if you have @Db functions in formulas.
End If

doc.SaveOptions = "0" ' make it possible to close the document without a "do you want to save" prompt. If this is a mail-in doc you may need to set MailOptions="0" also to avoid being prompted.
Call uidoc.Close(True)
Set uidocNew = wksp.EditDocument(True, doc, , , , True)
Delete uidoc
uidocNew.Document.RemoveItem("SaveOptions")
If strFieldname <> "" Then uidocNew.GotoField(strFieldname) ' return focus to field that was current before.[/codebox]
 
O

Omh

что то типа
Код:
Set rtitem = curdoc.CreateRichTextItem("F1")
Call rtitem.AppendText( "ABC" )
Call curdoc.Save( False, True )
Call curDoc.ReplaceItemValue("SaveOptions", "0")
Call uidoc.Close
Dim TmpDoc as NotesDocument
Set TpmDoc = db.getDocumentByUNID(curdoc.UniversalID)
Call ws.EditDocument(False, TmpDoc)
Код черновой, просто для иллюстрации
 
A

Akupaka

Event01, вот скажи честно, впадло разобрать тот код, что я тебе посоветовал? ;)
ведь он простой до ужаса!
 
E

Event01

что то типа

Set rtitem = curdoc.CreateRichTextItem("F1")
Call rtitem.AppendText( "ABC" )
Call curdoc.Save( False, True )
Call curDoc.ReplaceItemValue("SaveOptions", "0")
Call uidoc.Close
Dim TmpDoc as NotesDocument
Set TpmDoc = db.getDocumentByUNID(curdoc.UniversalID)
Call ws.EditDocument(False, TmpDoc)

Код черновой, просто для иллюстрации
спасибо,теперь все работает ;)

Event01, вот скажи честно, впадло разобрать тот код, что я тебе посоветовал? smile.gif
ведь он простой до ужаса!
да сначала ты мне дал ветку анализировать.... я посмотрел ее со стороны.... подумал... и решил поискать в гугле :blink:
 
A

Akupaka

в той ветке человечек так же учится как и ты, только задача немного иная, хотя лечится тем же способом...
 
H

hosm

Цитата(Akupaka @ 27:05:2009 - 13:33)
Event01, вот скажи честно, впадло разобрать тот код, что я тебе посоветовал? smile.gif
ведь он простой до ужаса!

да сначала ты мне дал ветку анализировать.... я посмотрел ее со стороны.... подумал... и решил поискать в гугле
по крайней мере и то хорошо, что сам нашел и всё работает :)
если в другой раз понадобится, может, руки дойдут, и в простом "до ужаса" разберется ;)
 
E

Event01

а можно ли как нибудь открыть attachment файл, используя LotusScript?
 
H

hosm

Есть вариант выгрузить аттач себе на диск (см хелп ExtractFile) и открыть с диска.
Как и где открыть, уже зависит от типа файла, операционки и т.п.
 
E

Event01

еще два вопроса возникли.
1. Как можно обновить actions чтобы hide formula перевычислилась?
2. как можно программно скрывать/отображать actions, не используя hide formula?
:)
 
K

K-Fire

еще два вопроса возникли.
1. Как можно обновить actions чтобы hide formula перевычислилась?
2. как можно программно скрывать/отображать actions, не используя hide formula?
:)

1. RefreshHideFormulas например.
2. Вроде бы никак.
 
E

Event01

1. RefreshHideFormulas например.
2. Вроде бы никак.
спасибо. еще один вопрос возник - по полям Readers Authors.
Можно ли сделать, чтобы поле readers указывало бы только на возможность открытия документа, а не на отображение его в представлении?
 
Мы в соцсетях:

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