一、关于AppendItemValue 试试下面这个简单的例子:
Dim ws As New notesuiworkspace Dim uidoc As notesuidocument Dim doc As notesdocument Set uidoc=ws.currentdocument Set doc=uidoc.document For i=1 To 10
Call doc.appenditemvalue(\ Next
Call doc.save(True,True )
这个程序用以对当前文档增加10个ITEM,名字都叫myitem,但值从1到10不等。结果如何?用调试方式进行观察,发现:确实增加了10个ITEM,名字都叫myitem,但值却都是1!这与NOTES中的帮助不符。帮助里宣称: If the document already has an item called itemName$, AppendItemVa lue does not replace it.
Instead, it creates another item of the same name, and gives it th e value you specify.
^^^^^^^^^^^^^^^^^^^^ 从4.6到5.0结果都一样。
二、区分NOTES的前台类与后台类
由于两者的使用范围不一,在写程序时应注意这一点,尤其写代理时。如果在后台服务器运行的代理里加一句:
Dim ws As New notesuiworkspace 代理运行日志报错:Unkown Error.
三、关于NOTES与OLE的共享域
NOTES提供了一个很好的功能:共享域。NOTES用共享域来与OLE应用程序交换彼此信息。但除非确有必要与OLE应用程序共享信息,建议在设计表单时,选上:禁止共享域。 笔者曾在一个表单中创建了一个作者域AUTHOR,又在它的RTF域中嵌入MS-WORD文档: CALL
UIDOC.CREATOBJECT(\
似乎一切都正常。但当我变更了NOTES的作者域AUTHOR(因笔者试图通过作者域的改变来控制NOTES文档的修改进而达到流程控制的目的),因为流程的需要,我把它变成了两个值,在NOTES中显示为:
user1/co1/server1,user2/co1/server2
然后对RTF域中所嵌入的WORD文档进行了修改,然后退出,保存。结果问题出现了,NOTES报错:你不是文档的作者,不能保存!
什么原因?当时我明明是用user1/co1/server1进行修改的!后来,仔细调试,把AUTHOR
的隐藏属性去掉,仔细观察,发现只要激活了RTF域中嵌入的WORD文档,在RTF域中退出来时AUTHOR的值竟变成了: user1/co1/server1/co1/server2!
原来,WORD也有一个作者域,名字也叫AUTHOR(似乎是不能改变的)WORD的AUTHOR与NOTES的AUTHOR相互影响(怎么影响?我也不知道),于是变出了上面的这个怪东西!解决办法,当然,就是把NOTES表单“禁止域交换”了!(OLE应用程序有太多的域,想弄清这些域的名字,似乎不太可能。所以“禁止域交换”应是解决这类问题的最好办法了,窃以为)
四、使用NOTES整合OA应用、OFFICE弥补NOTES不足
Sub Entering(Source As Field) Dim curws As New notesuiworkspace Dim uidoc As notesuidocument Set uidoc=curws.currentdocument lnflag=uidoc.fieldgettext(\ If lnflag=0 Then
Call uidoc.fieldsettext(\ Call
uidoc.createobject(\ End If Exit Sub End Sub
当提交后,须记录并显示编辑者对WORD文档的所有修改,故而要将WORD文档改成修订状态。在提交按钮中,写如下程序: Sub Click(Source As Button) Dim ws As New notesuiworkspace Dim uidoc As notesuidocument Set uidoc=ws.currentdocument Dim curdoc As notesdocument Set curdoc=uidoc.document
Dim worddoc As notesembeddedobject Dim wordapp As Variant
Call ws.editdocument(True) lnflag=uidoc.fieldgettext(\ If lnflag=\
Set worddoc=curdoc.embeddedobjects(0) Set wordapp=worddoc.activate(False) Call worddoc.doverb(\编辑(&E)\ wordapp.application.visible=False
wordapp.application.activedocument.trackrevisions=True wordapp.application.activedocument.showrevisions=True Call wordapp.application.activedocument.save Call wordapp.application.exit End If
Call uidoc.save
Call ws.editdocument(False) End Sub
上述修改WORD文档为修订状态的那段程序,其实可以改为: Set wordapp=uidoc.GetObject(\ wordapp.application.visible=False
wordapp.application.activedocument.trackrevisions=True wordapp.application.activedocument.showrevisions=True Call wordapp.application.activedocument.save 即通过UIDOC的GetObject方法进行访问。
但通过OLE对象访问时,应注意拼写的正确性,尤其是能过指明OLE对象名称(而不是文件名称)来创建时,更应注意OLE对象名称的拼写正确
性。否则,错误难以预料。例如,在RTF域的Entering事件中将创建对象语句按如下修改: 把: Call
uidoc.createobject(\ 改为: Call
uidoc.createobject(\
OLE对象还是可以创建,一切似乎都很正常。但是当执行提交时,若通过EmbeddedObject的访问文档,则在Set wordapp=worddoc.activate
(False)时出错:不能储存对象。
若通过UIDOC的GetObject方法进行访问,则在
wordapp.application.activedocument.trackrevisions=True时出错:没有激活文档。
五、使用APPENDTOTEXTLIST
APPENDTOTEXTLIST增加文本列表项。使用方法如下: Dim rtitem as notesitem dim uidoc as notesuidocument dim ws as notesuiworkspace dim curdoc as notesdocument set uidoc=ws.currentdocument