当前位置: 代码迷 >> Lotus >> 初学者求教一个代理循环取值的有关问题
  详细解决方案

初学者求教一个代理循环取值的有关问题

热度:155   发布时间:2016-05-05 06:49:17.0
菜鸟求教一个代理循环取值的问题
    菜鸟求教一个问题,我现在在做邮件60天后提醒代理上,假设每天运行一遍这个代理,发过邮件得人就不用发了,我给这个所取值得表单中加了一个域“remindNum”,默认为空值,一旦这个文档被发过邮件的话,该值就变为“XO”,也就不会再次接收邮件了,但现在的问题是为何一次都只能发一封邮件,如果手动运行Domino Designer 会卡死,但依旧只发一封邮件。之前用Do Until doc Is Nothing代替While Not doc Is Nothing用Loop代替Wend,也是只发一封邮件并且Designer卡死。
求各位大神指导指导小弟吧!!!
Sub Initialize 
 On Error Goto ErrHandle 
 Dim session As New NotesSession 
 Dim   i   As   Integer 
 Set   db   =   session.CurrentDatabase 
 Set view=db.Getview("ReminderMailView") 
  
 Call view.Refresh 
 Set doc=view.Getfirstdocument() 
 Dim msgsubject As String 
  
 While Not doc Is Nothing 
   
  If doc.remindNum(0)<> "XO" Then 
  '===提醒邮件 
   Call sendMindMail(doc) 
    
  '改变操作记录 
   doc.remindNum="XO" 
   Call doc.save(False,False) 
    
  End If 
 Wend 
  
 Exit Sub 
ErrHandle: 
 Msgbox  " 自动更新物料信息代理行号:" &  Erl() & "  错误号:" & Err() & "  错误内容:" & Error() 
 Set maildoc=db.createdocument 
 maildoc.form = "memo" 
 Set rtitem1 = New notesrichtextitem(maildoc,"Body") 
 maildoc.subject = "提醒: 自动邮件提醒息代理运行出错!  " & Error & Erl() 
 maildoc.sendto = "XXXXXX" //XXXXXX代表收件人地址
 maildoc.send(False)  
End Sub 

文档

------解决方案--------------------
你的循环,已经进入死循环了。
第一个文档doc发送出去之后,第一个循环结束,没有将doc指向下一个文档
 While Not doc Is Nothing 
   
  If doc.remindNum(0)<> "XO" Then 
  '===提醒邮件 
   Call sendMindMail(doc) 
    
  '改变操作记录 
   doc.remindNum="XO" 
   Call doc.save(False,False) 
    
  End If 
   set doc = view.Getnextdocument(doc) 
 Wend 
------解决方案--------------------
引用:
那句 “ Call doc.save(False,False) ”使得doc不在当前视图了,所以需要在保存前取得下一个文档:

While Not doc Is Nothing 
set docTemp=view.Getnextdocument(doc) 
If doc.remindNum(0)<> "XO" Then 
  '===提醒邮件 
   Call……

正解。
对于该问题的解决方法除了你的方法外,我喜欢把符合条件的文档Search出来放到一个NotesDocumentCollection中再遍历,这样即使call doc.save(false,false)后也不会有问题了。
  相关解决方案