DocumentCollection selectedDocs = agentContext.getUnprocessedDocuments() liefert kein Ergebnis

  • Hallo,
    ich habe da ein Problem mit einem Agenten.
    Der Agent wird im Browser über eine Schaltfläche aus einer Ansicht gestartet und soll auf die dort ausgewählten Dokumente laufen.
    Dieser Agent ruft seinerseits einen serverbasierten Agenten auf, der dann Änderungen an den Dokumenten vollzieht.
    Die Dokumentenauswahl liefert mir aber leider kein Ergebnis.
    Wenn ich nicht mit einer Auswahl arbeite, sondern über View.getfirst.....getnext arbeite, werden alle Dokumente der View korrekt abgearbeitet, aber warum
    funktioniert die Auswahl über getUnprocessedDocuments() nicht ? ?(
    Bin für jede Hilfe dankbar.


    Gruß
    Harald




    import lotus.domino.*;


    public class StartDeleteDoc extends AgentBase {


    public void NotesMain() {


    Document parameter = null;
    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    Database db = agentContext.getCurrentDatabase();
    DocumentCollection selectedDocs = agentContext.getUnprocessedDocuments();
    parameter = selectedDocs.getFirstDocument();


    while (parameter != null) {
    String noteID = parameter.getNoteID();
    Agent ag = db.getAgent("DeleteDoc");
    ag.runOnServer(noteID);
    parameter = selectedDocs.getNextDocument(parameter);
    }


    } catch(Exception e) {
    e.printStackTrace();
    } finally {
    if (parameter != null) {
    try {
    parameter.recycle();
    } catch (NotesException e1) {
    e1.printStackTrace();
    }
    }
    }
    }
    }

  • Hallo Taurec,
    ich habe in der Ansicht "Dokumentauswahl zulassen" ausgewählt und als Anzeigemodus "Generiertes HTML verwenden".
    Ich hake die entsprechenden Dokumente an und starte den "StartAgenten" dann über eine Schaltfläche in dieser Ansicht.

  • Nein ich meinte wie du den Agenten in der Ansichtsaktion aufrufst.
    BTW es ist auch sicher eine Ansichtsaktion und keine in der Maske, in der die Ansicht eingebettet ist ?



    Aber wenn du als Ziel keines angibst, wie sollen dann die markierten Dokumente in die UnprocessedDocuments kommen.
    Denn genau das Ziel definiert ja welche Dokumente dort hineinkommen

  • ja, es ist eine Ansichtsaktion, eine eingebettete Ansicht verwende ich nicht.
    Klar, mit "keines" geht's natürlich nicht, habe das jetzt geändert und getestet.
    Aber die Auswahl funktioniert scheinbar nicht, der Agent ruft den serverbasierten Agenten genau einmal auf und verabschiedet sich dann.
    Die gesetzte Auswahl verschwindet, aber wirklich getan hat er nichts.
    Als noteID gibt er immer 116 aus, egal welches Dokument ich ausgewählt habe ?

  • Das ist jetzt ein Codierungsproblem, denn du versuchst dir in deiner Schleife den Nachfolger eines gelöschten Dokumentes zu holen, was natürlich nicht gehen kann.
    Wenn dann musst du dir vor dem Löschen das nächste Dokument holen.


    Ausserdem solltest du die Variable parameter innerhalb der Schleife recyclen, da du sonst irgendwann mal, bei intensiver Nutzung des Codes, ein Speicherproblem auf dem Domino bekommst.


    Warum er nichts tut kann ich dir nicht sagen ohne den Code des aufgerufenen Agenten zu kennen.
    Allerdings frage ich mich da eh, wieso du in einem Serveragenten einen anderen Serveragenten aufrufst

  • Ist klar, werde ich mal anpassen und mir vorher das nächste Doc holen.
    Das mit den zwei Agenten habe ich gemacht, weil mir der Agent sonst das bearbeitete Dokument nicht sichern wollte.
    Nur wenn ich das Dokument geöffnet hatte (also in der Maske den Agenten aufgerufen habe) sicherte er auch die Änderungen, aus der Ansicht funktionierte das nicht.
    Eine bessere Lösung fiel mir nicht ein (bin leider noch nicht so fit) :(


    hier mal der Code des aufgerufenen Agenten:


    import lotus.domino.Agent;
    import lotus.domino.AgentBase;
    import lotus.domino.AgentContext;
    import lotus.domino.Database;
    import lotus.domino.Session;
    import lotus.domino.Document;


    public class ServerBasedAgent extends AgentBase {


    public void NotesMain() {


    Document parameter = null;
    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    Agent ag = agentContext.getCurrentAgent();
    Database db = agentContext.getCurrentDatabase();
    String noteID = ag.getParameterDocID();
    parameter = db.getDocumentByID(noteID);
    parameter.replaceItemValue("Deleted", "1");
    parameter.save (true,false);


    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }

  • mecker bekam ich nicht, ich hatte mir im Agenten nach Feldänderung das Feld erneut ausgelesen und mir im Log ausgeben lassen, der Wert war korrekt.
    Wenn ich danach das Dokument öffnete, war der Feldwert jedoch der alte.


    Habe jetzt den Agenten dahin gehend geändert, dass er sich zuvor das nächste Doc holt.
    Dennoch läuft der serverbasierte Agent nur einmal.
    habe mir auch mal den Count ausgeben lassen. Antwort = 1, obwohl ich vier Dokumente gewählt hatte ?

  • Wenn es nach dem Agenten korrekt war, dann muss die Ursache woanders liegen
    Hast du eventuell in der Maske ein berechnetes Feld mit dem Namen, denn dann greift dieses sobald du das Dokument im Client öffnest.
    Das wird dir dann aber jetzt auch passieren.

  • es ist der Browser, tatsächlich.
    War mit "Mozilla" am testen, da ging es nicht. Im IE zeigt er mir die Ansicht korrekt.
    Nur in IE greift die Dokumentenauswahl auch nicht :cursing:
    Es ist zum Ko.....

  • Welche Version setzt du denn genau ein ?


    Kannst du mir evtl mal die DB zukommen lassen, dann teste ich es mal bei mir. Damit könnte man ausschliessen, daß es an einer bestimmten Umgebung oder Einstellung liegt