Problem bei Anhang mit Java Agenten löschen

  • Ich möchte in einem Agenten den Anhang in einem Rich Text Feld löschen und anschließend das Feld mit einem neuen Anhang befüllen. Aber irgendwie scheint das nicht zu funktionieren. Der alte Anhang verschwindet zwar aus dem Rich Text Feld, taucht aber nach einer Absatzlinie am Ende der Maske unter einem kryptischen Namen wieder auf (wahrscheinlich die Notes interne ID des Anhangs).


    Ich habe schon probiert Document.removeItem sowie RichTextItem.remove aufzurufen. Ebenso hat ein Neuerstellen des Feldes im Dokument mit Document.createRichTextItem nicht zum gewünschten Erfolg geführt.


    Irgendwelche Ideen? :-?

  • Am Anfang des Agenten hole ich mir meine zwei Rich Text Felder:

    Code
    printPage = this.getRTField(doc, FIELDNAME_PRINT);				actualPrintPage = this.getRTField(doc, FIELDNAME_PRINT_ACTUAL);


    Danach fange ich mit dem Löschen nach dem Verfahren in meinem letzten Post im Feld actualPrintPage an. Am Ende werden dann beide Felder mit jeweils einem Anhang wieder befüllt. Also ist am Ende in printPage eine Historie der Anhänge und in actualPrintPage immer der letzte / aktuelle Anhang.


    Hier die Funktion zum Holen der Felder:

    Code
    private RichTextItem getRTField(final Document doc,		final String fieldname) throws NotesException {		RichTextItem rti;		if (doc.hasItem(fieldname)) {			rti = (RichTextItem) doc.getFirstItem(fieldname);		} else {			rti = this.createRTField(doc, fieldname);		}		return rti;	}	private RichTextItem createRTField(final Document doc,		final String fieldname) throws NotesException {		RichTextItem rti;		rti = doc.createRichTextItem(fieldname);		return rti;	}


    Was ich jetzt noch probiert habe:

    Code
    this.removeAllEmbeddedObjects(doc, actualPrintPage);


    und


    Das Ergebnis ist aber leider das gleiche: Der ehemalige Anhang aus actualPrintPage ist nicht gelöscht sondern befindet sich am Ende der Maske.

  • Bei der remove Methode des RTItems hab ich auch schon oft festgestellt, daß der Anhang nicht ganz entfernt wird.
    In manchen Fällen hat es funktioniert indem ich danach noch das Attachment aus dem Dokument selbst removet habe.
    In anderen musste ich danach noch die Items durchgehen und die $FILE Felder mitlöschen

  • Zitat


    taurec schrieb:
    Bei der remove Methode des RTItems hab ich auch schon oft festgestellt, daß der Anhang nicht ganz entfernt wird.
    In manchen Fällen hat es funktioniert indem ich danach noch das Attachment aus dem Dokument selbst removet habe.
    In anderen musste ich danach noch die Items durchgehen und die $FILE Felder mitlöschen


    Die Attachments des Dokuments habe ich mir gerade auch angeschaut. Aber das ist immer nix drin (size() == 0). Aber $FILE durchzugehen habe ich noch nicht probiert.

  • Nein, hat leider auch nichts gebracht. Die Anhänge sind immer noch da.


    Hier mal die Klasse:

  • Habe noch etwas rumprobiert. Irgendwie scheint es so zu sein, das EmbeddedObject.remove() nur den Anhang aus dem jeweiligen Feld, nicht aber aus dem Dokument entfernt. :(

  • In der Hilfe findet sich folgendes Beispiel:


    Ich habe mal mein Programm entsprechend angepasst. Aber hat auch nichts gebracht. Wobei ich das so langsam sehr merkwürdig finde. Die Beispiele von IBM sollte ja schon funktionieren.


    Liegt es vielleicht daran, dass ich zwei Rich Text Felder habe? Das Notes damit irgendwie nicht klar kommt? :-?

  • Aaahhh! Habe gerade mal spasseshalber und aus lauter Verzweiflung das löschen von Anhängen aus Rich Text Feldern mit einem kleinen Lotus Script Agenten ausprobiert. Und es funktioniert ohne Problem! Ich bekomm' gleich noch einen zuviel... :-x


    Naja, werde das jetzt irgendwie so lösen, dass ich da vorher einen Lotus Script Agenten drüber lassen, der mir den Anhang löscht, und dann den Rest des Java Agenten runterarbeiten. :cry:

  • Zitat


    taurec schrieb:
    Vielleicht hat er ja auch mit deiner Methodenstruktur ein problem.


    Mach doch mal alles innerhalb einer Methode.


    Du bist also der Meinung, dass das JRE, das mit Notes ausgeliefert wird, anders funktioniert als bspw. das von Sun? ;)


    In Java macht es (normalerweise) nichts aus, ob ich alles in einer oder in mehreren Methoden aufrufe. Zumindest ist das in meiner mehrjährigen Java Laufbahn noch nie vorgekommen. :)


    Was ich mir aber vorstellen kann, ist, dass die Notes Java API nicht zu 100% wie die LotusScript API funktioniert bzw. die Java Version der API wahrscheinlich auch ein paar Bugs hat. :-?

  • Das einzige, was mir in die Richtung bekannt wäre, ist die Sache mit dem Garbage Collector. Und zwar funktioniert der anscheinend nicht so einwandfrei bei den Notes Klassen (light weight vs. heavy weight). Das ist aber mit Java zu erklären. Die Verbindungen der Objekte innerhalb des Notes API sind wahrscheinlich so komplex, dass sie der GC nicht auflösen kann und deswegen die Objekte nicht mehr aus dem Speicher räumt. Siehe: recycle() und recycle(java.util.Vector).


    Oder meintest Du nochmal etwas anderes? :-?

  • Dann kann es aber allerhöchsten sich um eine unterschiedliche Aufrufabfolge der Methoden der Notes API handeln. Gibt es dazu irgendwo einen Artikel o.ä.?