Beiträge von PeterSchneider

    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.

    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?

    @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".

    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)

    @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

    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

    @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.

    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.

    - Öffnen Vorlage
    Die Vorlage wird vom Benutzer automatisch geöffnet indem er eine neue Mail schreiben oder auf eine Mail antworten möchte.
    - Markieren Vorlagetext

    Code
    uidoc.Gotofield("Body")    Call uidoc.Selectall()


    - Kopieren Vorlagetext in Zwischenablage

    Code
    Call uidoc.Copy()


    - Schliessen Vorlage
    hier dürften wieder Probleme anfangen: Ich müssten so einiges an Infos mitkopieren: From-Feld, Datum, Betreff, Empfänger, CC, BCC, ...
    - Erstellen neues Dokument
    hier war mein Ansatz über das Profildokument, aber ich bekomme den Inhalt vom Body nicht gespeichert.
    Zudem weiß ich nicht, wie ich für mein Suchen&Ersetzen das UI-Body-Feld ansprechen könnte. Für das Backend-Body-Feld benutze ich die RT-Navigator und RT-Range Funktionen.
    - Springen in Zielfeld
    - Einfügen von Text aus Zwischenablage


    Wenn ich es denn schaffen würde, den Inhalt des UI-Body-Felds in ein eigenes TMP-Dokument (ob Profildokument oder "normales" Dokument) zu speichern, dürfte ich es geschafft haben.
    Dann könnte ich uidoc.importitem() verwenden, um den Inhalt des TMP-Dokuments in das UI-Body-Feld reinzubekommen.
    Wenn ich mit

    Code
    Set temp_doc = New NotesDocument(db)


    ein neues Dokument erstelle, komme ich nicht an das UI-Dokument ran um das temp_ui_doc.Paste() nutzen zu können, oder?
    Und

    Code
    Set body = New NotesRichTextItem(temp_doc, "Body")
    Call body.Appendrtitem(rtbody)


    funktioniert nicht, da ich nicht an den RT-Inhalt vom UI-Body-Feld bekomme, oder?


    LG Peter

    Erstmal danke an Torsten für das PDF-Dokument. Ich werde mich mal in die Beispiele dort vertiefen.
    Danke auch an RcokWilder für die ausführliche Erklärung. Ich glaube sonstwo ausser Notes wird nicht zwischen Feldern und Items unterschieden. Zumindest heissen bei mir die Datenbankfelder, egal ob MySQL, Oracle oder MSSQL auch Felder. Aber seis drum. Ich habs verstanden.



    Die Möglichkeit, deine Anforderung zu realisieren, gibt es durch aus. Die Frage ist nur, "wozu?". Üblicherweise sollen Änderungen (Aktualisierungen) doch auch gespeichert werden, damit der nächste User den entsprechenden Stand der Dinge hat und nicht mit "veralteten" Daten arbeitet. Und wenn das Feld nur temporäre Daten halten soll: braucht es zwingend ein RT-Item dafür? RT-Items zu manipulieren, ist manchmal nicht ganz trivial. Reine Textfelder sind bedeutend einfacher...


    Stell dir vor, ein Benutzer sendet eine Mail immer in der selben Form. Diese Vorlage ist in den Vorgaben als Signatur hinterlegt. Allerdings sind in der Vorgabe noch einige Platzhalter, die er durch korrekte Eingaben ersetzen muss. Das können Namen, eine Ressource oder auch Begründungstexte sein. Diese soll er der Bequenlichkeit halber über Buttons auswählen können. Am Ende wird das Ganze als Mail versendet. Erst dann soll das Dokument auch erst gespeichert werden.


    LG Peter

    Ich als Anfänger überlese wohl gerne mal das winzige 'ui' in der Hilfe. Zumal es für mich nicht so recht nachvollziehbar ist, warum eine Funktion Gotofield, wenn es sie doch schon im Frontend gibt nicht auch im Backend geben sollte.
    Für mich bleibt es weiterhin die Herausfoderung, wie ich ein Richtext-Feld im Frontend verändern kann (Suchen und Ersetzen), ohne das eigentliche Dokument im Backend zu verändern z.B. speichern zu müssen.


    Meine Idee war es, das RT-Feld in einem Profildokument zu speichern. Scheitere aber auch hier daran, wie ich den unveränderten Inhalt des RT-Feldes darin speichern kann.
    Und wenn das geschafft sein sollte, werde ich wahrscheinlich auch wieder das Problem haben, wie ich nun den Inhalt des Profildokuments wieder in das Frontend-RT-Feld reinbekomme ohne zu speichern.


    Ich hätte gedacht, dass es im Internet haufenweise Beispiele geben müsste oder dass jeder hier, der ganz sicher besser programmieren kann als ich, mir ad hoc ein Code-Schnipsel zeigen könnte, wie RT-Felder im Frontend zu verändern sind.


    Im Moment komme ich keinen einzigen Schritt weiter, es müsste mal eine Art Wiki geben, wie man mit Richtext-Feldern umgehen kann, Frontend wie Backend.


    LG von einem etwas gefrustetem Peter

    Du holst dir zwar das Profildokument, aber dein Code zeigt nicht, das du es im UI öffnest.


    Muss ich doch auch nicht, oder doch? Mit

    Code
    Set pdoc = db.GetProfileDocument("Dummy")

    öffne ich das Profildokument, sofern vorhanden.
    Und mit

    Code
    Call pdoc.save(False,False)

    lege ich es an, wenn es noch nicht existiert hat und habe in pdoc das aktuelle Profildokument.

    Wäre folgender Code ein Ansatz? (Fliegt momentan aber noch mit der Fehlermeldung "Illegal Use of PROPERTY" raus)


    Deswegen die Frage, ob es die Möglichkeit gibt, das Dokument sozusagen als Kopie zu speichern.
    Dann würde das Original-Dokument, ob schonmal gespeichert oder nicht etc, unangetastet bleiben,
    also kein neuer Stand des Dokuments usw.
    Vielleicht hat jemand einen Code-Schnipsel für mich?

    Wie machst Du das mit dem Speichern?
    Prüfst Du vorher, ob das Dokument schon gespeichert wurde und wenn nicht, dann merkst Du Dir die UNID und löschst das Dokument wieder?
    Ansonsten würden doch nach und nach immer mehr Dokumente in den Entwürfen abgelegt werden, oder?
    Oder kann man auch das Dokument mit "speichern als" vielleicht immer in ein festes Dokument (z.B. persönliches Profildokument) speichern, das immer wieder überschrieben wird?
    Das wäre mir die liebste Methode.

    Komme ich denn auch das Body-RT-Object dran?
    Sonst scheitert es gleich danach beim

    Code
    Set rtnav = body.CreateNavigator                Set rtrange = body.CreateRange


    Habe es mit

    Code
    Set body = New NotesRichTextItem( uidoc.Document, "Body" )


    versucht, wobei ich auch vermute, dass ich hier auch nicht viel weiterkomme.
    Jetzt komm die Fehlermeldung: Richtext context position is not defined.


    Hallo,


    mittels

    Code
    Call uidoc.FieldAppendText("Body","irgendein Text")


    kann ich bei problemlos Text an den Body anhängen.


    Aber wie kann ich den vielleicht bereits eingegebenen Text auslesen?


    Code
    Set uidoc = ws.Currentdocument
        Set doc = uidoc.Document
    Set body = doc.GetFirstItem("Body")
    s_body = body.Getformattedtext(False,False)


    erzeugt leider den Fehler "Object variable not set", da body kein Object ist, sogar keinen Inhalt hat.




    LG Peter

    Hallo Dirk,


    trotz der beiden Parameter autoHorzFit und autoVertFit auf True wird weiterhin das Fenster fast doppelt so breit wie nötig angezeigt.
    Die Fensterhöhe ist zwar anfangs ausreichend, aber wenn der Anwender eine Option wählt, wird ein RichText-Feld mit Inhalt gefüllt und das Fenster ist nicht mehr hoch genug.
    Ich springe schon mit GotoField auf das erste Feld, aber dennoch ist es nicht mehr sichtbar, wenn vorher ein ausreichend langer RichText eingefügt wurde.
    Zudem ist das erste Feld ja nicht zwingend ganz oben.



    LG Peter