Das Notes Forum
Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: fraernst am 25.07.05 - 16:59:08
-
Warum werden bei folgendem Code die Dokumente nicht verarbeitet ?
Wenn man docCur = agentContext.getDocumentContext(); anstatt der while-Schleife nutzt, wird ein Dokument richtig verarbeitet.
import lotus.domino.*;
import java.util.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Fügen Sie Ihren Code hier ein)
Database db = agentContext.getCurrentDatabase();
DocumentCollection dc = db.getAllDocuments();
Document docCur = dc.getFirstDocument();
while (docCur != null) {
Item NA = docCur.getFirstItem("Artist");
NA.setSummary(true);
RichTextItem NARich = (RichTextItem)docCur.getFirstItem("Artist");
NA.setValueString(NARich.getFormattedText(false,0,0));
docCur.copyItem(NA,"CopyArtist");
docCur.save();
docCur = dc.getNextDocument();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
-
irgendwie schon ziemlich frech. Dreifach Post im Forum.
Glaubst du wir haben nix besseres zu tun?
-
Und das auch noch bei seinen "ersten 3. Einträgen"!
Ich glaub einige wissen nicht das wir das alles freiwillig machen!
-
sorry, aber ich wusste nicht so richtig zu welchem Thema das am besten passt. Ihr könnt ja zwei Einträge rauslöschen.
-
Ich würde schon meine, dass du wissen solltest ob du LN R5 oder R6 verwendest und dann denke ich das du etwas "Entwickels" oder? ??? ;)
-
soll ich das dann nochmal unter Entwicklung eintragen ?
-
mal zur Thematik:
Du mußt beim aufruf von dc.getNextDocument() wie auch in LS das aktuelle Dokument als Argument übergeben.
Thomas
-
mal zur Thematik:
Du mußt beim aufruf von dc.getNextDocument() wie auch in LS das aktuelle Dokument als Argument übergeben.
Thomas
das ist nicht richtig. Ein parameterloser Aufruf geht auch und ist dem mit Parameter sogar vorzuziehen.
Was tut denn der Agent, wenn er keine Dokumente bearbeitet? Interessant wäre zu wissen, wie der Verlauf der Abarbeitung ist. Wird eine Exception geworfen? Sind in der DocumentCollection Dokumente? etc?
-
stimmt auffallend, Hilfe lesen hilft eben manchmal ;D
-
Wahrscheinlich geht er gar nicht in die while-Schleife, da der Agent relativ schnell beendet wird. Kann man sich eigentlich wie im JavaScript ein "Alert"-Fenster ausgeben lassen ?
-
ja, mit System.out.print() kannst du auf die Konsole schreiben.
Oder die Log-Klasse verwenden.
Oder Eclipse als IDE verwenden
Using Lotus Notes with Eclipse to manage and run your Java programs (http://www-128.ibm.com/developerworks/lotus/library/notes-eclipse/)
dann kannst du richtig debuggen
-
ja, mit System.out.print() kannst du auf die Konsole schreiben.
Oder die Log-Klasse verwenden.
Oder Eclipse als IDE verwenden
Using Lotus Notes with Eclipse to manage and run your Java programs (http://www-128.ibm.com/developerworks/lotus/library/notes-eclipse/)
dann kannst du richtig debuggen
In dem IBM-Link ist beschrieben wie man Lotus/Domino 6 das Debuggen. Geht das Debuggen auch mit R5 ?
-
Ich vermute nein. Aber du kannst es ja mal ausprobieren.
Eine Alternative wäre noch, den Agenten in Eclipse als Standard Java Anwendung zu schreiben, die von aussen auf Notes zugreift und dann später daraus einen Agenten machen. Hab ich auch schon mal gemacht. Ist aber nicht so das gelbe.
-
ja, mit System.out.print() kannst du auf die Konsole schreiben.
Oder die Log-Klasse verwenden.
dann kannst du richtig debuggen
Wie nutzt man diese Log-Klasse genau, ich habe schon FileLog und NotesLog probiert, aber es ist nix 'rausgekommen :
Log log = session.createLog("debug");
log.openFileLog("log.txt");
// log.openNotesLog(null, "agentlog.nsf");
log.logAction("vor");
// (Fügen Sie Ihren Code hier ein)
Database db = agentContext.getCurrentDatabase();
DocumentCollection dc = db.getAllDocuments();
Document docCur = dc.getFirstDocument();
// docCur = agentContext.getDocumentContext();
// System.out.print("vor");
while (docCur != null) {
// System.out.print("in");
log.logAction("in");
// Vector Artist = docCur.getItemValue("Artist");
// Vector NewArtist = docCur.getItemValue("NewArtist");
Item NA = docCur.getFirstItem("Artist");
NA.setSummary(true);
RichTextItem NARich = (RichTextItem)docCur.getFirstItem("Artist");
// String OA = Artist.toString();
NA.setValueString(NARich.getFormattedText(false,0,0));
// docCur.replaceItemValue("NewArtist","XTESTX");
docCur.copyItem(NA,"CopyArtist");
// Item akt = docCur.getFirstItem("ChangeDate");
// DateTime dat = agentContext.getLastRun();
// dat.setNow();
// akt.setDateTimeValue(dat);
// docCur.copyItem(akt,"$Revisions");
// Item CA = docCur.getFirstItem("CopyArtist");
// View ansicht = docCur.getParentView();
// agentContext.updateProcessedDoc(docCur);
docCur.save();
docCur = dc.getNextDocument();
}
dc.updateAll();
// ansicht.refresh();
log.close();
-
log.openFileLog("log.txt");
Hast du schon mal hier wie gefordert einen Pfad + Dateinamen angegeben?
aus der Hilfe:
The path and file name of the log file. If the file does not exist, the method creates it for you. If a directory in the path does not exist, the method throws an exception.
Vermutlich wird da eine Exception geworfen. Riskiere auch mal einen Blick auf die Java-Debug Konsole (Datei->Extras->Java Debug Konsole)
-
Jetzt klappt es mit dem Logfile, Danke !
Der Agent scheint immer zu enden, wenn Methoden vom Item-Objekt "NA" aufgerufen werden. Erst war es bei "NA.setSummary(true);", dann habe ich das testweise 'rausgenommen, und er endet bei "NA.setValueString(NARich.getFormattedText(false,0,0));".
Gibt es Probleme bei der Item-Klasse in Verbindung mit der DocumentCollection-Klasse ?
-
mach doch mal einen try-catch-finally-Block rein und schreib die Exception ins log
in etwa so:
try {
//dein kritisches Zeuch
} catch (Exception e) {
log.logError(0, e.getStacktrace());
} finally {
log.close();
}
-
immer wenn ich eine log-methode in "catch {}" anspreche bekomme ich folgende Meldung : JavaAgent java:83: Exception lotus.domino.NotesException must be caught, or it must be declared in the throws clause of this method
-
echt sorry, aber ich kann dir nur den Tipp geben, dich mit den Elementen der Sprache (in diesem Fall Java) vetraut zu machen, wenn du sie verwendest.
Alles andere führt imho nicht zum Ziel.
Evtl. hast du Glück und Axel aka kennwort fka Marinero ist in der Stimmung hier einen Java Grundkurs zu geben.
-
Einen Notes-Kurs brauchte ich wohl auch. Nach meinem Verständnis , wenn man im Geltungsbereich des Agenten "für alle Dokumente" auswählt, brauchte man in Java gar nicht DocumentCollection Class und die whlie-Schleife, sondern für jedes Dokument müsste das Java-Programm einmal durchlaufen werden. Das hab' ich ausprobiert, funktioniert aber leider nicht.
-
Einen Notes-Kurs brauchte ich wohl auch. Nach meinem Verständnis , wenn man im Geltungsbereich des Agenten "für alle Dokumente" auswählt, brauchte man in Java gar nicht DocumentCollection Class und die whlie-Schleife, sondern für jedes Dokument müsste das Java-Programm einmal durchlaufen werden. Das hab' ich ausprobiert, funktioniert aber leider nicht.
Nein, nein. Das ist nicht richtig, glaube ich. Soviel ich weiß kann das nur für einfache Aktionen und Formelsprache gelten. Bei LotusScript und Java musst du die Steuerung selber implementieren.
Hast du schonmal probiert deinen ursprünglichen Code unverändert laufen zu lassen und dir anzuschauen, was auf der Java Debug Konsole ausgegeben wird?
-
Der Teil des Postings ist aber schon richtig, Thomas:
Einen Notes-Kurs brauchte ich wohl auch.
Ansonsten hast Du aber Recht, Thomas. LS oder Java - die Steuerung liegt beim Code des Programmierers. NotesDatabase.AllDocuments ist eine mögliche Variante.
Frank: Warum machst Du das eigentlich - da Du ja sowieso schon innerhalb der Notes-DB ansetzt - mit Java ? Allein schon wegen Debugging wäre doch LotusScript in diesem Kontext die freundlichere Lösung ...
Bernhard
-
Um niemanden zu verwirren, hätte man das Pulldown vom Geltungsbereich sperren können, wenn Java oder LS ausgewählt wird.
Mein Problem mit LS ist, dass ich NOCH weniger Kenntnisse habe als in JAVA.
Was hätte denn LS für Vorteile in meinem Fall ?
-
1. Viel bestehender Code ist in LotusScript geschrieben.
2. Es gibt so viele Tücken bei der Integration von Java in Notes, dass ich die (auch für mich) schwierigere Programmiersprache LotusScript verwenden würde.
3. Es ist auch nicht schlecht 2 Programmiersprachen gleichzeitig zu nutzen.
Die Lernkurve für LotusScript ist wirklich flach.
Java macht eh nur mit einer guten IDE und coolen Frameworks Spaß.
-
I second Axel (wo habe ich diesen Spruch nur heute schon zweimal gelesen ;))
Wenn Du mit Java unsicher bist, kann es bei LS kaum schlimmer kommen. LS hat wohl eine flachere Lernkurve, allerdings erreicht man gar nichts, wenn man nicht die Lernreihenfolge einhält:
- Notes-Basics (der erste entscheidende Knackpunkt)
- Umsetzen des Erlernten mit @functions / @commands (vertiefen des o.g.)
- Lernen von LS (BASIC) an sich
- Verstehen des Klassenmodells (das wird der entscheidende zweite Knackpunkt)
- Umsetzung mit LS.
Alles andere ist Gefrickel.
Bernhard