Das Notes Forum

Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: fraernst am 25.07.05 - 16:59:08

Titel: JAVA DocumentCollection Class
Beitrag 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();
      }
   }
}
Titel: Re: JAVA DocumentCollection Class
Beitrag von: Thomas Schulte am 27.07.05 - 10:43:45
irgendwie schon ziemlich frech. Dreifach Post im Forum.
Glaubst du wir haben nix besseres zu tun?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: robertpp am 27.07.05 - 10:51:50
Und das auch noch bei seinen "ersten 3. Einträgen"!

Ich glaub einige wissen nicht das wir das alles freiwillig machen!
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 27.07.05 - 11:09:30
sorry, aber ich wusste nicht so richtig zu welchem Thema das am besten passt. Ihr könnt ja zwei Einträge rauslöschen.
Titel: Re: JAVA DocumentCollection Class
Beitrag von: robertpp am 27.07.05 - 11:11:49
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?  ???  ;)
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 27.07.05 - 12:04:12
soll ich das dann nochmal unter Entwicklung eintragen ?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: Thomator am 27.07.05 - 12:19:01
mal zur Thematik:

Du mußt beim aufruf von dc.getNextDocument() wie auch in LS das aktuelle Dokument als Argument übergeben.

Thomas
Titel: Re: JAVA DocumentCollection Class
Beitrag von: animate am 27.07.05 - 12:25:11
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?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: Thomator am 27.07.05 - 12:38:27
stimmt auffallend, Hilfe lesen hilft eben manchmal  ;D
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 27.07.05 - 14:07:28
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 ?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: animate am 27.07.05 - 14:11:33
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
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 28.07.05 - 10:19:20
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 ?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: flaite am 28.07.05 - 10:25:53
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.
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 28.07.05 - 14:19:48
ja, mit System.out.print() kannst du auf die Konsole schreiben.

Oder die Log-Klasse verwenden.

dann kannst du richtig debuggen
Zitat


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();    
                     
Titel: Re: JAVA DocumentCollection Class
Beitrag von: animate am 28.07.05 - 14:30:12
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)
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 28.07.05 - 16:30:27
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 ?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: animate am 28.07.05 - 16:43:21
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();
}
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 29.07.05 - 12:26:10
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
Titel: Re: JAVA DocumentCollection Class
Beitrag von: animate am 29.07.05 - 13:28:39
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.
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 29.07.05 - 15:11:59
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.
Titel: Re: JAVA DocumentCollection Class
Beitrag von: animate am 29.07.05 - 15:20:54
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?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: koehlerbv am 29.07.05 - 15:36:22
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
Titel: Re: JAVA DocumentCollection Class
Beitrag von: fraernst am 29.07.05 - 15:50:24
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 ?
Titel: Re: JAVA DocumentCollection Class
Beitrag von: flaite am 29.07.05 - 15:54:11
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ß.
Titel: Re: JAVA DocumentCollection Class
Beitrag von: koehlerbv am 29.07.05 - 16:18:37
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