我在Lotus Notes中有数据库,我试图编写一个LotusScript,它将循环遍历所有表单,直到选择了指定的表单名称。选择指定的表单名称后,执行其余代码。
基本上,我正在尝试做一个
Forall Form In db.Forms
For form.name <> "Server Information"
Next form
(loop until "Server Information)
...... (rest of code)
End Forall
以下是我正在使用的完整代码。
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim fileName As String
Dim fileNum As Integer
Dim headerstring As String
Dim values As String
Dim selection As String
Dim collection As NotesDocumentCollection
Dim doc As notesdocument
Dim exportField List As String
On Error Resume Next
exportField("ServerName_5") = "ServerName_5"
Set db = session.CurrentDatabase
Forall Form In db.Forms
'I WANT TO SKIP ALL FORM NAMES UNTIL "Server Information" is the current or selected form
'Once the entire loop is complete I don't to go to the next form
If Isempty(form.Fields) Then
Messagebox form.Name & " has no fields"
Else
If form.Name = "Server Information" Then
fieldCount = 0
msgString = ""
fileNum% = Freefile()
fileName$ = "c:\temp\" & form.Name & ".csv"
Open FileName$ For Output As fileNum%
Forall field In form.Fields
If Iselement(exportField(field)) Then
msgString = msgString & Chr(10) & _
"" & field
fieldCount = fieldCount + 1
headerstring=headerstring & |"| &field &|",|
End If
End Forall
Write #fileNum%, |",| & headerstring & |"|
headerstring=""
Else
End If
End If
selection = |Form="| & form.Name & |"|
Set collection=db.Search(selection, Nothing, 0)
For x = 1 To collection.count
Set doc =collection.GetNthDocument(x)
values=""
Forall formfield In form.Fields
If Iselement(exportField(formfield)) Then
newvalue=doc.GetItemValue(formfield)
values=values & |"| & Cstr(newvalue(0)) & |",|
End If
End Forall
Write #fileNum%, |",| & values &|"|
values=""
Next
'now check aliases
If Isempty(form.Aliases) Then
'Messagebox form.Name & " has no aliases"
Else
Forall aliaz In form.Aliases
If aliaz = form.Name Then
Goto NextAliaz 'alias is same as form name
End If
selection = |Form="| & aliaz & |"|
Set collection=db.Search(selection, Nothing, 0)
For x = 1 To collection.count
Set doc =collection.GetNthDocument(x)
values=""
Forall formfield In form.Fields
If Iselement(exportField(formfield)) Then
newvalue=doc.GetItemValue(formfield)
values=values & |"| & Cstr(newvalue(0)) & |",|
End If
End Forall
Write #fileNum%, |",| & values &|"|
values=""
NextAliaz:
Next
End Forall
End If
Close fileNum%
End Forall
End Sub
答案 0 :(得分:1)
首先,我会教你how to fish。
只要您保持在经典Notes开发领域,就可以更快更轻松地捕获技术:Help\help85_designer.nsf
(如果您使用的是版本9,请从IBM的网站或here获取)
然后,今天是你的鱼。
do
(...stuff...)
until (the condition you want)
但请注意,这带来了可怕无限循环的经典风险,因为可能无法达到所需的条件。
您可能更喜欢使用NotesDatabase
类的getForm()
方法。
不要低估LotusScript的面向对象特性以及现成的Domino API内置类的强大功能和表现力。