将文档从视图复制到其他数据库并将其删除
Copy documents from a view to other database and remove it
我想将文档从数据库中的视图传输到其他数据库中的其他视图,所以我必须复制然后删除文档,因为 notesdocument 的唯一选项是复制到数据库。
所以我有这个代码:
Option Public
Option Declare
Sub Initialize()
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim dbB As New NotesDatabase(db.Server,"Desarrollo\Formular_CL02.nsf")
Dim vwA As NotesView
Dim vwB As NotesView
Dim docA As NotesDocument
Dim docB As NotesDocument
'Open the database
If Not (dbB.isopen) Then
Call dbB.open(db.Server,"Desarrollo\Formular_CL02.nsf")
End If
'Get the views
Set vwA = db.getView( "TestDevelop" )
Set vwB = dbB.getView( "TestDevelop" )
Set docA = vwA.GetFirstDocument
Do While Not( docA Is Nothing )
If docB Is Nothing Then
Call docA.CopyToDatabase(dbB)
Call docA.Remove(True)
End If
Set docA = vwA.GetNextDocument(docA)
Loop
End Sub
当我最后执行代理时,它显示了一个错误:
Function requires a valid ADT argument
如果我删除有关调用 docA.Remove(True) 的行,代理将毫无错误地复制所有文档。
有什么建议吗?
非常感谢!
您删除了docA,然后您将无法获取下一个文档。
只需使用另一个 "docNext" 来保存这些信息:
Dim docNext as NotesDocument
Set docA = vwA.GetFirstDocument
Do While Not( docA Is Nothing )
Set docNext = vwA.GetNextDocument(docA)
If docB Is Nothing Then
Call docA.CopyToDatabase(dbB)
Call docA.Remove(True)
End If
Set docA = docNext
Loop
此外,最好始终在您的代码中包含一个错误处理程序,以至少获取有关错误的最少信息:
第一行代码(在 End Sub 行之前):
On Error Goto ErrorHandler
代码结束:
EndSub:
Exit Sub
ErrorHandler:
Print Err & ", " & Error & " in line " & erl
Resume EndSub
您可以用消息框替换 "print" 或发送电子邮件/写日志文档,等等。但至少你知道错误号、错误文本和错误行...
第 Set docA = vwA.GetNextDocument(docA)
行出现错误,因为您已经删除了 docA,它不能再用作参数。
将您的代码更改为:
Do While Not( docA Is Nothing )
Set docTemp = vwA.GetNextDocument(docA)
Call docA.CopyToDatabase(dbB)
Call docA.Remove(True)
Set docA = docTemp
Loop
我想将文档从数据库中的视图传输到其他数据库中的其他视图,所以我必须复制然后删除文档,因为 notesdocument 的唯一选项是复制到数据库。
所以我有这个代码:
Option Public
Option Declare
Sub Initialize()
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim dbB As New NotesDatabase(db.Server,"Desarrollo\Formular_CL02.nsf")
Dim vwA As NotesView
Dim vwB As NotesView
Dim docA As NotesDocument
Dim docB As NotesDocument
'Open the database
If Not (dbB.isopen) Then
Call dbB.open(db.Server,"Desarrollo\Formular_CL02.nsf")
End If
'Get the views
Set vwA = db.getView( "TestDevelop" )
Set vwB = dbB.getView( "TestDevelop" )
Set docA = vwA.GetFirstDocument
Do While Not( docA Is Nothing )
If docB Is Nothing Then
Call docA.CopyToDatabase(dbB)
Call docA.Remove(True)
End If
Set docA = vwA.GetNextDocument(docA)
Loop
End Sub
当我最后执行代理时,它显示了一个错误:
Function requires a valid ADT argument
如果我删除有关调用 docA.Remove(True) 的行,代理将毫无错误地复制所有文档。
有什么建议吗?
非常感谢!
您删除了docA,然后您将无法获取下一个文档。
只需使用另一个 "docNext" 来保存这些信息:
Dim docNext as NotesDocument
Set docA = vwA.GetFirstDocument
Do While Not( docA Is Nothing )
Set docNext = vwA.GetNextDocument(docA)
If docB Is Nothing Then
Call docA.CopyToDatabase(dbB)
Call docA.Remove(True)
End If
Set docA = docNext
Loop
此外,最好始终在您的代码中包含一个错误处理程序,以至少获取有关错误的最少信息:
第一行代码(在 End Sub 行之前):
On Error Goto ErrorHandler
代码结束:
EndSub:
Exit Sub
ErrorHandler:
Print Err & ", " & Error & " in line " & erl
Resume EndSub
您可以用消息框替换 "print" 或发送电子邮件/写日志文档,等等。但至少你知道错误号、错误文本和错误行...
第 Set docA = vwA.GetNextDocument(docA)
行出现错误,因为您已经删除了 docA,它不能再用作参数。
将您的代码更改为:
Do While Not( docA Is Nothing )
Set docTemp = vwA.GetNextDocument(docA)
Call docA.CopyToDatabase(dbB)
Call docA.Remove(True)
Set docA = docTemp
Loop