HTML-Formatierung beim Export

  • Hallo,
    mit nachfolgenden Script werden Mails aus einer NotesDB in eine SQL-Tabelle kopiert.
    Leider geht dabei die Formatierung des Bodys flöten.


    Weiß evtl. jemand Rat, wie die Formatierung beibehalten werden kann?


    Außerdem wäre es schön, wenn eingebettete Bilder (keine Anhänge), extrahiert werden könnten, um diese im Filesystem abspeichern zu können.
    Möglicherweise könnte mir auch hier einer helfen.


    Vielen Dank und ein schönes Wochenende.


    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Eingebettete Bilder kannst du nur aus dem RichText Item extrahieren. Allerdings ist das recht komplex.
    Eine Möglichkeit wäre per DXL Export.


    Zum Thema formatiertes RichText könnte ggfls schon die Methode GetFormattedText des RichTextItem Objektes helfen.

  • Hallo taurec,
    vielen Dank für die Infos.


    Das mit GetFormattedText hab ich versucht, jedoch ist der Text nach wie vor unformatiert.
    Hast du vielleicht eine Idee, an was das liegen könnte?


    Mit den eingebetteten Bildern per DXL-Export muss ich, glaube ich, passen.
    Das sieht mir wohl zu kompliziert aus. ?(

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Kommt halt drauf an inwiefern das Feld in der SQl Tabelle auch die Formatierungen unterstützt.
    Ansonsten müsstest du das Richtext feld in HTML umwandeln und das dann in die SQL Tabelle schreiben.

  • Hallo taurec,
    das Tabellenfeld ist ein ganz normales varchar(max)-Feld. Dem ist eigentlich wurscht was drin steht.
    Auf dem Formular ist ein RTF-Steuerlement, welches die HTML-Formatierung entsprechend der Tags darstellt.
    Ich dachte allerdings, dass die GetFormattedText-Methode die HTML-Formatierung des Bodys (also mit Tags und allem drum und dran) zurückgibt. Da habe ich mich dann wohl geirrt.
    Muss ich das über einen MIME-Type realisieren?
    Ich habe es daher folgendermaßen versucht:

    Code
    360:        With nm
    370:            xBody = n_Document.GetFirstItem("Body") 'das ist als NotesItem deklariert
    380:            mime = xBody.GetMIMEEntity 'das ist als NotesMIMEEntity deklariert
    390:            .Body = mime.ContentAsText
    400:            .Subject = n_Document.GetItemValue("Subject")(0).ToString
    410:            .From = n_Document.GetItemValue("From")(0).ToString
    420:        End With


    Jedoch ist mime immer nothing und die Funktion bricht daher in Zeile 390 ab.


    Es wäre super, wenn du mir noch den einen oder anderen Tipp geben könntest.


    Vielen Dank.

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • will mich ja nicht einmischen, aber das hier steht in der Hilfe zu "GetFormattedText":

    Zitat

    GetFormattedText (NotesRichTextItem - LotusScript®)
    Returns the contents of a rich text item as plain text.


    Und nun zu der anderen Geschichte: Man kann leider ein als Richtext gespeichertes RichtextItem NICHT on the fly in Mime wandeln (daran ändert auch ein NotesSession.ConvertMime = True nix).


    Eine Umwandlung in Mime muss man so machen: Man erzeugt ein neues Dokument mit einer Maske, die nur ein Body- Item enthält. Dann schiebt man das RichtextItem in das neue Dokument und konvertiert das via NotesDocument.ConvertToMime in ein Mime- Dokument. Dann kannst Du mit Deinem Code (oder ähnlichem) die Mime- Entities auslesen

  • Hallo Torsten,
    danke für die Aufklärung.


    Wie "schiebt" man denn das RTItem von einem Dokument ins andere, bzw. wie erstelle ich eine Maske in einen NotesDocument?

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

    Einmal editiert, zuletzt von Volker S. ()

  • Danke für deine Hilfe.


    ?(
    Ehrlich gesagt, ist Notes ist für mich eh ein Buch mit sieben Siegeln, aber wir benutzen es halt und darum versuch ich irgendwie damit zurecht zu kommen.
    Ich bin die ganze Zeit schon beim durchstöbern der Notes-Referenz, aber ich hab das Gefühl, ich dreh mich im Kreis.
    Also wenn ich das richtig verstehe, dann muss ich mir erst im Designer irgend ein Dummy-Dokument zusammenbasteln, auf das ich dann später per Code zugreifen kann?
    Ich blick da ehrlich gesagt, überhaupt nicht durch.
    Ich dachte, es wird einfach ein neues Dokument erstellt, dem ich dann ein neues Item zuweise und dem den Body von der Ursprungsmail zuweise,
    also irgendwie so in der Art:



    Angelehnt an diesen Beispielen: Link 1 , Link 2

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Sorry, aber eine "Designer- Grundlagen- Schulung" kann und werde ich in diesem Kontext nicht durchführen.
    Wenn Du was FÜR Notes entwickelst, solltest Du die Grundlagen kennen und wissen, was eine Maske, eine Ansicht, etc. ist, und was ein Dokument ist.


    Sonst drehen wir alle uns hier im Kreis, weil wir bei Adam und Eva anfangen müssen...

  • Ganz ruhig...
    Ich denke, du hast mich falsch verstanden.
    Ich mach doch nix im Designer (was ich auch nicht vorhabe), sondern per VB.NET mit VisualStudio.
    Hintergrund:
    Ich habe einen Dienst geschrieben, der auf eine NotesDB zugreift. Daraus holt er sich die Mails im Posteingang ab, um diverse Daten (Absender, CC, Betreff, Mailtext) in ein selbst entwickeltes Ticketsystem zu überführen. Diese Daten liegen in einer Tabelle am MS-SQL-Server.
    Sollte im Betreff ein Ticket-Tag vorkommen, dann wird die Mail u.a. gleich einem Ticket zugeordnet.


    Du siehst, dass ich also nicht ganz ein blutiger Anfänger bin, tu mir aber mit der Notesschnittstelle besonders schwer. Warum? Kein Ahnung. Vielleicht liegts daran, dass ich doch schon etwas in die Jahre gekommen bin und mit der Notesschnittstelle noch nicht zu lange zu tun habe oder ich Notes einfach nicht mag.


    Über eine Notes-Designer-Schulung hab ich auch schon mal nachgedacht. Ich denke, die würde auch genehmigt werden. ;)

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Weil mich das Ganze selbst interessiert hat, habe ich das grade mal ausprobiert, und nehme meine Behauptung zurück: Man braucht keine Maske im Designer, das geht alles mit Code. Hier ein paar Zeilen Beispielcode. Ändert aber nix an der Tatsache, dass man Notes verstehen sollte, wenn man für Notes programmiert...


    Die "ContentAsText" Methode des NotesMimeEntity- Objekts liefert Dir allerdings wieder nur den Plain- Text. Du musst nun den MimeTree Traversen und aus dem Mime "richtiges" HTML machen. Dazu hilft Dir Google weiter.

  • Hallo Torsten,
    danke für deine Hilfe.
    Eines verstehe ich jetzt aber nicht. Wenn vom NotesMimeEntity-Objekt auch nur Plain-Text kommt, dann kann ich doch gleich auf die GetFormattedText-Methode zurückgreifen. Oder ist Plain-Text <> Plain-Text? Wo ist da der Unterschied?

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Vom MimeEntity kommt genau dann Plain Text, wenn man die Methode verwendet, um Plain- Text auszulesen (.ContentAsText). Um HTML zu bekommen, muss man das MimeEntity parsen, alle Mime- Childs durchlaufen (das ist ein Tree), den "Content-type" der Mime- Childs auslesen, bei text/html reagieren, html Code extrahieren, ggf. weitere Mime- Entities die Embedded Images enthalten da reinrechnen, ...


    Das ist verdammt viel Code, und erfordert einiges an Programmierwissen (hat dann kaum noch was mit Notes- spezifischem Code zu tun), und vor allem eine strukturierte Herangehensweise. Eine tiefere Kenntnis der RFC 2047 ist jedenfalls unerlässlich.


    Helfen kann es, wenn man Visual- Basic- Code findet, wie man eine Mime- Mail wieder in ein HTML- Dokument überführt... Aber das musst Du schon selbst Googeln...


    Die Designer- Hilfe (kannst Du auch per Google finden, wenn Du Dich partout weigerst, den Designer- Client zu Hilfe zu ziehen, obwohl der sämtliche Resourcen sowie Code- Vervollständigung und kontextsensitive Hilfe enthält, um mal mit LotusScript und den Klassen darin umzugehen) enthält alle nötigen Beispiele dazu, wie man so einen Mime- Tree traversiert...


    Und da sind wir wieder beim Anfang: Ohne sich mit Lotus Notes (in dem Fall LotusScript mit den enthaltenen Klassen) zu beschäftigen ist diese Aufgabe nicht zu bewältigen.

  • Der Designer liegt schon irgendwo auf der Disk herum. Ich glaube, mich zu erinnern, dass ich diesen schon mal gestartet habe.


    Vom MimeEntity kommt genau dann Plain Text, wenn man die Methode verwendet, um Plain- Text auszulesen (.ContentAsText). Um HTML zu bekommen, muss man das MimeEntity parsen, alle Mime- Childs durchlaufen (das ist ein Tree), den "Content-type" der Mime- Childs auslesen, bei text/html reagieren, html Code extrahieren, ggf. weitere Mime- Entities die Embedded Images enthalten da reinrechnen, ...


    Es könnte so einfach sein, wenn es die Methode .ContentAsHTML geben würde...
    :rolleyes:


    Ob ich mir das antue, da es keine andere Möglichkeit gibt, weiß ich ehrlich gesagt nicht. Da muss ich erst mal in mich gehen.


    Ich danke die aber für die Erleuchtung.

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Hallo Torsten,
    ich war jetzt doch nochmals drüber und konnte wenigstens einen Teilerfolg erzielen.


    Was mich nur wundert, ist, dass das MIME-Object bei einigen Mails leer (nothing) ist.
    Das sind i.d.R. solche Mails, die per Notes-Client versendet werden (der Else-Fall).
    Die per Visual-Basic Script, über System.Net.Mail, versendeten Mails lassen sich ganz einfach über .DecodeContent-Eigenschaft dekodieren und werden ganz sauber dargestellt.


    Zumindest kann ich bei den Mails von den Notes-Clients wenigstens die Zeilenumbrüche weitergeben. Das mach diese um vieles einfacher lesbar.


    Möglicherweise könntest du mir noch einen Tipp geben, wie ich an den MIME-Tree herankomme.
    Ich würde mich da gerne schon noch etwas durchfizzeln.
    Eingentlich müssten dann ja auch eingebettet Bilder in einem Browsersteuerelement mit angezeigt werden, dann könnte ich mir das Extrahieren per DXL-Export sparen.

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Das sind i.d.R. solche Mails, die per Notes-Client versendet werden (der Else-Fall)


    Ich Depp :/ , vergiss es, da bin ich auf dem Holzweg, Notes erzeugt ja Notes-RTF-Mails.

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Hmm..
    ..leider ist die Funktion .ConvertToMime in Visual Studio für das NotesDocument nicht verfügbar.
    Hat evtl. jemand eine Idee? Ansonsten müsste ich wahrscheinlich doch über den DXL-Export gehen.

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Soo,
    nachdem ich mir die XML-Datei vom DXL-Exporter einmal angeschaut habe, bin ich zu dem Entschluss gekommen, es zu lassen wie es ist und das Thema abzuschließen.
    Allen beteiligten vielen Dank für Ihre Hilfe.

    Viele Grüße,
    Volker



    ************************************
    - Domino-Server 8.5.1 FP3 / 9.0.1

    - Clients: Notes 8.5.x / 9.0.1
    - Windows Server 2003 (VM)
    ************************************

  • Da ich nun doch zu einem Erfolg gekommen bin, möchte ich es auch hier gerne mitteilen.
    Nach diesem Post ist dann aber wirklich Schluss. :D
    Nach einem Anruf bei unserem Servicepartner, riet mir dieser u.a., in den Einstellungen des Notesbesitzers, das bevorzugte Format auf MIME zu setzen.
    Tja, und was soll ich sagen? 8o
    Es funktioniert perfekt.
    Sämtliche eingebettet Bilder werden extrahiert und als separate Files angehängt, die nun über die o.g. Routine ausgelesen werden können.
    Also nix mehr mit DXL-Exporter und parsen.


    Euch allen einen schönen und unfallfreien Himmelfahrts-/Vatertag.