文档编辑状态更新RTF域

前两天遇到一个问题:在当前编辑文档上,点击按钮,从其他文档中获取内容,替换到当前文档的RTF域中,并设置字体、大小等属性。
 
很快将代码写出来,一运行才发现,忘记RTF在编辑状态刷新是需要“保存”-“关闭”再“打开”这三个动作的。
 
       Call doc.save(True,True)
       Call uidoc.Close(True)
       Set uidoc = ws.editdocument(True,doc)
 
但是又出现两个问题,(1)我已经调用了后台(back end)doc对象的save方法了,在关闭文档时,还是弹出一个提示,问我是否保存当前文档。并且(2)重新打开文档后,RTF的字体样式没有变化。
 
问题(1)我想notes文档编辑状态下,对文档的后台对象保存后,一般调用uidoc的refresh等方法就可以了,但是RTF域不行,可能是基于效率的原因,所以不会像一般域那样即时刷新。只有关闭再打开才能刷新。
如果关闭时提示要保存,说明notes发现我对文档做过修改(我想应该是通过某种比较判断得出的),但我在后台做的修改,并且也调用save写到数据库中了,怎么还是提示我要保存。改成uidoc.save也是一样。这个提示对我的功能影响很大,如果用户选择保存,我的后台处理会被当前文档内容替换回去。所以必须想办法去掉这个提示。
几乎快要放弃的时候,偶然注意到,在当前文档关闭前,notes提示保存时,当前文档因为已经执行ws.editdocument()方法在另一个窗口中悄悄打开了,并且它的RTF域的内容是以我的处理结果表现的。这给了我一个启示。 我的后台处理是正确的,只要notes不弹出提示,我的处理就完成。虽然我是在编辑状态下点击按钮启动功能的,但我的处理都是后台的,不一定非要在编辑状态下进行,我可以把文档状态切换到读状态后再开始后台处理,这样就避免了在处理结束、文档关闭时才提示文档未保存。通过实践证明我是对的。
其实就是把文档编辑的影响,从RTF域后台处理中剥离出去。 uidoc.editmode 的true 到false 的切换可以判断当前文档是否已经被修改。
 
问题(2)刚开始我直接设置doc.body=””这样来清空原来的值,但有出现两个问题,一就是设置的字体没变化,二是当第二次操作时,body域的域类型变成了文本域,在Set rtitem = doc.GetFirstItem("body")这一句会出现类型不匹配的错误。我不明白doc.body=””这样一个操作会使notes把一个RTF域变成文本域。为了证明NotesRichTextStyle对象是有用的,我试着用script创建一个包含RTF域的新文档,用NotesRichTextStyle对象设置RTF域值,结果是成功的。 这不仅说明 NotesRichTextStyle 对象是有用的,也说明RTF 的文本样式设置对新的RTF 域才有效。(?不太肯定是这样)。于是把清空body内容的代码改为如下:
       '清空当前域内容
       Set rtitem = doc.GetFirstItem("body")
       rtitem.remove
       Set rtitem = doc.CreateRichTextItem("body")
这样,之后的文本设置就正确了。
 
完整源代码如下:
Sub Click(Source As Button)
       Dim ws As New NotesUIWorkspace
       Dim s As New NotesSession
       Dim uidoc As notesuidocument
       Dim doc As notesdocument
       Dim rtitem As notesrichtextitem
       Dim richStyle As NotesRichTextStyle
      
       Set uidoc = ws.CurrentDocument
       Call uidoc.save
       uidoc.editmode=False           ‘关键是这里
       Set doc = uidoc.Document
      
        '清空当前域内容
       Set rtitem = doc.GetFirstItem("body")
       rtitem.remove               ‘关键是这里
       Set rtitem = doc.CreateRichTextItem("body")
      
       Set richStyle = s.CreateRichTextStyle
       '增加标题
       richStyle.NotesFont = FONT_COURIER
       richStyle.Bold = True
       richStyle.FontSize = 26
       richStyle.Italic=True
       Call rtitem.AppendStyle(richStyle)
       Call rtitem.appendtext("Titleeeeeeeeeeee")
       Call rtitem.AddNewline(1)
      
       '增加内容
       richStyle.Bold = False
       richStyle.FontSize = 9
       Call rtitem.AppendStyle(richStyle)
       Call rtitem.appendtext("contents")
       Call rtitem.AddNewline(1)
      
       '增加两个换行,和下一Outline分隔开
       Call rtitem.AddNewline(2)
      
       Call doc.save(True,True)
       Call uidoc.Close(True)
       Set uidoc = ws.editdocument(True,doc)
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值