Alternative zu @Command( [ToolsRefreshAllDocs] )

  • Hi !

    ich suche einen Alternative zu @Command([ToolsRefreshAllDocs] ) .

    d.h. ich möchte diese Funktion gern per Agent im Hintergrund laufen lassen (zeitgesteuert).



    Diesen Refresh möchte ich über eine Ansicht laufen lassen, deren Dokumente berechnete Felder enthalten.

    Per Button mit dieser Formel funktioniert das, aber ich würde es gern zeitgesteuert im Hindergrund laufen lassen.


    Nun suche ich eine Alternative in LotusScript .

    Habe schon folgendes versucht, aber es funktioniert nicht.

    d.h. es gibt keinen Fehler, es passiert einfach nichts.


    Vielleicht kann mir jemand einen Tipp geben, LotusScript ist nicht so mein "Steckenpferd".

    Vielen Dank.



    Sub Initialize

    Dim session As New NotesSession

    Dim db As NotesDatabase

    Dim view As NotesView

    Dim doc As NotesDocument


    Set db=session.currentDatabase

    Set view = db.GetView("Profildokumente")

    Call View.Refresh


    Set doc = view.GetFirstDocument

    Do While Not (doc Is Nothing)

    Call doc.ComputeWithForm(False,False)

    Call doc.save(False,False)

    Set doc = view.GetNextDocument(doc)

    Loop

    End Sub

  • Der Agent ist völlig in Ordnung und sollte genau das tun was du möchtest.

    Als Vordergrundagent gestartet werden (Fehler-)Meldungen an deinem Client ausgegeben, je nach Fehlerart als Popup oder nur in der Statusbar.

    Als Hintergrundagent gestartet erscheinen die gleichen Meldungen auf der Live-Console des Servers (und zusätzlich in der log.nsf).


    Mögliche Fehlerursachen, wenn scheinbar nichts passiert:


    - es gibt keine Ansicht "Profildokumente"

    - die Ansicht zeigt keine Dokumente

    - der Auslöser des Agenten ist inkorrekt (Stichworte Auslöser oder Zeitplan und korrekter Server)

    - das Ziel des Agenten sollte auf "Kein(e)" stehen wenn du eine eigene Auswahl durchläufst

    - der Account in dessen Namen der Agent läuft hat nicht genügend Rechte zur Agentenausführung auf dem Server (Stichwort: Serverdokument)

    - der Agent (oder der Account in dessen Namen er läuft) hat nicht genügend Rechte auf die DB (Stichworte ACL und Agentensicherheit "Ausführen im Name von")


    Sofern du Zugriff auf die Serverkonsole hast würde ich den Agenten zum Testen auf Zeitplan: Nie und Ziel: Keine stellen und ihn über die Konsole des Servers mit dem folgenden Befehl zu starten versuchen:

    tell amgr run "meinedb.nsf" 'meinagent'


    Wenn etwas nicht stimmt bekommst du das dann dort angezeigt.


    Wenn du keinen Konsolenzugriff hast gehe oben genannte Punkte nach dem Ausschlussverfahren durch und lass dir von einem Admin aus der log.nsf des Servers ggf. die Fehlermeldungen zuschicken.


    HTH

    Carsten

  • Hi !

    Vielen Dank für die ausführlichen Infos.

    Das passt auch alles bei mir.


    Wenn ich den Agenten über die Konsole starte, kommt diese Info:

    Leider werden die Dokumente nicht aktualisiert.



    > tell amgr run "entwicklung\cpy_urlaubsantraege.nsf" 'View_Aktualisieren'

    12.12.2019 10:49:29 Remote console command issued by Stefanie Krueger/aswo: tell amgr run "entwicklung\cpy_urlaubsantraege.nsf" 'View_Aktualisieren'

    12.12.2019 10:49:30 AMgr: Start executing agent 'View_Aktualisieren' in 'entwicklung\cpy_urlaubsantraege.nsf'

    12.12.2019 10:49:30 AMgr: Agent 'View_Aktualisieren' in 'entwicklung\cpy_urlaubsantraege.nsf' completed execution

  • Dann bauen wir mal eine Fehlerbehandlung und etwas mehr Infos in deinen Agenten ein. Dann sollte die Ausgabe bei dir in etwa so aussehen:


    [09F4:01A3-0EC4] { nserver:#1329} 12.12.2019 13:09:42 Remote console command issued by Carsten: te amgr run "test.nsf" 'agenta'

    [1010:000C-17F0] { namgr:#33BC} 12.12.2019 13:09:43 AMgr: Start executing agent 'agenta' in 'test.nsf'

    [1010:000C-17F0] { namgr:#2E62} 12.12.2019 13:09:43 Agent Manager: Agent printing: Anzahl Dokumente: 2

    [1010:000C-17F0] { namgr:#2E62} 12.12.2019 13:09:43 Agent Manager: Agent printing: 1. Dokument wird aktualisiert: Test1

    [1010:000C-17F0] { namgr:#2E62} 12.12.2019 13:09:43 Agent Manager: Agent printing: 2. Dokument wird aktualisiert: Test2

    [1010:000C-17F0] { namgr:#2E62} 12.12.2019 13:09:43 Agent Manager: Agent printing: Agent beendet.

    [1010:000C-17F0] { namgr:#33BE} 12.12.2019 13:09:43 AMgr: Agent 'agent' in 'test.nsf' completed execution


    Ich lasse mir von jedem Dokument einen Zähler und zur Sicherheit noch den Inhalt eines Textfeldes FeldXYZ ausgeben.

    So wie es hier steht getestet und funktioniert, nur der Name der View und des auszugebenden Feldes sind anzupassen.


    Kleiner Hinweis: wenn es mehr als nur ein paar dutzend Dokumente sein sollten könnte die Ausgabe jedes Dokuments das Log vollschreiben, dann ggf. die View so anpassen dass zum Testen erstmal weniger als 100 Dokumente drin stehen. Alternativ legt man einen Ordner an, legt einige Docs rein und nimmt zum Test den Namen des Ordners statt der View, das sollte problemlos gehen.


    Sub Initialize

    Dim session As New NotesSession

    Dim db As NotesDatabase

    Dim view As NotesView

    Dim doc As NotesDocument

    Dim counter As long


    On Error GoTo ErrorHandler


    Counter = 0

    Set db=session.currentDatabase

    Set view = db.GetView("ViewA")

    Call View.Refresh

    Print "Anzahl Dokumente: " + CStr(view.Allentries.Count)


    Set doc = view.GetFirstDocument

    Do While Not (doc Is Nothing)

    Counter = Counter + 1

    Print CStr(Counter) + ". Dokument wird aktualisiert: " + doc.FeldXYZ(0)

    Call doc.ComputeWithForm(False,False)

    Call doc.save(False,False)

    Set doc = view.GetNextDocument(doc)

    Loop

    Print "Agent beendet."

    Exit Sub


    ErrorHandler:

    Print "Fehler " + CStr(Err) + " in Zeile " + CStr(Erl) + ": " + Error$

    Resume Next

    End Sub

  • jup, sieht bei mir auch "so" aus.

    ich habe 2 dokumente in der ansicht. sie werden hier auch erkannt , aber sie werden nicht aktualisiert. :(

    Das sind z.B. Berechnete Felder mit einem @dblookup.

    Funktioniert das vielleicht nicht ?!




    AMgr: Start executing agent 'View_Aktualisieren' in 'entwicklung\cpy_urlaubsantraege.nsf'

    13.12.2019 10:33:52 Agent Manager: Agent printing: Anzahl Dokumente: 2

    13.12.2019 10:33:52 Agent Manager: Agent printing: 1. Dokument wird aktualisiert: 4711

    13.12.2019 10:33:52 Agent Manager: Agent printing: 2. Dokument wird aktualisiert: 1422

    13.12.2019 10:33:52 Agent Manager: Agent printing: Agent beendet.

    13.12.2019 10:33:52 AMgr: Agent 'View_Aktualisieren' in 'entwicklung\cpy_urlaubsantraege.nsf' completed execution

  • habe eine lösung gefunden :)

    ich befülle einfach ein verstecktes feld und dann klappts.


    doc.aktualisierung_agent= "1"


    +++++++++++++++++++++++++++++++++++++++++++


    Sub Initialize

    Dim session As New NotesSession

    Dim db As NotesDatabase

    Dim view As NotesView

    Dim doc As NotesDocument

    Dim counter As Long


    On Error GoTo ErrorHandler


    Counter = 0

    Set db=session.currentDatabase

    Set view = db.GetView("Profildokumente")

    Call View.Refresh

    Print "Anzahl Dokumente: " + CStr(view.Allentries.Count)


    Set doc = view.GetFirstDocument

    Do While Not (doc Is Nothing)

    Counter = Counter + 1

    Print CStr(Counter) + ". Dokument wird aktualisiert: " + doc.perso(0)

    Call doc.ComputeWithForm(False,False)

    doc.aktualisierung_agent= "1"

    Call doc.save(False, False)

    Set doc = view.GetNextDocument(doc)

    Loop

    Print "Agent beendet."

    Exit Sub


    ErrorHandler:


    Print "Fehler " + CStr(Err) + " in Zeile " + CStr(Erl) + ": " + Error$

    Resume Next

    End Sub