lotus notes 开发常用方法
一、关于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("myitem",i)
Next
Call doc.save(True,True )
这个程序用以对当前文档增加10个ITEM,名字都叫myitem,但值从1到10不等。结果如何?用调试方式进行观察,发现:确实增加了10个ITEM,名字都叫myitem,但值却都是1!这与NOTES中的帮助不符。帮助里宣称:
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
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("MYDOC","WORD.DOCUMENT.8","")
似乎一切都正常。但当我变更了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("docadd")
If lnflag=0 Then
Call uidoc.fieldsettext("docadd","1")
Call
uidoc.createobject("worddoc","