Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: buzi am 01.07.13 - 11:03:58

Titel: UiDocument.Close ohne Save
Beitrag 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?
Titel: Re: UiDocument.Close ohne Save
Beitrag von: ascabg am 01.07.13 - 11:06:03
Hallo,

Man kann z.B. in der Designer-Hilfe nachsehen und hier nach dem Feld "SaveOptions" suchen.

SaveOptions = "0" => kein Speichern.


Andreas
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 01.07.13 - 11:09:17

Die Option habe ich in der Formelsprache bereits gefunden. Aber wie schreibe ich das in Lotus Script??

Titel: Re: UiDocument.Close ohne Save
Beitrag von: ascabg am 01.07.13 - 11:10:54
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
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 01.07.13 - 11:18:14

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?!
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Klafu am 01.07.13 - 11:21:44
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.
Titel: Re: UiDocument.Close ohne Save
Beitrag von: ascabg am 01.07.13 - 11:52:39
@Klafu,
Zitat
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
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Klafu am 01.07.13 - 11:55:13
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
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Peter Klett am 01.07.13 - 12:16:56
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.
Titel: Re: UiDocument.Close ohne Save
Beitrag von: koehlerbv am 01.07.13 - 14:04:08
Dazu gibt es auch einen Best Practice-Artkel  ;)

Bernhard
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 02.07.13 - 09:33:33

Bernhard,

wo finde ich diese Best Practice-Artkel?

Danke,
Mel
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Peter Klett am 02.07.13 - 09:39:45
Hier im Forum unter Best Practices, ist nicht wirklich schwer zu finden ...

http://atnotes.de/index.php/topic,20455.0.html
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 02.07.13 - 10:04:08
Danke!
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 02.07.13 - 10:53:21
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?
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Peter Klett am 02.07.13 - 11:07:07
Hast Du die Bibliothek eingebunden?

Was sagt der Debugger?
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 02.07.13 - 11:34:13
Die Bibliothek ist in den Options eingebunden. Der Debugger lässt die Zeile einfach aus, "hüpft" quasi drüber ?!!?!?!?
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 02.07.13 - 11:54:50
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!
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Peter Klett am 02.07.13 - 12:11:12
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 ...
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 05.07.13 - 10:55:34
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?
Titel: Re: UiDocument.Close ohne Save
Beitrag von: Peter Klett am 05.07.13 - 13:35:21
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.
Titel: Re: UiDocument.Close ohne Save
Beitrag von: buzi am 10.07.13 - 09:33:54
Danke Peter,

so habe ich es jetzt gemacht. Also die Einbindung in den globalen Options der Maske gesetzt.

Grüße,
Mel