Tinku
Tinku

Reputation: 61

Not able to get out of the loop after getfirstitem in lotus script

Sub Initialize

On Error GoTo ErrorOut  

Dim sess As NotesSession
Dim db As NotesDatabase
Dim doc, searchDoc, reqNumDoc As NotesDocument
Dim body As NotesMIMEEntity
Dim header As NotesMIMEHeader
Dim stream As NotesStream
Dim vwSearchRequests As NotesView
Dim reqNum, totalNotify, totalAccepted, totalRejected, totalOOO, totalNoRes As Integer
Dim reqSer, reqJRSS, reqSPOC, reqNumStr As String
Dim reqDate As String
Dim reqNumColl As NotesDocumentCollection
Dim reqPanelRes As NotesItem
Dim reqPanelResValue As Variant

Set sess = New NotesSession
Set db = sess.CurrentDatabase
Set vwSearchRequests = db.GetView("RequestDocReport")
vwSearchRequests.Autoupdate = False
Set searchDoc = vwSearchRequests.GetFirstDocument

While Not searchDoc Is Nothing
    reqSer = "Service"
    reqJRSS = searchDoc.PS_JRSS(0)
    reqSPOC = "Hiring SPOC"
    totalAccepted = 0
    totalRejected = 0
    totalOOO = 0
    totalNoRes = 0
    totalNotify = 0

    reqNum = searchDoc.PS_RequestNo(0)
    reqNumStr = {PS_RequestNo = "} & reqNum & {"}
    Set reqNumColl = vwSearchRequests.GetAllDocumentsByKey(reqNumStr)
    Set reqNumDoc = reqNumColl.GetFirstDocument
    While Not reqNumColl Is Nothing

        If Not reqNumDoc.GetFirstItem("PanelResponse") Is Nothing Then
            reqPanelResValue = reqNumDoc.GetItemValue("PanelResponse") 
            MsgBox CStr(reqPanelResValue(0))
            'Exit Sub
            If CStr(reqPanelResValue(0)) = "Accepted" Then
                totalAccepted = totalAccepted + 1
            End If
            If CStr(reqPanelResValue(0)) = "Rejected" Then
                totalRejected = totalRejected + 1
            End If
            If CStr(reqPanelResValue(0)) = "OOO" Then
                totalOOO = totalOOO + 1
            End If  
        Else
            If CStr(reqPanelResValue(0)) = "" Then
                totalNoRes = totalNoRes + 1
            End If
        End If

        totalNotify = totalNotify + 1
        Set reqNumDoc = reqNumColl.GetNextDocument(reqNumDoc)
    Wend

what is the error in code? The code is getting stuck after

If Not reqNumDoc.GetFirstItem("PanelResponse") Is Nothing Then
                reqPanelResValue = reqNumDoc.GetItemValue("PanelResponse")

Upvotes: 0

Views: 259

Answers (2)

Richard Schwartz
Richard Schwartz

Reputation: 14628

Apart from any other problems you might have in your code (and @Knut is correct about the cause of your infinite loop), this is not a good pattern:

If Not reqNumDoc.GetFirstItem("PanelResponse") Is Nothing Then
            reqPanelResValue = reqNumDoc.GetItemValue("PanelResponse") 

You're retrieving the item twice when you don't actually have to.

This woould be much better:

If reqNumDoc.HasItem"PanelResponse") Then
            reqPanelResValue = reqNumDoc.GetItemValue("PanelResponse") 

Upvotes: 0

Knut Herrmann
Knut Herrmann

Reputation: 30970

Instead of line

 While Not reqNumColl Is Nothing

write

 While Not reqNumDoc Is Nothing

You got an infinitive loop because the collection reqNumColl is not nothing all the time even when you reached the last document in collection. Instead you have to test the document reqNumDoc.

Another issue might be your code for collection calculation:

reqNumStr = {PS_RequestNo = "} & reqNum & {"}
Set reqNumColl = vwSearchRequests.GetAllDocumentsByKey(reqNumStr)

The way you coded it the first sorted column in view should contain

PS_RequestNo = "12345"

Probably, your view contains in first sorted column just the request number. If so, your code would be just:

Set reqNumColl = vwSearchRequests.GetAllDocumentsByKey(reqNum)

if column contains a numeric value or

Set reqNumColl = vwSearchRequests.GetAllDocumentsByKey(cStr(reqNum))

if it contains a string.

Upvotes: 2

Related Questions