normalerweise geht man den umgekehrten Weg.
Du fragst einen Folder nach einem Dokument.
Ein Folder ist vom programmatischen Zugriff eine View.
Also:
View folder = db.getView("Folder1");
DocumentCollection dc = folder.getAllDocumentsByKey(key);
// wobei key ein Schlüssel auf die erste sortierte Spalte des Folders ist.
hoffe es hilft
gruss Axel
danke. das hilft erstmal. hat mich jedoch gleich zu einem weiteren problem geführt.
zunächst hatte ich mein programm mit hilfe der lotus.notes-Klassen geschrieben. Um getFolderReference() zu nutzen, braucht ich jedoch die lotus.domino-Klassen.
??? Meine erste Frage: Wo besteht der Unterschied zwischen den Klassen? Welches ist die bessere Wahl?
Zweite Frage: Nach dem Umschreiben meines Programmes bekomme ich plötzlich ein Problem mit der Zeile:
Document doc = dc.getFirstDocument
??? Woran liegt das und wie behebe ich dieses Problem???
Hier mal mein ganzes kleines Programm nebst Fehlerausgabe (kann zwar problemlos kompilieren, aber nicht ausführen):
/* Analyzer.java */
import java.util.*;
import lotus.domino.*;
public class Analyzer extends NotesThread
{
protected Session sess;
protected Database db;
protected DocumentCollection dc;
public static void main(String[] args)
{
Analyzer a = new Analyzer();
a.start();
}
// open db
public boolean init()
{
try
{
sess = NotesFactory.createSession();
db = sess.getDatabase("", "TUTOR2.NSF");
if(!db.isOpen())
{
System.out.println("...Fehler beim Öffnen...");
return false;
}
else
{
//System.out.println("...DB geöffnet...");
if (!db.getFolderReferencesEnabled())
{
db.setFolderReferencesEnabled(true);
System.out.println("...FolderReference Enabled...");
}
else
{
System.out.println("...FolderReference true...");
}
}
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
// print db name
public void dbInfo()
{
try
{
System.out.println("..." + db.getFileName() + " geöffnet ...");
}
catch (Exception e)
{
e.printStackTrace();
}
}
// fill DocumentCollection
public void readNotesDB()
{
try
{
dc = db.getAllDocuments();
System.out.println("Database \"" +
db.getFileName() + "\" has " + dc.getCount() + " documents");
int n = 0;
// warum hier fehler???
Document doc = dc.getFirstDocument();
/* while (doc != null) {
n++;
System.out.println
("Document # " + n + ": " +
doc.getItemValueString("Subject"));
doc = dc.getNextDocument(doc);
}*/
}
catch (Exception e)
{
e.printStackTrace();
}
}
// run thread
public void runNotes()
{
if(init())
{
dbInfo();
readNotesDB();
}
}
}
Das Programm produziert folgende Ausgabe:
...FolderReference true...
...TUTOR2.NSF geöffnet ...
Database "TUTOR2.NSF" has 518 documents
java.lang.UnsatisfiedLinkError: NIncRefCount
at lotus.domino.local.NotesBase.NIncRefCount(Native Method)
at lotus.domino.local.Document.<init>(Document.java:86)
at lotus.domino.local.Database.FindOrCreateDocument(Database.java:238)
at lotus.domino.local.DocumentCollection.getFirstDocument(DocumentCollection.java:117)
at Analyzer.readNotesDB(Analyzer.java:82)
at Analyzer.runNotes(Analyzer.java:105)
at lotus.domino.NotesThread.run(NotesThread.java:203)
Was genau bedeutet dieser Fehler? Was mache ich falsch?
??? ??? ???
ubb tags eingefügt von Axel
Die Forums-software kennt verschiedene sogenannte UBB-tags. UBB-tags sind ein Pseudo-Standard benannt nach dem Produkt UBB, der dies als erstes benutzte.
[
Dein code ist leichter zu lesen, wenn du unmittelbar vor diesem <code> und nach diesem </code> schreibst. Genau wie html tags.
WICHTIG: Statt kleiner-gleich // grösser-gleich mit diesen Klammern [].
Ich habe das in deinem Posting zur besseren Lesbarkeit editiert.
Da können wir ja beide schreibend drauf zugreifen :-)
Gracias, Danke, Thank you, Muito obrigado,
für dieses interessante Problem (explizit nicht zynisch gemeint).
Dein code ist soweit technisch ok.
Es könnte an deiner Installation liegen.
Ich habe im Disku-Forum von notes.net ähnliches gefunden.
Hast du evt. neben dem 5er-Client auch einen 6er Notes installiert? Oder arbeitest du ganz mit 6.
Es hängt damit zusammen (meine Meinung) dass im Java-Code in notes.jar über Java Native Interface auf OS-Libraries (in C) zugegriffen wird. Offenbar findet er nicht die Richtigen.
Ich hatte (und habe) verwandte Problem auf einem Rechner, wo der Notes-Client auf Grund eines Absturzes in keiner Win-Registry und sonstigen PATH-Variable mehr auftaucht.
Hier der komplette thread aus notes.net r5 forum:
java.lang.UnsatisfiedLinkError: NIncRefCount
Posted by b hausch on 5.Feb.03 at 09:36 AM using a Web browser
Category: Lotus Tools -- Java/CORBA ToolkitRelease: 5.0.10Platform: Windows 2000
when trying to get the first Document out of a DocumentCollection in a standalone app using:
DocumentCollection dc = m_db.getAllDocuments();
Document doc = dc.getFirstDocument();
i get folowing error:
java.lang.UnsatisfiedLinkError: NIncRefCount
at lotus.domino.local.Document.<init>(Document.java:86)
at lotus.domino.local.Database.FindOrCreateDocument(Compiled Code)
at lotus.domino.local.DocumentCollection.getFirstDocument(DocumentCollec
tion.java:117)
at Connect.SelectPerson(Connect.java:76)
at Connect.runNotes(Connect.java:36)
at lotus.domino.NotesThread.run(NotesThread.java:203)
at lotus.domino.NotesThread.run(NotesThread.java:201)
hope someone can help
regards
b.
ANTWORT:
Posted by Valery Kobzar on 18.Mar.03 at 02:11 AM using a Web browser
Category: Lotus Tools -- Java/CORBA ToolkitRelease: 5.0.10Platform: Windows 2000
this error when verion of client 6.x.x
reinstall Lotus Notes v.5.x.x and it fix this problem :)
sorry for my english :)
ANTWORT
RE: java.lang.UnsatisfiedLinkError: NIncRefCount
Posted by b hausch on 19.Mar.03 at 10:39 AM using a Web browser
Category: Lotus Tools -- Java/CORBA ToolkitRelease: 5.0.10Platform: Windows 2000
didn´t know why, but problem seams to be solved
Hier sind noch ein paar ähnliche Problemmeldungen (ohne Lösungen):
Link weitere Problemmeldungen (http://www-10.lotus.com/ldd/46dom.nsf/Search?SearchView&Query=%22java.lang.UnsatisfiedLinkError%3A%20NIncRefCount%22&SearchOrder=0&Start=1&Count=100)
Versuche vielleicht mal in die PATH-Variable des OS an die erste Stelle auf das Programm-Verzeichnis des Notes-Clients zu verweisen.
Also: Win-Startknopf//Systemsteuerung//System//Erweitert //Umgebungsvariablen-Button // System Variablen und da PATH. An erste Stelle sowas wie C:\Lotus\Notes; (hängt davon ab, wo dein Systemverzeichnis liegt).
Hmm. Wenn man mit Netbeans arbeitet, muss man vielleicht auch das Notes-Programmverzeichnis explizit mounten. Kennt sich Ralf besser aus.
Hi,
du kannst das starten der Java-Anwendung auf unterschiedliche Weise vereinfachen.
Die klassische Methode ist einfach eine .bat - Datei. Für diese kann man dann ja auch Verknüpfungen auf den Desktop ziehen.
Dort schreibst du dann 2 Zeilen in der Art wie:
set Classpath=notes.jar;graphic_lib.jar;programm.jar;%Classpath%;
java de.myprog.MainClass;
Heute gibt es aber noch weitere Möglichkeiten, die sich um die Manifest.mf Datei drehen. Nicht ganz sicher, aber falls mich meine Erinnerung nicht täuscht, wenn du im Manifest.mf einer jar auf diese Art die Startklasse angibst, braucht man nur doppelt draufzuklicken. Vielleicht gibt es da auch noch einen Zusatztrick. Steht sicher irgendwo hinter den unten geposteten Links.:
Netbeans (damit arbeitest du, oder?) hat einen sehr brauchbaren jar-Editor.
Hier eine Beschreibung wie du ihn benutzt:
File – New
Jar Archives – Jar Recipe
1. Tab: Namen angeben
2. Tab: Files auswählen: jede Klasse einzeln. Funktioniert nicht rekursiv auf Paketebene.
3. Tab: Modify, nur wenn man es braucht.
4. Tab: Manifest.mf Editor. Das ist sehr gut.
Hier noch ein paar weitere Meldungen:
web page (http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=33&t=004314)
best web page (http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=33&t=005550)
confusing web page (http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=33&t=005619)
Gregg Bollinger hat eine neue Idee web page (http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=33&t=006886)