Object variable not set

  • Hallo zusammen,


    bekomme bei folgendem Script beim manuellen starten immer ein Popup "Object variable not set" und anschließend die Notes-Agentenprotokollbox, dass 5 Dokumente gefunden wurden und dass das Script ausgeführt wurde. Es ist aber nix passiert.
    Wo ist hier der Fehler?
    Kann jemand bitte helfen?


    Vielen Dank im Voraus für Eure Tips.


    Gruß,
    suuper



    Sub Initialize
    '*******************************************************************
    'Begin Variable Declaration
    '*******************************************************************
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim db2 As NotesDatabase
    Dim db3 As NotesDatabase
    Dim view As NotesView
    Dim view2 As NotesView
    Dim doc As NotesDocument
    Dim doc2 As NotesDocument
    Dim outDoc As NotesDocument
    '*************Strings*********************************************
    Dim changePercent As String
    Dim key As String
    Dim fullname As String
    Dim agentNumber As String
    Dim LastNameOnly As String
    Dim server As String
    Dim namesPath As String
    Dim logPath As String
    Dim adminName As String
    Dim warningSubject As String
    Dim lockDown As String
    Dim intermediateSubject As String
    Dim testName As String
    Dim testFlag As String
    '**************Variants*******************************************
    Dim warningSize As Variant
    Dim warningMessage As Variant
    Dim intermediateMessage As Variant
    Dim lockDownExclusions As Variant
    '*************Double********************************************

    Dim divTemp As Double
    Dim warningSize2 As Double
    Dim mbCost As Double
    '**************Misc***********************************************
    Dim errorLog As New NotesLog("Agent Log")
    '*******************************************************************
    'End Variable Declaration
    '*******************************************************************

    Call GetSetupInfo(server, namesPath, logPath, agentLogPath, agentLogSwitch, warningSubject, warningMessage, lockDown, lockDownExclusions, intermediateSubject, intermediateMessage, mbCost, warningSize, sizeText1, sizeText2, sizeSelect, adminName, testName,testFlag)

    setupSize = Clng(warningSize) * 1024

    Set db = New NotesDatabase(server,logPath)
    Set db2 = session.CurrentDatabase
    Set view = db.GetView("Database\Sizes")
    Set doc = view.GetFirstDocument

    Set doc3 = db2.CreateDocument
    If agentLogSwitch Then
    Call errorLog.OpenNotesLog(server,agentLogPath)
    errorLog.ProgramName = Format(Cstr(Today),"mm/dd/yyyy") + " MailFileSizeMonitoring"
    Call errorLog.LogAction("Agent 1.(v3.0.0) - Start Agent")
    On Error Goto errorLog
    End If


    Set db3 = session.GetDatabase(server,namesPath)
    Set view2 = db3.GetView("($VIMPeople)")

    warningSize = Clng(warningSize) * 1024

    LastNameOnly = "F"

    While Not doc Is Nothing

    agentNumber = "1"
    Call CheckNames(doc, doc2, view2, key, fullname, errorlog, agentNumber, agentLogSwitch)
    If Not doc2 Is Nothing Then
    If sizeSelect = "Use Quotas" Then
    Call GetQuota(doc2, quotaSize, server)
    If quotaSize <> 0 Then
    warningSize = Clng(quotaSize)
    End If
    End If
    End If
    divTemp = doc.DiskSpace(0)/1024
    If divTemp > warningSize Then
    divTemp = Round(divTemp/1024,2)

    If Not doc2 Is Nothing Then
    OverCount = OverCount + 1
    nametemp = nametemp + Chr(10) + FullName + ","
    sizeTemp = sizeTemp + Chr(10) + Cstr(divTemp)
    serverTemp = serverTemp + Chr(10) + server
    End If
    End If
    If Not view.GetNextDocument(doc) Is Nothing Then
    Set doc = view.GetNextDocument(doc)
    warningSize = setupSize
    Else
    Set doc = Nothing
    End If
    Wend
    Set outDoc = db2.CreateDocument
    outDoc.Form = "UserReport"
    outDoc.Save True,True
    outDoc.UserName = nameTemp
    outDoc.FileSize = sizeTemp
    outDoc.ServerName = serverTemp
    outDoc.Save True,True
    finishCounter = finishCounter + 1
    nameTemp = ""
    sizeTemp = ""
    serverTemp = ""
    divTemp = 0
    key = ""
    OverCount = 0
    Set doc2 = Nothing
    Set view = Nothing
    Set view2 = Nothing
    Set db = Nothing
    Set db2 = Nothing
    Set db3 = Nothing
    Set outDoc = Nothing

    If agentLogSwitch Then
    Call errorLog.LogAction("Agent 1.(v3.0.0) - Completed Successfully")
    Call errorLog.Close
    End If
    End
    errorLog:
    Call errorLog.LogAction("An Error Has Occured in Agent #1(v3.0.0)")
    Call errorLog.Close

    doc3.SendTo = adminName
    doc3.Form = "Memo"
    doc3.Body = "Error Encountered in SizeMonitoringAgent #1(v3.0.0)"
    doc3.Subject = "Size Monitoring Error in Agent #1"
    doc3.Send(False)
    End Sub

  • Hallo,


    benutz doch bitte mal den Debugger und schau an welcher Zeile das ganze kracht.


    Es ist schwierig bei den ganzen Objekten zu sagen welches nicht gesetzt wird.


    MfG Stefan

  • Hallo,


    kenn mich mit Script und dem Debugger nicht soooo gut aus...aber ich habs mal versucht Euch mehr Infos zu geben:


    Also hab mal den Debugger angeschmissen und über den "Schritt ausführen"-Button mich durchgeklickt bis die Meldung "Object variable not set" kommt. Die dann mit OK bestätigt und dann steht der Debugger mit einem gelben Pfeil vor der Zeile:


    Set doc = view.GetFirstDocument


    Am Scrollbar links sehe ich, dass das Script einmal bis unten durchgelaufen ist und dann wieder weiter oben anfängt. Und dann kommt der Fehler.


    Hilft Euch das weiter?


    Ist eine Datenbank aus der Notes-Sandbox.
    Hab Sie mal hier angehängt.


    Gruß,
    suuper

  • Hallo,


    also, das Skript will folgende View von dir haben :


    Set view = db.GetView("Database\Sizes")


    Die Datenbank, auf die Verwisen wird holt sich das skript drei Zeilen höher :


    Set db = New NotesDatabase(server,logPath)


    und die Parameter "Server" und "LogPath" bekommt es aus dem Setup-Dokument (kann man in der DB mit "Open Command Panel" aufrufen.


    Es wird anscheinend eine Datenbank auf Basis von "log.ntf" erwartet, dort sollte dann auch die View "Database\Sizes" vorhanden sein. Und hey, in der Deutschen Version (jedenfalls auf meinem 7er-Client) gibts die View garnicht. Die heißt stattdessen Dantenbank\Größe bzw im Alias "DatabaseSize".


    Also: Mal die Zeile


    Set view = db.GetView("Database\Sizes")


    ersetzen durch


    Set view = db.GetView("DatabaseSizes")


    oder mit dem Designer mal selbst die entsprechende Datenbank prüfen, welche View dort vorhanden ist bzw. wie sie heißt.


    Am besten den ersten Namen (also den Klarnamen verwenden, ist etwas schneller beim Zugriff), wenn du keine multi-Sprachumgebung verwendest.


    Viel Spass,


    Holger

  • Dem stimme ich fast koplett zu.


    Jedoch der Aussage

    Zitat

    Am besten den ersten Namen (also den Klarnamen verwenden, ist etwas schneller beim Zugriff), wenn du keine multi-Sprachumgebung verwendest


    kann ich mich anschliessen.


    Vor allem auch deshalb, weil in jedem Programmierkurs, den ich bisher besucht habe, eindringlich darauf hingewiesen wird, dass man auf jeden Fall den Alias-Namen verwenden soll.
    Egal ob multi-Sprachumgebung oder nicht.




    Andreas

  • Hallo,
    bin grundsätzlich auch ein Freund von Alias-Benutzung. Aber
    1. Manchmal gibts garkeine Aliase bei den ViewNamen
    2. Ist tatsächlich schneller, vor allem bei einer großen Anzahl von Views, weil zuerst die Klarnamen komplett durchsucht werden, dann die Aliasnamen
    3. Bei reinen programmatischen Views, die nur vom System Benutzt werden ($irgendwas) macht der Alias auch meistens keinen Sinn


    Im obigen Beispiel gebe ich dir recht, da ist die Benutzung des Alias besser, weil vermutlich in fast allen Versionen des Log-Templates der Alias so vorhanden ist und die Log-Schablone jetzt nicht wirklich viel Ansichten enthält :-)))

  • Danke an hchudek!


    Der Ansichtsname wars gewesen.


    ABER...da war ich ja gar nicht so weit weg gewesen.
    Das ist mir auch aufgefallen. Ich hab aber den Ansichtsname in der log.nsf geändert. Und es ging nicht. Sehr komisch...???
    Wenn ich das Scipt ändere dann gehts...
    Das versteh ich nicht...wird da der Ansichtsname noch irgendwo gecached?


    Gruß,
    suuper

  • würde ich jetzt auch mal vermuten, am besten beim debuggen schauen, auf welche Datenbank versucht wird, zuzugreifen. Vielleicht ist ja auch der Server leer, dann versucht er bei lokalem Zugriff auf die lokale Datenbank zuzugreifen und beim zeitgesteuerrten Zugriff auf dem Server greift er sich die Server-Log-DB (die ggf. garnicht geändert ist).


    Viel Grlück,
    Holger