Lotus Notes - lotusscript Forall循环直到指定值

时间:2016-09-02 16:13:25

标签: lotus-notes lotusscript lotus

我在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

1 个答案:

答案 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内置类的强大功能和表现力。