Body-Inhalt von ungesendeter Mail lesen?

  • Ich wirbele nichts durcheinander. Bitte lies Dir meinen Post nochmal durch.
    Ich gebe jetzt extra explizit immer an, ob ich von einem UI-Feld oder von einem Dokument-Item spreche.
    Ich habe lediglich geschrieben, dass ich nicht an das Frontend UI Body Feld rankomme, um für den Inhalt für mein Backend-Dokument-Item nutzen zu können.
    Tatsache ist, ich muss Backend-Dokument-Funktionen nutzen.
    Ich werde den Tip von @Diali versuchen, um an das Frontend-UI-Dokument von meinem Temp-Dokument ranzukommen.
    Dann werde ich den Inhalt vom Frontend-UI-Body-Feld des Benutzer-Dokuments in das Frontend-UI-Body-Feld meines Temp-Dokuments zu kopieren und das Temp-Dokument anschließend zu speichern.
    Danach kann ich das Backend-Body-Item des Temp-Dokuments verwenden, um das Suchen&Ersetzen durchzuführen. Anschließend muss ich das Temp-Dokument speichern, schließen und wieder öffnen.
    Letztlich dann das Frontend-UI-Body-Feld des Temp-Dokuments kopieren und hoffentlich in das Frontend-UI-Body-Feld des Benutzer-Dokuments zurückkopieren können.

    • Offizieller Beitrag

    also ein RT-Feld Backend und Frontend manipulieren funktioniert schon - allerdings nicht auf direktem Weg!


    Die temp. Maske mit einem RT-Feld hast du schon angelegt.


    1. Frontend nach Backend
    - RT-Feld im Frontend verändern
    - Frontend-Dokument mit dem RT-Feld speichern
    - Backend-Dokument als neues Objekt holen
    - zugreifen aufs Backend RT-Feld


    2. Backend nach Frontend
    - Backend RT-Feld verändern
    - Backend-Dokument speichern (in wenigen Sonderfällen geht es auch ohne zu speichern)
    - Frontend Dokument öffnen (ggf. im Editmode)
    - Zugriff aufs Fontend RT-Feld


    Gruß
    Dirk

  • @taurec
    und ich geschrieben hatte, dass ich nicht mit Frontendzugriffen alleine weiterkomme um Suchen&Ersetzen hinzubekommen.
    Sollte es dennoch möglich sein, ein Richtext-Feld im Frontend zu verändern (Suchen&Ersetzen), dann bitte ich um einen entsprechenden Beweis.


    @Diali
    - RT-Feld im Frontend verändern
    genau daran scheitert es ja schon. Meines wirklich bescheidenen Wissens nach kann ich das gewünschte Verändern (Suchen&Ersetzen) nur im Backend durchführen.
    Ich bin leider noch nicht dazu gekommen, Deinen Tip mit dem Zugriff auf das UI-Dokument auszuprobieren.

    • Offizieller Beitrag

    > RT-Feld im Frontend verändern
    geht nur über LotusScript und die Win-API und dies nicht besonders gut / zuverlässig.


    Manipulationen mache ich immer im Backend und zeige dann das Ergebnis nur noch im Frontend an.


    Gruß
    Dirk

  • Ich denke, ich bin ein gutes Stück weitergekommen, habe aber noch ein paar kleine Probleme:


    - Es werden immer 2 Temp-Dokumente erstellt (wohl weil ich 2xspeichere) aber ich habe keine Erklärung warum.
    - Obwohl das erwartete Ergebnis im Temp-Dokument gespeichert wird, wird das Temp-UI-Dokument nicht mit tempuidoc.reload korrekt aktualisiert.
    - Ich möchte das Temp-UI-Dokument schließen ohne dass der Anwender gefragt wird. Aber das Feld "SaveOptions" gibt es nicht ??


    Hier der aktuelle Code:



    LG Peter

    • Offizieller Beitrag

    merke dir die Universal-ID des temp-Doks. Danach das tempuidoc schließen und dann wieder öffnen.
    Bei relodes im NotesUiDocument steht:

    Zitat

    Rich text items are an exception. Modifications made to rich-text items in the back-end document do not appear in the front-end until the document is closed and reopened.


    Aus welchem Grund benutzt du VBScript? Dies ist dann nicht mehr auf anderen Platformen (Linux, MAC) lauffähig und bei jeder Änderung im Betriebssystem musst du diese Funktion überprüfen, ob diese noch genau so unterstützt wird.


    Gruß
    Dirk

  • @Diali

    Zitat

    merke dir die Universal-ID des temp-Doks. Danach das tempuidoc schließen und dann wieder öffnen.


    Ok, damit habe ich eine Antwort auf Problem 2.


    Bleibt noch Problem 1: Warum werden 2 Temp-Dokumente erzeugt? Liegt es daran, dass ich beim 1. Mal tempuidoc.save verwende und beim 2. Mal tempdoc.save?
    und 3: Wieso existiert das Feld SaveOptions nicht? In allen im Internet gefundenen Beispielen wird immer nur geschrieben, dass man das Feld SaveOptions auf "0" setzen soll.


    Code
    Aus welchem Grund benutzt du VBScript?


    Aus dem einfachen Grund, dass ich im Internet auf der Suche nach Beispielen war und das das erste Beispiel war, das auch direkt funktionierte. Hast Du ein Beispiel für eine Plattform-unabhängige Alternative?


    LG Peter

    • Offizieller Beitrag

    mehrere Dokumente weren erzeugt, weil du einmal das Frontend und einmal das Backenddokument speicherst.


    Das Feld Saveoptions musst du selber ind ie Maske einbauen. Dabei handelt es sich um einen reservierten Namen für ein Feld. Ein Feld mit diesem Namen hat Sonderfunktionen.


    So wie ich es lese, sehen deine Platzhalter so aus: %Hier_steht_ein_Platzhalter%
    Meine Bedenken sind, dass ich an dem %-Zeichen nicht erkennen kann, welches das vorgestellte und welches das nachgestellte Prozentzeichen ist. Wenn in einem Text ein % vorkommt, dürfte dies die Logik im ungünstigsten Fall durcheinander bringen.
    Für so etwas halte ich mich an die XML-Tag-Schreibweise. Also z.B. so: <FELD>Mein_Feld</FELD>
    Damit kann ich ellativ einfach ermitteln, welche Werte sich zwischen den Tags befinden.


    Gruß
    Dirk

  • und 3: Wieso existiert das Feld SaveOptions nicht? In allen im Internet gefundenen Beispielen wird immer nur geschrieben, dass man das Feld SaveOptions auf "0" setzen soll.


    Das kann ich mir auf Anhieb nicht vorstellen. Suche ich nach "ibm domino saveoptions", ist gleich der zweite Treffer ein Link aufs "IBM Notes and Domino Application Development wiki" und dort wird man dazu aufgefordert "just add a SaveOptions field".
    Der vierte Link führt bei mir auf die 6.5er Designer-Hilfe, die das Thema "Reserved fields that control mailing options" behandelt und auch dort ist die Anweisung ziemlich unzweideutig: "To build mailing options into a form, create fields that have reserved names in Designer." Was reservierte Namen sind, wird beschrieben.


    Und wenn ich einfach mal nach "ibm domino set item value" google, ist gleich der zweite Treffer ein Link aufs Kapitel "Creating an item and assigning values in LotusScript classes" aus der 6er Designer-Hilfe. Dort ist beschrieben, wie man Werte den Items zuweist und auch der Unterschied zwischen Item und Feld dargelegt: "The user cannot see the new item as a field in the document unless you add the field to the form design. However, the item exists and can be accessed programmatically."


    Die Ergebnisse der Google-Suche mögen sich in Abhängigkeit von Browser, seiner Version, seiner Sprache und dem bisherigen Suchverhalten unterscheiden. Andere Suchmaschinen mit ihren eigenen Indizes mögen auch andere Resultate in anderer Reihenfolge präsentieren. Aber dass man so gar nichts dazu finden würde, ist eine -mit Verlaub- mutige Behauptung...

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Zitat

    Das Feld Saveoptions musst du selber ind ie Maske einbauen. Dabei handelt es sich um einen reservierten Namen für ein Feld. Ein Feld mit diesem Namen hat Sonderfunktionen.


    Ich habe versucht, das Feld anzulegen und das Dokument zu speichern, aber der Anwender wird noch immer gefragt, ob er das Dokument speichern möchte oder nicht.

    Code
    Set tempdoc = New NotesDocument(db)
        Set item = New NotesItem (tempdoc, "SaveOptions", "0")
        Call tempdoc.Save(True, False, True)
        Set tempuidoc = ws.Editdocument(True, tempdoc)
  • @RockWilder


    Ich habe bei Google nach "lotusscript SaveOptions" gesucht und mir die ersten 4 Suchergebnisse der Reihe angeschaut:
    - Notes/Domino 4 and 5 Forum : SaveOptions := "0" in lotus ...
    - Modify a rich text field in the UI without having to save and re ...
    - Is there a way to close a doc using LotusScript without the ...
    - SaveOptions confusion - Experts Exchange


    Und auch noch
    http://www-01.ibm.com/support/…THOUT_SAVING.html?lang=de


    Auch hier konnte ich keinen Hinweis finden, dass ich das Item selbst manuell erstellen muss.



    Es ist unverzeihlich, dass ich die falschen Suchbegriffe verwendet habe und auch nicht alle gefundenen 2230 Seiten angeschaut habe.
    Insofern war es natürlich unangemessen mutig von mir diese Behauptung so völlig aus der Luft gegriffen zu behaupten.
    Zu meiner sehr schwachen Entschuldigung hatte ich geschrieben "im Internet gefundenen Beispielen" und nicht "alle im Internet existierenden Beispielen".

    • Offizieller Beitrag

    das Feld solltest du in die Maske einfügen (Textfeld, eventuell verborgen) ...
    und dann


    - uidoc.Save
    - Saveoptions auf "0" setzen
    - uidoc.Close


    Wenn du vorher Saveoptions auf 0 setzt, wird das UI-Dokument auch nicht mehr gespeichert und ohne Nachfrage geschlossen.


    Gruß
    Dirk

  • Notes/Domino 4 and 5 Forum : SaveOptions := "0" in lotus ...


    Ich möchte das jetzt nicht bis zum Exzess durchdeklinieren und hier unnötig eskalieren lassen, aber gerade dieses Beispiel ("dieses", nicht "alle, die irgendwann mal irgendwer irgendwo gepostet hat" ... nur damit wir vom Gleichen reden!) ist wirklich sehr schön gewählt.
    Der Post im aufgeführten Forum enthält einen Link, der -wäre man ihm gefolgt- die exakte Syntax angibt:

    Code
    Call uidoc.Save       'save the document first
    ===> das ist der wichtige Teil ... ==> doc.SaveOptions="0"   'then set the SaveOptions field to 0
    Call uidoc.Close      'close the document


    Damit hätte alles Wesentliche gesagt sein können, denn das Beispiel gibt bereits an, wie man ein Item programmatisch erzeugt.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

    • Offizieller Beitrag

    naja ...


    du speicherst das Backend-Dokument und setzt im Backend-Dokument das Feld Saveoptions. Davon bekommt das Frontend-Dokument aber nix mit, deshalb kommt die Abfrage.


    Es macht in deinem Fall auch keinen Sinn Saveoptions im Backend zu setzten, denn falls du irgendo dieses Backend-Dokument speicherst, dann steht die "0" im Backend-Dokument drin und du kannst das Frontend-Dokument nicht mehr speichern.


    - 1. Speicher das Frontend-Dokument
    - 2. setzte im frontend_Dokument das Feld SaveOptions auf "0"
    - 3. Schließe das Frontend-Dokument


    Gruß
    Dirk

  • Sowas hatte ich schon befürchtet.
    Also scheint es keine Möglichkeit zu geben, das UI-Dokument zu schließen, wenn es nicht schon vorher ein Feld SaveOptions gab.
    Nachträglich erstellen funktioniert wol auch nicht.
    Da ich die Standard-Mail-Maske aber nicht anspassen möchte, muss ich also wohl doch eine eigene Dummy-Maske mit einem RT-Feld und dem SaveOptions-Feld erstellen?
    Dann habe ich noch 2 Fragen:
    1. Wie kann ich dann bei

    Code
    Set tempdoc = New NotesDocument(db)Call tempdoc.Save(True, False, True)    Set tempuidoc = ws.Editdocument(True, tempdoc)


    mitgeben, welche Maske verwendet werden soll?


    2. Wieso habe ich bisher in keiner selbstgebauten Maske das Feld SaveOptions erstellt, kann aber beim Button "abbrechen" die funktionierende Formel

    Code
    FIELD SaveOptions := "0";
    @Command([FileCloseWindow])


    verwenden?

    • Offizieller Beitrag
    Code
    Set tempdoc = New NotesDocument(db)
    tempdoc.Form = "DeinMaskenname"    ' hier den entsprechednen Maskennamen eintragen
    tempdoc.Saveoptions = ""    ' erstellt ein Feld SaveOptions
    Call tempdoc.Save(True, False, True)
     Set tempuidoc = ws.Editdocument(True, tempdoc)


    Field ändern den Wert eines vorhandenen Feldes oder erzeugt ein neues Feld.
    Da du im Frontend-Dokument stehst, wird auch dort das Feld erzeugt.


    Mit Evaluate kannst du zwar eine @Function aus dem Script heraus ausführen, aber als Objekt wird ein NotesDocument mitgegeben, d.h. Backend.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Genau das hatte ich auch schon versucht:

    Code
    Set tempdoc = New NotesDocument(db)    tempdoc.SaveOptions = "0"    Call tempdoc.Save(True, False, True)    Set tempuidoc = ws.Editdocument(True, tempdoc)


    Im Debugger sehe ich, dass dass tempdoc bisher nur als einziges Feld "SaveOptions" hat. Im tempuidoc existiert aber noch nichts.
    Erst nach dem

    Code
    Call tempuidoc.Save


    werden im tempuidoc.document alle Items aufgeführt, aber hier auch nicht das SaveOptions.
    Insofern macht es Sinn, dass der Anwender immer noch gefragt wird.
    Es scheint, als ob das Feld tatsächlich in der Maske vorhanden sein muss, aber warum funktioniert ein Formel-Button in der Maske, der ja auch SaveOptions auf "0" setzt, ohne dass das Feld existiert.

  • Ich habe es jetzt endlich hinbekommen. Mit einer eigenen Dummy-Maske, in der das Feld "SaveOptions" schon existiert, funktioniert es tatsächlich.


    Vielen Dank für die Unterstützung und die Geduld.


    LG Peter