您的位置:首页 > 服装鞋帽 > 饰品 > Lotusscript:GetNextDocument

Lotusscript:GetNextDocument

luyued 发布于 2011-01-24 07:56   浏览 N 次  

今日收到一位学员求助,贴出供大家参考。

胥老师,

下面是我写的Agent,当我调试的过程中发现了一个很奇怪的问题。请问您有遇到过吗?请给我一些建议好吗?

这个Agent 的逻辑是在一个View里面循环,如果DocType这个field 的值是 AAA, BBB, … , YYY, ZZZ, 就把它修改成AAA1, BBB1, …, YYY1, ZZZ1, 然后对文档进行保存。

当我运行的时候,我发现只有一半符合条件的文档成功修改了,剩下的一半就原封不动。

于是我加入了Msgbox doc.LogNo(0) 进行调试。LogNo是一个Number Field,用来储存文档的序列号,是唯一的。我发现弹出窗口显示的LogNo第一次是1(第一个文档),第二次仍然是1(本来应该是第二个文档,2),第三次是3(第三个文档),第四次仍然是3(本来应该是第四个文档,4)……

如果我把Call doc.save(False, False) 这句代码删掉,弹出窗口显示的LogNo就完全正确,1,2,3,4,……

这样看来好像如果要保存文档,循环的指针就不正确(只指向单数的文档),根据您的经验,这是什么问题呢?

Sub Initialize

On Error Resume Next

Dim sess As New Notessession

Dim db As NotesDatabase

Dim view As NotesView

Dim doc As Notesdocument

Dim doc1 As Notesdocument

Dim ct As Integer

Dim count As Integer

ct=0

count=0

Set db = sess.Currentdatabase

Set view = db.GetView( "PatchRecord" )

Set doc = view.GetFirstDocument

Do While Not (doc Is Nothing)

Msgbox doc.LogNo(0)

If(doc.DocType(0) = "AAA") Then

doc.DocType = "AAA1"

count = count + 1

End If

If(doc.DocType(0) = "BBB") Then

doc.DocType = "BBB1"

count = count + 1

End If

If(doc.DocType(0) = "CCC") Then

doc.DocType = "CCC1"

count = count + 1

End If

If(doc.DocType(0) = "YYY") Then

doc.DocType = "YYY1"

count = count + 1

End If

If(doc.DocType(0) = "ZZZ") Then

doc.DocType = "ZZZ1"

count = count + 1

End If

Call doc.save(False, False)

'Msgbox doc.DocType(0)

ct = ct + 1

Set doc = view.GetNextDocument( doc)

Msgbox(ct)

Msgbox count

Loop

Msgbox "finished"

Msgbox(ct)

Msgbox count

End Sub

解决方法:

当对文档保存或者删除等操作后,使用view.GetNextDocument方法不会得到正确结果,应该提早获取,可在Do While后加Set doc1 = view.GetNextDocument( doc),并将ct = ct = 1的下一句改为set doc = doc1。


MSN空间完美搬家到新浪博客!

图文资讯
广告赞助商