Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: buzi am 01.07.13 - 11:03:58
-
Wie kann ich ein NotesUIDocument schließen und die Änderungen verwerfen ohne dass der User hinterher gefragt wird ob er die Änderungen speichern will?
-
Hallo,
Man kann z.B. in der Designer-Hilfe nachsehen und hier nach dem Feld "SaveOptions" suchen.
SaveOptions = "0" => kein Speichern.
Andreas
-
Die Option habe ich in der Formelsprache bereits gefunden. Aber wie schreibe ich das in Lotus Script??
-
Das ist keine Option, dass ist ein quasi 'normales' Feld.
Also gelten auch die in Script gueltigen Moeglichkeiten, um den Inhalt eines Feldes zu veraendern.
Andreas
-
Also, den Aufruf uidoc.SaveOptions = 0 gibt es nicht!
Dann mal anders gefragt: An welcher Stelle sollte/kann man den Bearbeiten-Modus verhindern, wenn ein Dokument z.B. einen bestimmten Status (etwa "Antrag zugelassen") hat? Das ist vermutlich schlauer als erst beim Speichern zu prüfen und dann zurück zu rollen?!
-
Wie Andreas schon sagt ist das ein normales Feld, dem du den Namen "SaveOption" gibst und dem du einen Wert "0" oder "1" zuweisen muss. Das Feld hat den Wert dann solange, bis man ihn wieder ändert und manuel "speichern" sagt. Soange gilt dann:
SaveOptions steuert die "Wollen Sie speichern" abfrage beim Schließen des Dokumentes.
"0": Das Dokument wird ohne nachfrage geschlossen - und nicht gespeichert
"1": Sofern das Dokument im Frontend geändert wurde erscheint die übliche 'Wollen Sie speichern' Abfrage
Wenn du auf den status eines Dokumentes prüfen willst un dementsprechend das Bearbeiten verhindern willst, musst du das im Querymodechange machen.
-
@Klafu,
Wenn du auf den status eines Dokumentes prüfen willst un dementsprechend das Bearbeiten verhindern willst, musst du das im Querymodechange machen.
Damit waere ich vorsichtig.
Ansicht der Dokumente und dann "STRG + B" (STRG + E) loest garade diesen Event nicht aus.
Ich wuerde es vorziehen in sochen Konstellationen mit "Leser- und Autorenfeldern" zuarbeiten, oder, wenn es sich anbietet
mit "zugriffskontrollierten Abschnitten"
Andreas
-
Ein Rechtsklick > Bearbeiten umgeht es auch.
Da geb ich dir Recht, Andreas. So einfach das Bearbeiten verhindern geht nicht.
Das Bearbeiten eines geöffneten Dokuments kann so aber abgefangen werden.
Chris
-
Wenn man das Bearbeiten mit Script verhindern will, muss man PostOpen und Querymodechange anfassen.
Im PostOpen prüfen, ob das Dokument im EditMode ist, falls ja, EditMode -> False
Im QueryModeChange ebenfalls prüfen, ob das Dokument im EditMode ist, falls nein -> Continue = False
Das sind zwei Dreizeiler, die zuverlässig funktionieren, wenn man mit verborgenem Design arbeitet, ansonsten könnte man das mittels Debugger umgehen.
-
Dazu gibt es auch einen Best Practice-Artkel ;)
Bernhard
-
Bernhard,
wo finde ich diese Best Practice-Artkel?
Danke,
Mel
-
Hier im Forum unter Best Practices, ist nicht wirklich schwer zu finden ...
http://atnotes.de/index.php/topic,20455.0.html
-
Danke!
-
Noch eine Frage dazu: Du schreibst "Für den Platzhalter THE_CONDITION ist jeweils die konkrete Bedingung zu formulieren"
Wenn ich hier eine Funktion aus einer Scritp-Bib verwende, wertet der Debugger die Zeile einfach nicht aus:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim edit As Boolean
edit = valEditRWInEndStatus
If edit = False Then
If Source.EditMode = False Then
Continue = False
End If
End If
End Sub
Warum?
-
Hast Du die Bibliothek eingebunden?
Was sagt der Debugger?
-
Die Bibliothek ist in den Options eingebunden. Der Debugger lässt die Zeile einfach aus, "hüpft" quasi drüber ?!!?!?!?
-
Ich habe den Code jetzt direkt ins QueryModeChange geschrieben dann läuft es. Irgendwie scheint mein Projekt bezüglich der Bibs etc. etwas verhuntzt zu sein.
Danke für eure Hilfe!
-
Setz mal Option Declare und binde die Bibliothek "ganz oben" in den Options der Globals ein. Den Code ins QueryModeChange zu schreiben ist keine gute Lösung, da Du die im PostOpen ebenfalls benötigst. Und Du willst das sicherlich nicht doppelt ablegen ...
-
Peter, kannst du mir das ein wenig genauer beschreiben bitte?
"Setz mal Option Declare und binde die Bibliothek "ganz oben" in den Options der Globals ein. "
Wie setze ich die Option Declare, und was meinst du mit ganz oben und den Globals?
-
Ich vermute, dass bei dieser Zeile
edit = valEditRWInEndStatus
nicht in die Bibliothek gesprungen wird, weil die nicht korrekt eingebunden ist. valEditRWInEndStatus wird dann als eine nicht deklarierte Variable angenommen, und edit dabei mit einem "nichts" gefüllt.
Hättest Du Option Declare gesetzt, würde eine nicht deklarierte Variable als Fehler ausgewiesen.
Option Declare
schreibst Du einfach in die Options. Options gibt es in der Maske sowohl unter Globals als auch unter der Maske (linke Seite, dort, wo Du auch das QueryModeChange findest). Option Declare ist etwas pieselig und gilt nicht immer, ich würde es daher immer in alle Options setzen.
Wo hast Du die Bibliothek eingebunden? Das kannst Du ebenfalls in beiden Options machen, ich würde aber lieber die globalen Options nehmen, dann gilt es überall. Eine Einbindung einer Bibliothek in den Options der Maske überschreibt die Einbindung in den Globals für die Events, die in der Maske zugeordnet sind (zumindest war das früher so), da habe ich schon mal sehr lange nach gesucht, warum eine Funktion nicht gefunden wurde. Daher würde ich mich immer nur für eine Stelle entscheiden, und das sind dann die Globals.
-
Danke Peter,
so habe ich es jetzt gemacht. Also die Einbindung in den globalen Options der Maske gesetzt.
Grüße,
Mel