Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Inhalt eines RT-Feldes in eine Variable schreiben

<< < (4/7) > >>

jens1979:
Habs jetzt mit dem JBuilder alles hinbekommen ... ich glaub ich halt mich jetzt erstmal an den ... wollt ja auch irgendwann mal beiginnen mein Problem zu lösen  ;)

Also der connect zu Notes klappt schonmal so weit. Ich hab das einfach mal mit ein paar Codes probiert die ich im Netz bzw. der Designer Help gefunden habe ...

Hab mir noch eben schnell die Herdt-Unterlagen für Java/Domino5 bestellt ... ich nehm mal an ... dann werd ich's etwas besser auf die Reihe bekommen euch was Code-technisches zu liefern mit dem Ihr was anfangen könnt.  ;D

Jens

jens1979:
Die Frage die sich mir jetzt stellt ... ich finde zwar in der Designer-Hilfe massig NotesAgents (welche ich aber meines Verständnisses nach auch nur als Agenten im Notes benutzen kann) ... allerding jedoch recht wenig zum Notes-Connect mittels externem Java-Programm.

Was muss ich von der logik her tun um ein RT-Feld auszulesen?

Ich denk mir das so:
1. Connect zur DB
2. Suchen des Doc's mittels eines Feldes und erhalten der UNID
3. Öffnen des Doc's mit der UNID
4. Auslesen der Feldes

Hab ich da jetzt erstmal was vergessen oder passt das so?
Wie bekomm ich den connect auf den Server hin (das wäre die Kür ... muss aber net sein ... die DB liegt eh repliziert auf dem Arbeitsplatz vor).


Danke Jens

Hernan Cortez:
Hab hier noch was. In der Hashmap stehen serverName, serverPath, userPwd. Die vorher mit put da reintun.
 
Database und Session werden in der Klasse als Instanzvariablen über mehrere Aufrufe gehalten. Bei Aufruf von Methoden, die gegen die Datenbank gehen, immer neuen sinitThread und stermThread setzen.
Meine Exceptions einfach raustun.
Genauso die logger().

Poste einfach den code. Das Gemoser über "Das ist ja gar nicht Objektorientiert" kommt sowieso   ;D


--- Code: ---   /** initialize (notes-)session and (notes-)database */
   public void initDbConnection(HashMap appParameters) {
      logger.debug("Entering()");
      //System.out.println("appletParameters=" + appletParameters);

      serverName = (String) appParameters.get("dbServerName");
      serverPath = (String) appParameters.get("dbPathName");
      String userPwd = (String) appParameters.get("userPwd");

      this.appParameters = appParameters;

      notesConnectionException = null;
      try {
         NotesThread.sinitThread();
         if (userPwd.equals(null)) {
            nSession = NotesFactory.createSessionWithFullAccess();
         } else {
            nSession = NotesFactory.createSessionWithFullAccess(userPwd);
         }
         nDbCurrent = nSession.getDatabase(serverName, serverPath);
      } catch (Exception e) {
         cleanNotesInstanceVariables();
         notesConnectionException =
            new NotesConnectionException(
               TEXT_NOTES_CONNECTION_EXCEPTION,
               e);
         e.printStackTrace();
      }
      logger.debug("Exiting()");

   }

--- Ende Code ---

cleanNotesInstanceVariables(). Kann quasi auch als Disconnect genommen werden. Besser aber eigene Methode die diese einfach aufruft. :

--- Code: ---   public void cleanNotesInstanceVariables() {
      logger.debug("Entering()");
      System.out.println("NotesConnection cleanNotesObjects()");
      if (nDbCurrent != null) {
         try {
            nDbCurrent.recycle();
         } catch (Exception e) {
            e.printStackTrace();
         }
         nDbCurrent = null;
         
      }
      if (nSession != null) {
         try {
            nSession.recycle();
         } catch (Exception e) {
            e.printStackTrace();
         }
         nSession = null;
      }
      logger.debug("Exiting()");
   }

--- Ende Code ---

Die eigentlichen Aufgaben bestehen dann darin, die Swing-Gui Aufrufe multiThread fähig zu machen etc. (hey. Das ist Standard !).

bom noite

Axel

jens1979:
Hallo mal wieder,

ich hab mich jetzt mal ein bissel eingelesen und mit Hilfe der Herdt-Unterlagen ein kleines Java-Programm geschrieben, mit dem ich schon mal ein paar Felder aus meiner DB aulesen kann.
Also um es genauer zu sagen liest das Programm alle Kundennr. nacheinander aus.
Dies geschieht so:

[size=0,5]import lotus.domino.*;
public class ThreadAbgeleitet extends NotesThread {
  public static void main(String args[] ) {
    try {
      ThreadAbgeleitet ta = new ThreadAbgeleitet();
      ta.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

  public void runNotes() {
    try {
      Session se = NotesFactory.createSession();
      System.out.println(se.getCommonUserName());
      Database db = se.getDatabase("MeinServer","Datenbank.nsf");
      View vw = db.getView("vwAll");
      Document doc = vw. getFirstDocument();
      while (doc != null) {
        System.out.println(doc.getItemValueString("KNR"));
        doc = vw.getNextDocument(doc);
      }
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}[/size]

Ich hab jetzt schon viel damit rumprobiert, aber zwei bzw. 3 Probleme bleiben mir.

1. Kann ich über diesen Weg eigentlich das von mir gewünschte RichText-Feld auslesen in dem die Grafik (TIFF oder JPEG) liegt? Und wenn ja wie ... eigentlich nimmt die Routine ihre Informationen doch aus der Ansicht (in der ich ja keine RT-Felder anzeigen kann), oder?

2. Wie schaffe ich es nach einem bestimmten Dok zu suchen?

3. Ist wahrscheinlich das Wichtigste. Wie bekomm ich das ganze in eine grafische Ansicht (Also das Fenster kann ich öffnen aber ich habe keine Ahnung wie ich den Text da rein bekommen soll (Hier fehlen mir wohl Java-Basics))

Ich hoffe die Infos reichen euch


Jens

Ralf_M_Petter:
Nein hier fehlen dir offensichtlich keine Java Basics sondern Notes Basics. Denn das suchen eines Dokuments geht in Java beinahe 100% gleich wie in Lotus scritpt.

Hier ein kleiner Codeausschnitt wie ich aus einem Richtext Feld ein Bild auslese und in ein Java Icon verwandle das dann später in einer Swing Gui verwendet wird.

RichTextItem rtitem=(RichTextItem)doc.getFirstItem("Anhang");
        if (rtitem==null){
            return;
        }
        EmbeddedObject obj=(EmbeddedObject)rtitem.getEmbeddedObjects().elementAt(0);
        java.io.InputStream is=obj.getInputStream();
        int length=is.available();
        byte[] bytearray= new byte[length];
        int erg=is.read(bytearray);
        icon=new ImageIcon(bytearray);
        is.close();
        obj.recycle();
        rtitem.recycle();

Für alle die jetzt gleich wieder darüber mosern, das man das auch anders machen kann. Ja klar, aber erstens ist der Code uralt und zweitens never change working code ;-)

mfg

Ralf

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln