2013-06-27 17 views
0

好吧,我有一个包含几个RichTextFields的表单。在表单的PostOpen事件中,我正在重建几个RichTextTables。另外,我在此表单上有一个按钮来更改这些RichTextTables中包含的一些信息。如何在执行使用这些视图的例程期间刷新不在UI中的视图?

第一种情况:第一次打开文档时,RichTextTables不显示。每次文档打开后,它都显示得很好。我怀疑它正在打开,关闭和另一个打开,以正确显示RichTextTables。我可以使用一些帮助让他们第一次显示。

第二种情况:在PostOpen中调用以执行此重建的例程也可以从表单上的一个按钮调用,该按钮允许用户更改RichTextTables中包含的值。该例程根据在重建例程中定义的视图中的精细值构建这些表。当使用此按钮并进行更改时,我正在使用NotesView.Refresh例程刷新受影响的视图,然后重新构建Tablses,关闭UI并重新打开UI以显示表。那么,这是不工作的,因为更改不显示。事实上,如果我关闭文档并重新打开它,那么更改仍然不会显示。如果我转到已更改的视图并在用户界面中将其打开,然后返回打开文档,则会在第二次打开文档时显示更改。如何在不需要在ui中打开视图的情况下工作?

有人有什么建议吗?

MJ

回答

0

首先:在没有看到你的代码,它几乎是不可能的帮助。

尽管如此:NotesRichtextitems需要保存后才能显示在前端。所以你需要有一个“CloseAndReopen” - 函数,它会执行更新,保存后端文档,然后重新打开文档。类似这样的:

'Declare variables 
Dim ses As New NotesSession 
Dim db As NotesDatabase 

Dim ws As New NotesUIWorkspace 
Dim uidoc As NotesUIDocument 
Dim doc As NotesDocument 
Dim body As NotesRichtextitem 
Dim strUnid As String 

'- Set database to get the document 
Set db = ses.CurrentDatabase 

'- get the current uidoc 
Set uidoc = ws.CurrentDocument 

'-save it, otherwise you will not be able to access the richtextitem 
If uidoc.IsNewDoc Then Call uidoc.Save() 

'- Get The backend document 
Set doc = uidoc.Document 

'- Get the richtextitem 
Set body = doc.GetFirstItem("Body") 

'- and do something with it 
Call body.AppendText("some very interesting text") 
Call body.AddNewline(2) 

'- found this useful to make the Richtextitem have the changes directly 
Call body.Compact() 

'- Save it 
Call doc.Save(True, True, True) 

'- get the unid to be able to reopen 
strUnid = doc.UniversalID 

'- Make the "do you want to save" disappear 
Call uidoc.Document.ReplaceItemValue("SaveOptions" , "0") 

'- close it 
Call uidoc.Close 

'- Destroy the object for the doc (otherwise it might NOT really close) 
Delete Doc 

'- get it back 
Set doc = db.GetDocumentByUNID(strUnid) 

'- and reopen 
Call ws.EditDocument(False , doc) 

对于您的View-问题:NotesView.Refresh不重建视图的索引。它只是刷新你的内存中的表示,包含你初始化对象后发生的所有事情。但可能“NotesView.AutoUpdate = True”可能会有所帮助。但可能你的服务器只是忙于保持视图索引是最新的,或者视图没有配置为自动更新(检查视图属性)...

再次:没有代码,这只是盲目猜测。 ..

+0

我同意以上所述。通常,您打算对RichText项目执行的操作可能会有所不同:嵌入式视图,多值字段,纯文本字段,HTML等等。你想完成什么? –

0

自R4(此版本引入LS)以来,这是非常常见的:只有在关闭并再次打开文档后才会反映RT更新。如果您在打开的文档中更改RT,则需要重新打开它。

简单的解决方法是使用:

unid = ... ' get UNID of current document 
workspace.CurrentDocument.Close 
workspace.EditDocument unid, False 

这将重新打开文件,你会看到改变RT。

0

您的文件应该保存。并且你的RichtextItem应该被更新。之后,只显示RichText项目的内容。

  • 将SaveOptions字段设置为0.保存该文档。
  • 更新RichText字段。