Notesrichtextitem

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

Event01

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#2
на форме отображаются те поля, которые дизайнер в дизайнере влепил как поле.
кодом можно добавить итемы не зависимо от того, что на форме отображается...
если на форме есть поле, имя которого совпадает с именем итема в документе, то значение этого итема отобразится в таком поле, при открытии документа...

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

Event01

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#4
ой... я не выдержу снова это объяснять ;)
мужики, помогайте!..

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

Event01

#5
поэтому конкретный совет можно сделать только, если будет поставлена конкретно задача.
задача очень проста.
есть форма с одним полем типа 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]
Нужно, чтобы после нажатия кнопки содержимое отображалось в поле.
 

Omh

Lotus team
04.07.2007
2 210
1
#6
В данной задаче можно начать с uidoc'a, а не с background документа.
А именно
Код:
Call UIDocFieldSetText("F1", "ABC")
 

Omh

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

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#9
короче гря, смотри код, анализируй, испытывай ;)
http://codeby.net/forum/threads/30217.html?vi...st&p=139560
http://codeby.net/forum/threads/30217.html?vi...st&p=139567

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

Event01

#10
Ну тогда откупорить гуголь и почитать, как переоткрыть документ, что такое 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]
 

Omh

Lotus team
04.07.2007
2 210
1
#11
что то типа
Код:
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)
Код черновой, просто для иллюстрации
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#12
Event01, вот скажи честно, впадло разобрать тот код, что я тебе посоветовал? ;)
ведь он простой до ужаса!
 
E

Event01

#13
что то типа

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:
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#14
в той ветке человечек так же учится как и ты, только задача немного иная, хотя лечится тем же способом...
 

hosm

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

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

Event01

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

hosm

* so what *
18.05.2009
2 442
6
#17
Есть вариант выгрузить аттач себе на диск (см хелп ExtractFile) и открыть с диска.
Как и где открыть, уже зависит от типа файла, операционки и т.п.
 
E

Event01

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

Event01

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