Agent funktioniert nicht....

  • Guten Morgen zusammen.


    Ich hab da mal ne Frage, ich hab sie schonmal gestellt hab aber bis jetzt noch keine Antwort bekommen.
    Ich hoffe ihr könnt mir weiterhelfen.


    Problembeschreibung:
    Ich habe eine Datenbank entwickelt in der Agenten ein Datum mit dem heutigen Arbeitstag überprüfen sollen.
    Der Agent funktioniert super wenn ich ihn direkt im Notes über Aktionen.... starte.
    Allerdings will ich dass der Agent jeden Tag automatisch startet.
    Leider funktioniert das aber nicht.
    Kann mir da jemand weiterhelfen?
    Vielen Dank schonmal im Voraus.


    Gruß Chris

  • Zitat


    ChrisW schrieb:
    Der Agent funktioniert super wenn ich ihn direkt im Notes über Aktionen.... starte.
    Allerdings will ich dass der Agent jeden Tag automatisch startet.
    Leider funktioniert das aber nicht.


    Was funktioniert nicht? Fehlermeldungen?


    Ein paar mehr Infos wären nicht schlecht, denn:


    mehr Input -> mehr Output.



    Axel

  • 1) Wie Axel schon sagt, mehr Input.
    2) Ich würde mal stark drauf tippen, dass Du in Deinem Agent UI-Objekte verwendest. Die funktionieren, wenn man ihn manuell startet, aber nicht am Server, wenn der Agent zeitgesteuert läuft.

  • Hi,


    ich habe einen ähnlichen Fehler und habe keine Ahnung woran das liegt.


    Ich gebe euch einfach mal den ganzen Code.
    Der Agent läuft zwar durch, aber er ändert nichts in der Datenbank.
    Die Datenbank liegt auf SERVERII





    Sub Initialize

    'Initialisierung der Datenbanken + Überprüfung ob die Datenbanken volltextindiziert ist'
    Dim DBNames As NotesDatabase
    Set DBNames = New NotesDatabase("SERVERI", "names.nsf")
    If Not DBNames.IsFTIndexed Then
    Call DBNames.UpdateFTIndex(True)
    End If

    Set DBNames = New NotesDatabase("SERVERI","names.nsf")
    If Not DBNames.IsFTIndexed Then
    On Error 4080 Resume Next
    Call DBNames.UpdateFTIndex(True)
    If Err = 4080 Then
    Messagebox("Datenbank kann nicht auf dem Server " & DBNames.Server & " indiziert werden!")
    Exit Sub
    End If
    End If

    Dim DBKatalog As NotesDatabase
    Set DBKatalog = New NotesDatabase("SERVERII", "catalog.nsf")
    If Not DBKatalog.IsFTIndexed Then
    Call DBKatalog.UpdateFTIndex(True)
    End If

    Set DBKatalog = New NotesDatabase("SERVERII","catalog.nsf")
    If Not DBKatalog.IsFTIndexed Then
    On Error 4080 Resume Next
    Call DBKatalog.UpdateFTIndex(True)
    If Err = 4080 Then
    Messagebox("Datenbank kann nicht auf dem Server " & DBKatalog.Server & " indiziert werden!")
    Exit Sub
    End If
    End If

    'Initialisieren der geöffneten Datenbank'
    Dim session As New NotesSession
    Set db = session.CurrentDatabase
    Set view = db.GetView("Anzeige")


    'Löschen aller alten Dokumente'
    Set collection = view.AllEntries
    Set entry = collection.GetFirstEntry()
    While Not(entry Is Nothing)
    Set doc = entry.Document
    doc.Remove(True)
    Set entry = collection.GetNextEntry(entry)
    Wend

    'Einlesen der Ansicht "_Personen" aus dem Adressbuch'
    Set viewNames = DBNames.GetView("_Personen")
    Set docNames = viewNames.GetFirstDocument


    'Erstellen von Dokumenten und füllen der Felder'
    While Not (docNames Is Nothing)

    If docNames.MailFile(0) <> "" Then
    'Neues Dokument erstellen'
    Set doc = db.CreateDocument

    'Überprüfung ob eim Dokument des Adressbuchs eine Mail-Datenbank zugeordnet ist und gegebenenfalls füllen der Felder'
    'mit dem Namen der Mail-Datei, der Größe der Mail-Datei und der jeweiligen Dokumentenanzahl'
    doc.Form = docNames.Department
    Forall x In docNames.MailFile
    doc.MailFile = x
    If x <> "" Then
    ret = Split(x, "\")
    Set doccol = DBKatalog.FTSearch(ret(0) + "/" + ret(1),0)
    If doccol.Count > 0 Then
    Set docKatalog = doccol.GetFirstDocument
    doc.Größe = docKatalog.DBSize
    doc.AnzahlDoc = docKatalog.DbNumDocuments
    doc.DBPercentUsed = docKatalog.DbPercentUsed
    End If
    End If
    End Forall

    'Speichern des neuen Formulars'
    Call doc.Save( True, True )
    End If

    Set docNames = viewNames.GetNextDocument(docNames)
    Wend

    End Sub

  • Crashdow
    Gleicher Fehler?
    Das bedeutet dein Agent läuft auch automatisch? Dann helfen dir msgbox gar net. Daher siehst du gar nicht ob der Agent schon bei einer deiner Error-Abfragen rausspringt. Hier mußt du mit print arbeiten.... dann siehst du was im log
    Hab den Code aber noch nicht ganz durchgearbeitet... :)

  • @Cashdow


    ich habe den Code zwar nur mal überflogen, aber eine Ecke kommt mit sehr spanisch vor.



    ...
    'Neues Dokument erstellen'
    Set doc = db.CreateDocument


    'Überprüfung ob eim Dokument des Adressbuchs eine Mail-Datenbank zugeordnet ist und gegebenenfalls füllen der Felder'
    'mit dem Namen der Mail-Datei, der Größe der Mail-Datei und der jeweiligen Dokumentenanzahl'
    doc.Form = docNames.Department
    ...


    Gibt es wirklich eine Maske die so heisst wie die Abteilung? Gibt es eine Ansicht, die diese Dokumente anzeigen kann?


    Hast du mal in den Datenbank-Eigenschaften die anzalh der Dokumente vor und nach dem Agentenlauf überprüft?



    Axel

  • tomthecat
    OK, ich habs korrigiert, "Ähnlicher Fehler".
    Das einzigste was an ChrisW's fehlerbeschreibung nicht bei mir zutrifft ist das der Agent auch Zeitgesteuert läuft. Nur ändert er nichts in meiner Datenbank.


    Hier das Protokoll des Agent:
    Started running agent 'Zähler' on 01.01.2006 07:00:29 AM
    Running on all documents in database: 492 total
    Found 492 document(s) that match search criteria
    Ran LotusScript code
    Done running agent 'Zähler' on 01.01.2006 07:00:29 AM


    Die Messageboxen sind hinzugekommen da ich sie Standardmäßig an der Stelle einfüge und da ich den Agent erst Lokal getestet habe.
    Aber ich hoffe ja auch das der Code mit den Messageboxen nicht ausgeführt wird.



    alex
    Die Felder und Ansichtennamen müssten alle Stimmen. Wenn ich den Agent Lokal starte klappt das alles einwandfrei. Nur wenn ich ihn Zeitgesteuert laufen lasse funtzt es nicht.



    Das ganze kann eigentlich nur daran liegen das der Code anders verarbeitet wird wenn ich ihn Zeitgesteuert vom Server aus starte.
    Lokal gestartet läuft es ja.




    PS: In der Datenbank gibt es eigentlich gar keine Maske, das Dokument wird komplett durch den Agent erstellt.
    Das eizigste was es gibt ist eine Ansicht.

  • .-) hatte immer noch keine zeit den code genauer zu lesen.. aber du sagst du hoffst..... :)
    Da ein lokal gestartet Agent sich anders verhält als einer vom Server würde ich mal die msgboxen mit print-befehlen austauschen. Einfach zu sehen ob du den zugriff auf den server/db bekommst...


    noch ein tip (so mach ich das immer)
    wenn ein agent net so läuft wie er laufen sollte baue ich immer ein paar print befehle ein um zusehen ob er auch wirklich alles abarbeitet oder irgendwo rausspringt.

  • Hm,
    wenn ich jetzt ein paar Print-Befehle reinbau, wo führt er den dann mein Protokoll und reicht es wenn ich einfach


    Print ("Hier komme ich hin") in den Code einfüge?


    PS: der Server auf dem die Datenbank läuft ist ein Linux-Server




    Ich kann mir auch eigentlich nur noch vorstellen das der Agent die Datenbank nicht öffnet und somit den Code dann auch nicht ausführt.

  • Zitat


    Crashdow schrieb:
    Hm,
    wenn ich jetzt ein paar Print-Befehle reinbau, wo führt er den dann mein Protokoll ...


    In der log.nsf in der Ansicht "Verschiedene Ereignisse"



    Zitat


    Crashdow schrieb:
    ... und reicht es wenn ich einfach


    Print ("Hier komme ich hin") in den Code einfüge?


    Ja, das reicht.



    Axel

  • Danke,


    ich habe mir jetzt zugriff auf die Datenbank geholt und sie da, so falsch lag ich gar nicht.



    AMgr: Agent ('Kopie von Zähler' in 'tv/it/st/SVZ.nsf') error message: To open database (SERVERI!!names.nsf) on remote machines the server where the agent is running has to be listed by remote machine as trusted server


    er kriegt meine Datenbank nicht offen.


    Kann mir das einer übersetzen?



    Gruß und Dank
    Christian

  • Wenn der Server, auf dem dein Agent läuft, bei dem Server, auf dem das Adressbucht liegt, nicht als "vertrauenswürdig" eingestuft ist, darf der Agent nicht auf diesen zugreifen.


    Zur Behebung wendest Du Dich am Besten an den Notes-Admin Deines Vertrauens, der kann das richten.

  • Und ich dachte schon das liegt an meiner Programmierung.


    Da ich darauf hingewiesen wurde das die names.nsf sowie die catalog.nsf auf beiden Servern gleich ist, habe ich jetzt einfach die Server-Bezeichnung weggenommen.
    Jetzt klappt das ganze und ich habe wieder etwas dazugelernt. Da lohnt sich doch mein Praktikum.


    Vor allem das man die Print Anweisung nur einmal aufrufen und sie danach unterdrücken sollte. Ich habe gerade die Log Datei mit viel Text gefüllt (4 Print-Anweisungen * 498 Datein) :D


    Dank und Gruß
    Christan

  • OK, hab natürlich mehr Input.
    so, wo fang ich am besten an?!
    Also ich habe eine DB.
    Wir haben in einer Excel Datei sogenannte "Monatsjobs", also Jobs die regelmäßig jeden Monat laufen sollen. Diese Jobs werden im SAP erledigt.
    Also es kann sein , dass der 1. Job am 2. Arbeitstag läuft , der andere Job am 4. Arbeitstag usw.
    Nun habe ich mir gedacht dass eine LN DB dass ganze vereinfachen könnte indem sie als Erinnerungs DB dienen soll.
    Also das heißt. Wenn heute der 2. Arbeitstag ist, dann soll der Agent morgens Prüfen welcher Arbeitstag heute ist und nachschauen welche Jobs heute laufen müssen.
    Sollte es einen Job geben der in diesem Fall am 2. Arbeitstag laufen soll, dann soll ein Workflow gestartet werden, der eine e-mail sendet an denjenigen der in dem Dokument in einem Feld drinsteht.
    Weiter unten habe ich die fertige Formel.
    So nun zu meinem Problem:
    Die Formel funktioniert einwandfrei wenn ich se im Notes unter "Aktionen" starte.
    So nun will ich aber dass dies Automatisch geschieht.
    Also duch einen Agenten der morgens läuft(Zeitgesteuert).
    Das habe ich probiert, er läuft zwar (ohne Fehler) aber es gibt keinen Workflow obwohl es eigentlich einen geben sollte.


    Nun meine Frage:
    An was liegt das? Kann mir bitte jemand weiterhelfen?
    Ich verzweifel glaub noch.
    Vielen Dank!!!


    Gruß Chris










    @If(@Text(
    @BusinessDays(@GetProfileField ("Profilmaske";"date"); @Today;1 : 7;@GetProfileField ("Profilmaske";"Feiertag_1") :@GetProfileField ("Profilmaske";"Feiertag_2") :@GetProfileField ("Profilmaske";"Feiertag_3") :@GetProfileField ("Profilmaske";"Feiertag_4") :@GetProfileField ("Profilmaske";"Feiertag_5") :@GetProfileField ("Profilmaske";"Feiertag_6") :@GetProfileField ("Profilmaske";"Feiertag_7") :@GetProfileField ("Profilmaske";"Feiertag_8") :@GetProfileField ("Profilmaske";"Feiertag_9") :@GetProfileField ("Profilmaske";"Feiertag_10") :@GetProfileField ("Profilmaske";"Feiertag_11") :@GetProfileField ("Profilmaske";"Feiertag_12") :@GetProfileField ("Profilmaske";"Feiertag_13") :@GetProfileField ("Profilmaske";"Feiertag_14"))
    ) = tag & erledigt ="Nein";@MailSend(bearbeiter;"";"";"Monatsjob bearbeiten : "+reportname;"";"Du wurdest auserwählt diesen Monatsjob zu bearbeiten:---> ";[IncludeDoclink]);"");



    @If(@Text(
    @BusinessDays(@GetProfileField ("Profilmaske";"date"); @Today;1 : 7;@GetProfileField ("Profilmaske";"Feiertag_1") :@GetProfileField ("Profilmaske";"Feiertag_2") :@GetProfileField ("Profilmaske";"Feiertag_3") :@GetProfileField ("Profilmaske";"Feiertag_4") :@GetProfileField ("Profilmaske";"Feiertag_5") :@GetProfileField ("Profilmaske";"Feiertag_6") :@GetProfileField ("Profilmaske";"Feiertag_7") :@GetProfileField ("Profilmaske";"Feiertag_8") :@GetProfileField ("Profilmaske";"Feiertag_9") :@GetProfileField ("Profilmaske";"Feiertag_10") :@GetProfileField ("Profilmaske";"Feiertag_11") :@GetProfileField ("Profilmaske";"Feiertag_12") :@GetProfileField ("Profilmaske";"Feiertag_13") :@GetProfileField ("Profilmaske";"Feiertag_14"))
    ) > Tag & Erledigt ="Nein";@MailSend(bearbeiter;"";"";"Erinnerung!!! Sie haben den Monatsjob "+reportname + " noch nicht bearbeitet!!!";"";"Bitte bearbeiten Sie nun den Monatsjob und setzen Sie den Status danach auf erledigt:---> ";[IncludeDoclink]);"");


    SELECT @All