2014-07-08 30 views
0

下面是從Lotus Notes字母提取附件的工作腳本:VBScript錯誤:「項指數中沒有發現......」打開文檔時的Lotus Notes

Dim s 
s = 1 
Do 
s = s + 1 
Dim Session 
Dim Maildb 
Dim view 
Dim vc 
Dim doc 
Dim Item 
Dim coll 
Dim x 
Dim Sender 
Dim sentTo 
Dim viewTimer 
Dim ws 
Dim Source 
Set Session = CreateObject("Lotus.NotesSession") 
Call Session.Initialize("password") 
Set Maildb = Session.GetDatabase("DOMAIN/Servers/Server-Name/RU", "GroupMail\mailbox.nsf") 
Set view = Maildb.GetView("($inbox)") 


If Not Maildb.IsOpen = True Then 
    Call Maildb.Open 
End If 

With view 
    x = 0 
    ReDim LmailID(x) 
    ReDim HasAttach(x) 
    Set doc = .GetFirstDocument 
    If doc Is Nothing Then 

    else 

    Call doc.PutInFolder("Processed") 
    Call doc.Removefromfolder("($inbox)") 

     Do 
     fileNames = Session.Evaluate("@AttachmentNames", doc) 

     For Each Filename In fileNames 

      Sender = doc.GETITEMVALUE("From")(0) 
      strSearchForSpecificName = "SpecificName" 
      If InStr(1, Sender, strSearchForSpecificName) > 0 then 
      sentTo = "[email protected]" 
      else 
      sentTo = Sender 
      End If 

      If Filename <> "" Then 
      Call doc.Save(False, False, True) 
      Set NotesEmbeddedObject = doc.GetAttachment(FileName) 
      NotesEmbeddedObject.ExtractFile ("d:\#files\" + Right("0" & Month(Now), 2) & "-" & Right("0" & Day(Now), 2) & "-" & Year(Now) & "-" & Hour(Time) & Minute(time) & Second(time) & "_" & Filename) 
      Set reply = doc.CreateReplyMessage(False) 
      Call reply.replaceItemValue("SendTo", sentTo) 
      Call reply.replaceItemValue("CopyTo", "[email protected]") 
      Call reply.replaceItemValue("Subject", "Re: " & "файл " + Filename + " передан в обработку " + Right("0" & Month(Now), 2) & "-" & Right("0" & Day(Now), 2) & "-" & Year(Now) & Hour(Time) & ":" & Minute(time) & ":" & Second(time)) 
      doc.SaveMessageOnSend = True 
      Call reply.Send(False) 
      End If 
     Next 
     x = x + 1 
     ReDim Preserve LmailID(x) 
     Set doc = .GetNextDocument(doc) 

     Loop Until doc Is Nothing 
    End If 
    End With 

    Wscript.Sleep (30 * 1000) 

    Set Session = Nothing 
    Set Maildb = Nothing 
    Set view = Nothing 
    Set vc = Nothing 
    Set doc = Nothing 
    Set Item = Nothing 
    Set coll = Nothing 
    Set x = Nothing 

    s = s - 1 
Loop While s > 0 

的問題是,有時我得到錯誤:錯誤:「在索引中未找到條目...」並且程序在處停止。Set doc = .GetNextDocument(doc) line。 有解決這個錯誤的解決方案嗎?

回答

1

您的代碼將從$ Inbox中刪除第一個文檔,因此它不能用作獲取下一個文檔在$ Inbox中的錨點。解決方法通常是確保您在之前刪除當前文檔,然後獲得下一個文檔。即,改變

Call doc.PutInFolder("Processed") 
Call doc.Removefromfolder("($inbox)") 

Call doc.PutInFolder("Processed") 
set nextDoc = .getNextDocument(doc) 
Call doc.Removefromfolder("($inbox)") 

,改變

Set doc = .GetNextDocument(doc) 

set doc = nextDoc 

但是,你的代碼與putInFolder和RemoveFromFolder調用實際上不是裏面的循環,爲此e只有您處理的第一個文檔將被移動到Processed文件夾,並且nextDoc在循環的第一次迭代後將不會被正確設置。如果你真的只想把第一個文檔移動到Processed文件夾中,那麼上面的解決方案仍然是不正確的,因爲你只會在循環之外設置nextDoc一次,並且你將會有一個無限循環,因爲你總是會將doc設置爲相同的nextDoc值。你需要在循環內部有另一個nextDoc = getNextDocument(doc)的實例。如果您真的希望將所有文檔移動到Processed文件夾,那麼您只需移動整個代碼塊,處理文件夾將nextDoc分配到循環內部。

1

問題很簡單:文檔從收件箱中刪除,因此不再處於索引中。如果發生這種情況的兩個條件之一爲真:

  1. 的NotesView-屬性「自動更新」設置爲true
  2. 你timer-觸發「refreshView」 - 子(是不是在你的示例代碼)做了view.Refresh。

儘管事實上,在你的代碼中有大量的「無厘頭」的(抱歉地說),很容易解決這個代碼:

只需使用的事實,即視圖 - 對象可以作爲優勢和變化進行更新,以 「getfirstdocument」 所有的時間:

改變這一行:

Set doc = .GetNextDocument(doc) 

這些行:

Call .Refresh() 
Set doc = .GetFirstDocument 

這是做什麼的:Refresh從視圖中刪除當前處理的文檔。 「下一份」文件將成爲第一份。那你得到,直到沒有更多的「第一」文件...

而且:理查德是正確的。您需要移動Do下方的兩行Call doc.PutInFolder("Processed") Call doc.Removefromfolder("($inbox)"),以便將所有文檔移至文件夾,而不僅僅移至第一個文檔。

+0

現在新錯誤:對象不支持此屬性或方法「GetFirstDocument」 – lsv

+0

對不起,GetFirstDocument沒有參數,並且因爲它位於「With」的內部,所以可以省略視圖。檢查上面的固定代碼 –