Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: SD am 10.02.21 - 15:54:34

Titel: Eingebettete Bilder (zum Nachladen aus dem Internet) per Script entfernen
Beitrag von: SD am 10.02.21 - 15:54:34
Hallo allerseits,

dieses Thema bringt mich leider ein wenig zur Verzweiflung.

Wir haben eine Applikation, in die wir per Button Mails importieren und dann weiterverarbeiten können. So weit so einfach. Leider kommt es manchmal vor, dass diese Mails eingebettete Bilder haben, die aus dem Internet nachgeladen werden können. Das ist in der Regel irgendwelches Zeug in der Signatur, was uns in dieser Applikation gar nicht interessiert.

Das Script arbeitet so, dass es Felder aus dem Backend-Dokument der Mail in ein neues Backend-Dokument einer anderen Datenbank kopiert und dann im Frontend zur Anzeige bringt. Das funktioniert auch, wobei das Bild dann mit einem roten x dargestellt wird. Will man das Frontend-Dokument dann speichern, kommt "Cannot save bitmap to disk.".

Leider ist es kein Error im eigentlichen Sinne, also ein "On Error"-Statement springt nicht darauf an. Die Meldung wird nach dem QuerySave ausgelöst. Ich kann sie wohl nicht irgendwie weg handlen.

Ich möchte das Bild eigentlich auch gar nicht retten oder sowas. Ich will es eigentlich loswerden. Die User können vor dem Speichern das ganze Dokument durchscrollen und alle roten x'e entfernen. Das funktioniert, ist aber sehr nervtötend. Daher würde ich im Grunde gerne genau das per Script machen.

Nun hab ich im Backend ein RichtextItem "Body" (das wohl aus mehreren Einzelitems besteht), das irgendwann beim Routing wahrscheinlich mal aus einem MIME in Richtext konvertiert wurde. Das behauptet allerdings keine "EmbeddedObjects" zu haben, was ohnehin komisch ist, weil meine Test-Mail auch normale eingettete Bilder enthält. Ich hätte eigentlich zumindest erwartet diese dort zu finden.

Nun gehen mir ein wenig die Ideen aus, wie ich mein Richtextitem von diesem Bild bzw. diesem Link auf ein Bild befreien kann. Am liebsten wäre mir ein "wenn du es nicht mit Bild speichern kannst, dann speicher es halt ohne"-Flag, aber sowas scheint es nicht zu geben. Wenn ich im RichtextItem irgendwie rumschneiden könnte, würde das auch gehen. Aber ich finde leider keinen Weg das Object zu lokalisieren und dann zu bearbeiten. Zur Not würde es sogar gehen, das im FrontEnd-Feld rauszufummeln, wenn ich es irgendwie identifizieren könnte.

Hatte hier vielleicht schon mal irgendwer dieses Problem?

Gruß
Stefan
Titel: Re: Eingebettete Bilder (zum Nachladen aus dem Internet) per Script entfernen
Beitrag von: jBubbleBoy am 10.02.21 - 16:37:45
Schon mal geprüft ob die Bilder im EmbeddedObjects vom NotesDocument zu finden sind?
Ansonsten bleibt ja nur noch die Nachbearbeitung der XML/DXL Datei übrig ...
Titel: Re: Eingebettete Bilder (zum Nachladen aus dem Internet) per Script entfernen
Beitrag von: Ralf_B am 10.02.21 - 17:57:26
Da mich das Thema interessiert:
Ich habe mal nachgesehen und ich sehe solche Images nicht in embeddedObjects.
Aber als In-Line Image
Ytria zeigt mir auch Teilweise Sonderzeichen an:

Schau mal ob das hier weiterhilft:
https://atnotes.de/index.php/topic,55904.0.html (https://atnotes.de/index.php/topic,55904.0.html)

Gruß
Ralf
Titel: Re: Eingebettete Bilder (zum Nachladen aus dem Internet) per Script entfernen
Beitrag von: SD am 12.02.21 - 12:17:10
Hallo,

DXL ist ein super Stichwort und ich bin nahe dran das Problem tatsächlich zu lösen! Vielen Dank!

Code
	Dim nDXLe As NotesDXLExporter
	Set nDXLe = s.Createdxlexporter()
	Dim sTemp As String
	sTemp = nDXLe.Export(mailDoc)

Damit bekomme ich schon mal alles als XML. "<notesbitmap>" ist dann er Übeltäter. Den schneide ich raus.

Code
	Dim nDXLi As NotesDXLImporter
	Set nDXLi = s.Createdxlimporter()
	Call nDXLi.Import(sTemp, mailDoc.Parentdatabase)

Damit bekomme ich das XML wieder in meine Datenbank reinimportiert. Allerdings ist es so leider ein neues Dokument und was noch schlimmer ist, ich habe es nicht im Zugriff. Wenn ich jetzt das NotesDocument-Object hätte, könnte ich damit weitermachen. Ich habe mir das frisch importierte Dokumente mal von Hand rausgesucht und das funktioniert wirklich. Das Bild ist weg und damit auch der Fehler. Aber wie komme ich nun mit meinem Script an das Dokument ran? Die Import()-Methode kann man offenbar nur callen. Die gibt mit nicht das BackEnd-Dokument zurück, das sie gerade importiert hat. :-(

Ich habe mir jetzt recht plump damit beholfen das LastDocument aus der Datenbank zu holen, aber es ist ein wenig Glückssache, ob das das richtige ist. Das ist etwas unbefriedigend, weil ich das dann ja gleich wieder lösche und ich nicht ausversehen das falsche löschen will. Gibt es da eine elegantere Lösung?

Code
	Set otherDoc = mailDoc.Parentdatabase.Alldocuments.Getlastdocument()

Gruß
Stefan
Titel: Re: Eingebettete Bilder (zum Nachladen aus dem Internet) per Script entfernen
Beitrag von: jBubbleBoy am 12.02.21 - 12:49:24
In der NotesDXLImporter Klasse gibt es diese Methoden und Eigenschaften: "GetFirstImportedNoteID", "GetNextImportedNoteID" und "DocumentImportOption".
Wobei "DocumentImportOption" in deinem Fall schon ausreichen sollte ...
Titel: Re: Eingebettete Bilder (zum Nachladen aus dem Internet) per Script entfernen
Beitrag von: SD am 12.02.21 - 14:16:15
Oh, das hatte ich übersehen. Funktioniert wie ne Eins! Vielen Dank euch!

Gruß
Stefan