Tinku
Tinku

Reputation: 61

Infinite loop in Lotus Notes

While running the agent, I am getting infinite loop error. This agent will get the values of documents. one of the value is request date and another one is response date. If the difference between these two is mre than 3, I need to pick that document and mail to one person. please help me out how to do that.

Sub Initialize

    On Error GoTo ErrorOut  

    Dim sess As NotesSession
    Dim db As NotesDatabase
    Dim vwSearchRequests As NotesView
    Dim reqNumColl As NotesDocumentCollection
    Dim doc, searchDoc, reqNumDoc As NotesDocument
    Dim body As NotesMIMEEntity
    Dim header As NotesMIMEHeader
    Dim stream As NotesStream
    Dim reqPanelRes As Variant
    Dim reqNum,  totalNoRes, reqNumCount, total As Integer
    Dim reqDate, reqDate1, reqDate2, firstresponse, reqSerLine, reqSerArea, reqIntType, response As String



    Dim MailsendTime As New NotesDateTime("")
    Dim CurDate As New NotesDateTime("")
    Dim diff As Long
    Dim diff1 As Long


    Set sess = New NotesSession
    Set db = sess.CurrentDatabase
    Set vwSearchRequests = db.GetView("RequestDocConsolidated")
    Set searchDoc = vwSearchRequests.GetFirstDocument


    MsgBox "hello"
    Set stream = sess.CreateStream
    'sess.ConvertMIME = False ' Do not convert MIME to rich text
    Set doc = db.CreateDocument
    doc.Form = "Memo"
    Set body = doc.CreateMIMEEntity
    Set header = body.CreateHeader("Subject")
    Call header.SetHeaderVal("myHire - Consolidated Report")
    Set header = body.CreateHeader("To")
    Call header.SetHeaderVal("Ashutosh Das/India/IBM@IBMIN")
    Call stream.writetext(|<HTML>|)
    Call stream.writetext(|<head>|)
    Call stream.writetext(|<style>|)
    Call stream.writetext(|table.gridtable{border-width: 1px; border-color: #666666; border-collapse: collapse; width: 95%;}|)
    Call stream.writetext(|table.gridtable th{font-family: verdana,arial,sans-serif; font-size: 11px; color: #FFFFFF; border-width: 1px; padding: 4px; border-style: solid; border-color: #666666; background-color: #09092a;}|)
    Call stream.writetext(|table.gridtable td{font-family: verdana,arial,sans-serif; font-size: 11px; color: #000000; border-width: 1px; padding: 4px; border-style: solid; border-color: #666666; background-color: #ffffff;}|)
    Call stream.writetext(|</style>|)
    Call stream.writetext(|</head>|)
    Call stream.writetext(|<body bgcolor="white">|)
    'Call stream.writetext(|<img src="\myHire_Header.jpg" alt="myHire">|)
    Call stream.writetext(|<font style="font-family: verdana,arial,sans-serif; font-size: 13px; color: #333333;"><br><br>Report to show list of second line escalations gone out SL vise<br><br></font>|)
    Call stream.writetext(|<table class="gridtable">|)
    Call stream.writetext(|<tr>|)
    Call stream.writetext(|<th>Service Line</th><th>Service Area</th><th>Date of Notification</th><th>Panel Name</th><th>Tech/PDM</th><th>Panel Manager</th><th>Date Escalation mail was sent</th><th>Manager response to first escalation</th><th>Date second escalation mail was sent</th><th>Manager response to second escalation</th>|)
    Call stream.writetext(|</tr>|)

    While Not searchDoc Is Nothing

        reqNum = searchDoc.PS_RequestNo(0)

        reqSerLine = searchDoc.PS_Service_Line(0)
        reqSerArea = searchDoc.PS_Service_Area(0)
        reqDate = CStr(Format(searchDoc.RequestSendDate(0),"dd/mm/yyyy hh:mm:ss"))
        PanelId = searchDoc.PANELID(0)
        PanelType = searchDoc.Panel_Type(0)
        PeM_ID = searchDoc.PeM_NotesID(0)
        PanelResponsedate = searchDoc.PanelResponsedate(0) 
        total = 0   

        MsgBox "Hi1"
        Set reqNumColl = vwSearchRequests.GetAllDocumentsByKey(searchDoc.PS_RequestNo(0))
        Set reqNumDoc = reqNumColl.GetFirstDocument
        reqNumCount = reqNumColl.Count

        For i = 1 To reqNumCount
            If Not reqNumDoc.GetFirstItem("PanelResponse") Is Nothing Then
                reqPanelRes = reqNumDoc.GetItemValue("PanelResponse") 

                Set MailsendTime = New NotesDateTime(searchDoc.REQUESTDATE(0))
                Set CurDate = New NotesDateTime(Today)
                diff = CurDate.TimeDifference(MailsendTime)  
                diff1 = CurDate.TimeDifference(searchDoc.PanelResponsedate(0))  
                NoDays = Int(diff/86400)
                NoDays1 = Int(diff1/86400)

                MsgBox "Hi2"
                If CStr(reqPanelRes(0)) = "Accepted" Then
                    response = "Yes"
                End If

                If CStr(reqPanelRes(0)) = "Rejected" Then
                    response = "Yes"
                End If

                If CStr(reqPanelRes(0)) = "OOO" Then
                    response = "Yes"
                End If
            Else
                response = "No"
            End If
            total = total + 1

            reqDate1 = CStr(searchDoc.RequestSendDate(0)+ 2 )
            reqDate2 = CStr(searchDoc.RequestSendDate(0)+ 3 )
            Set reqNumDoc = reqNumColl.GetNextDocument(reqNumDoc)

            MsgBox "Hi3"
            If total = reqNumCount Then
                Call stream.writetext(|<tr>|)
                Call stream.writetext(|<td>| & reqSerLine & |</td><td>| & reqSerArea & |</td><td>| & reqdate & |</td><td>| & PanelId & |</td><td>| & PanelType & |</td><td>| & PeM_ID & |</td><td align=right>| & reqDate1 & |</td><td align=right>| & firstresponse & |</td><td align=right>| & reqdate2 & |</td><td align=right>| & CStr(response) & |</td>|)
                Call stream.writetext(|</tr>|)
            End If

            Set searchDoc = vwSearchRequests.GetNextDocument(searchDoc)
        Next        
    Wend

    MsgBox "Hi4"
    Call stream.writetext(|</table>|)
    user$ = sess.CommonUserName 'if scheduled agent this returns the name of the server
    'Below uses the ampersand (&) to concatenate user$
    Call stream.writetext(|<br>|)
    Call stream.writetext(|<font style="font-family: verdana,arial,sans-serif; font-size: 13px; color: #333333;">Thank you.<br><br>Regards,<br><br><b>myHire Team</b>.</font>|)
    Call stream.writetext(|</body>|)
    Call stream.writetext(|</html>|)
    Call body.SetContentFromText(stream, "text/HTML;charset=UTF-8", ENC_IDENTITY_7BIT)
    Call doc.Send(False)
    sess.ConvertMIME = True ' Restore conversion - very important

    Exit Sub

ErrorOut:
    Print "Error ocurred - Agent: agMailSendDailyReport; Error Line: " & Erl & "; Error: " & Error & "."
    Exit Sub
End Sub

Upvotes: 1

Views: 308

Answers (1)

Knut Herrmann
Knut Herrmann

Reputation: 30970

Your code line

   Set searchDoc = vwSearchRequests.GetNextDocument(searchDoc)

should be after code line Next.

Otherwise, variable reqNumCount is at least for one document 0 and searchDoc stays the same for ever...

Upvotes: 3

Related Questions