Hallo Forum,
ich erhalte die Fehlermeldung "Special database object cannot be located" bei folgendem Java Agent Quellcode.
Nach meinen Recherchen ist diese Funktion wohl die Einzigste innerhalb von Lotus Notes, welches mir den kompletten HTML/MIME Code eines Dokuments im Backend zurückliefern kann, um diesen als EML File abzuspeichern.
Der Code soll mir den Dokumentstream zurückgeben, damit ich diesen als EML File abspeichern kann.
Sowohl der Versuch mit "doc.getHttpURL();" als auch der manuelle Versuch danach werfen den gleichen Fehler.
Der Fehler tritt beim Befehl: InputStream streamIn = docURL.openStream(); auf.
Hier der Auszug aus dem Quellcode:
//Dokument aus der Ansicht holen und transformieren
AgentContext agentContext = session.getAgentContext();
db = agentContext.getCurrentDatabase();
view = db.getView("aTest1");
doc = view.getFirstDocument();
System.err.println(" ");
System.err.println("#### Start ####");
System.err.println("doc.getUniversalID(): " + doc.getUniversalID());
String docid = doc.getUniversalID();
//notesURL = "/" + db.getFilePath() + "/" + view.getName() + "/" + docid + "?OpenDocument";
String notesURL = doc.getHttpURL();
System.err.println("notesURL: " + notesURL);
notesURL = "http://xxvvzz/__C12578D200357B40.nsf/aTest1/C2AAA058435D4BD0C125794900441DB0?OpenDocument";
System.err.println("notesURL: " + notesURL);
URL docURL =new URL(notesURL);
System.err.println("100");
InputStream streamIn = docURL.openStream();
System.err.println("110");
In der Anwendung gibt es eine Ansicht die mit dem * für die Defaultview gekennzeichnet ist.
Dies war meine erste Vermutung!
Sowohl das Dokument als auch die Ansicht "aTest1" (zweiter Versuch) sind definitiv vorhanden.
Was kann noch den Fehler werfen?
Anbei der Screenshot von der Serverkonsole.
Systemumgebung:
- Domino 8.5.2 FP3 deutsch
- Lotus Notes 8.5.3 deutsch
Grüße
Legolas
Hallo Pitiyankee,
zuerst mal danke für die prompte Rückmeldung.
Mit der Vermutung der Berechtigung (Leser/Autorenfleder) lagst du richtig.
Es gab Leser- und Autorenfelder im Dokument.
Ich habe zu Testzwecken nun nachfolgendes getan:
- Alle Leser / Autorenfelder im Dokument komplett raus gelöscht
- In der ACL den Anonymous auf Zugriff: „Administrator“ gesetzt
Ich erhalte aber leider immer noch diese Fehlermeldung.
Ich bin leider kein Experte im Bezug mit Java Agenten und Lotus Notes.
Vielleicht könntest du mir die unten aufgeführten Fragen kommentieren, das würde mir sicher weiterhelfen.
Hier die Fragen, die sich für mich nach Deinem Posting ergeben haben:
1) Wenn ich dich richtig verstehe, wird ein Java-Agent der auf die http Enging von Domino zugreift nicht im Namen des Dominoservers ausgeführt (wie Notes Agenten), sondern greift immer als Anonymous zu?
Oder welche Berechtigung benötigt ein solcher Agent denn?
(Normale Java Agenten auf dem Server laufen aber im Kontext des Servers. Hier habe ich schon Agenten laufen, die auf Dokumente mit Autorenfeldern zugreifen!)
2) Hat das obige Problem vielleicht irgendwas mit den Einstellungen „Öffentliches Dokument“ zu tun?
3) Benötigt die Anwendung irgendwelche Designelemente, die diese Art von Java-Agent Aufruf erwartet? (z.B.: DefaultView, usw.)
4) Gibt es eine Möglichkeit, den Java Code der auf den http Task zugreift so auszuführen, dass dieser mit einer Berechtigung auf die DB ausgeführt wird, die nicht über den Anonymous läuft? (z.B.: im Kontext des Servers läuft!) Ziel wäre, mit Dokumente zu arbeiten, die Leser und Autorenfelder besitzen.
5) Kennst du vielleicht einen einfacheren bzw. besseren Weg ein Dokument als HTML/Mime aus dem Backend zu erhalten um dies als EML-Datei abzuspeichern?
6) Wenn ich einen System.err.println() im java-code ausführe, wird dieser in der Domino Konsole immer als "Agent error ...." ausgegeben. Gibt es eine Möglichkeit diesen irreführende Hinweis zu umgehen?
Grüße und Danke für deine Mühe
Legolas
//Dokument aus der Ansicht holen und transformieren
AgentContext agentContext = session.getAgentContext();
db = agentContext.getCurrentDatabase();
view = db.getView("aTest1");
doc = view.getFirstDocument();
System.err.println(" ");
System.err.println("#### Start ####");
System.err.println("doc.getUniversalID(): " + doc.getUniversalID());
String docid = doc.getUniversalID();
String notesURL = doc.getHttpURL();
System.err.println("notesURL: " + notesURL);
URL docURL =new URL(notesURL);
System.err.println("100");
InputStream streamIn = docURL.openStream();
System.err.println("110");
InputStreamReader str = new InputStreamReader(streamIn);
System.err.println("120");