Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: iukhdh am 31.05.10 - 17:06:32

Titel: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: iukhdh am 31.05.10 - 17:06:32
Hallo Forum,

leider weiß ich keine Lösung für folgendes Problem:

Ich habe eine Maske A, in der ich per Dialogbox eine zweite Eingabemaske B aufrufe, und dort Daten eingebe.
Damit ich vor verlassen der Dialogboxmaske auf korrekte Eingaben überprüfen kann, hab ich einige Überprüfungen im Queryclose eingebaut.

Klappt einwandfrei.

Nun kann ich im später die Eingabemaske B wieder aufrufen (Doppelklick aus Ansicht) und dort Werteänderungen vornehmen. Wenn ich nun diese Maske B wieder über das X im Reiter schliesse, habe ich ja die Auswahl, ob ich die Änderungen speichern möchte.

Wenn ich nun dort mit "Nein" bestätige, dann springt mir der Code ins Queryclose, und überprüft dort auf Falscheingaben, was aber durch die Bestätigung mit "Nein" ja eigentlich nicht nötig ist und zu unnötigen Meldungen führt.

Daher meine Frage:

Wie kann ich den Code im Queryclose umgehen, wenn ich beim Speichern mit "Nein" bestätige.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: Peter Klett am 31.05.10 - 17:19:07
Wenn Du Deine Überprüfungen im Querysave durchführst, erfolgen die nur, wenn das Dokument gespeichert werden soll. Tritt ein Fehler auf, kannst Du mit Continue = False das Speichern abbrechen.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: iukhdh am 31.05.10 - 17:28:24
Hallo Peter,

ich brauch die Überprüfungen im Queryclose, weil ich bei der Eingabe der Daten in der Dialogbox die Überprüfung durchführen möchte, BEVOR die Dialogbox geschlossen ist.

Wenn ich später mit dem X im Reiter schliesse, frage ich im Querysave auch was ab, und breche wie bei dir beschrieben ab. Wenn ich aber auf Speichern = Nein gehe, komm ich garnicht ins Querysave, was ja so auch OK ist, aber dummerweise ins Queryclose.

Da bräuchte ich eine Lösung um das zu umgehen. Oder eine Anregung wie ich es anders machen könnte, vielleicht denk ich auch nur quer ...  :-:
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: Peter Klett am 31.05.10 - 17:33:08
Du könntest beim Aufruf der Dialogbox ein Feld in das Dokument schreiben (zumindest wenn Du die Dialogbox über Script aufrufst), und im Queryclose darauf reagieren (z.B. FlagDialogbox = "1"). Natürlich musst Du dann auch das Feld löschen bzw. nicht speichern, sonst "glaubt" das Dokument später, es sei eine Dialogbox.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: iukhdh am 31.05.10 - 17:39:28
Hmm, an so ein Flag hab ich noch garnicht gedacht, das wäre eine Lösung.

Aber gibt es denn keine Möglichkeit abzufragen, ob ich bei der Speicherabfrage auf "Nein" gedrückt habe? Kann ich mir fast nicht denken, aber ich find dazu nix in der Hilfe oder hier im Forum.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: Peter Klett am 31.05.10 - 17:43:40
Du kannst umgekehrt prüfen, indem Du Dir eine globale Variable (z.B. Dim flagGespeichert As Integer) definierst, und diese im Querysave auf True setzt. Dann kannst Du im Queryclose abfragen ob das Dokument gespeichert wurde.

Was passiert im Queryclose, wenn Du das Dokument nur zum Lesen öffnest? Beachtest Du auch Source.EditMode?
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: iukhdh am 31.05.10 - 17:50:12
Wenn ich das Dokument nur zum Lesen öffne, dürfte es eigentlich keine Probleme geben, da ich an den Werten  ja nix ändere, und diese ja schon in der Dialogbox geprüft wurden. Aber ich weiß was du  meinst, muss ich mir anschauen.

Jetzt probier ich morgen mal mein Glück mit dem Flag.

Danke.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: Peter Klett am 31.05.10 - 17:55:38
Hier ein anderer Lösungsansatz (so arbeite ich bei Dialogboxen). Du rufst die Dialogbox im Script in einer Schleife auf (
Do While ...
If workspace.Dialogbox (........, dialogdoc) Then
), nach Schliessen führst Du Deine Überprüfung im aufrufenden Script auf, ist alles in Ordnung, verlässt Du die Schleife, wenn nicht, gibst Du eine Fehlermeldung aus (oder schreibst die Fehler in ein extra Fehlerfeld in der Dialogbox), und die Dialogbox öffnet sich wieder. Damit hast Du zwar den Effekt, dass die Dialogbox kurz geschlossen und danach wieder geöffnet wird, sparst Dir aber das Gehampel, was Du jetzt gerade machen musst.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: Peter Klett am 31.05.10 - 18:03:23
Wenn ich das Dokument nur zum Lesen öffne, dürfte es eigentlich keine Probleme geben, da ich an den Werten  ja nix ändere, und diese ja schon in der Dialogbox geprüft wurden....

Wenn sich morgen an der Überprüfung etwas ändert (z.B. ein neues Feld kommt dazu), wird beim Schließen aller alten Dokumente, die dieses Feld nicht haben, eine Fehlermeldung ausgegeben.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: iukhdh am 01.06.10 - 15:31:24
Hallo Peter,
da bin ich nochmal kurz.

Also dein Vorschlag mit dem Flag funktioniert einwandfrei. Da ich die Überprüfungen im Queryclose ja nur ein einziges Mal benötige (beim schliessen der Dialogbox) breche ich bei späteren Aufrufen die Abfragen im Queryclose einfach ab. Alles andere läuft dann im Querysave.

Deinen anderen Lösungsansatz probier ich bei Gelegenheit mal aus, da stehen noch einige andere Sachen an, die nicht so eilig sind wie diese gerade.

Danke für die Hilfe.
Titel: Re: Queryclose und "Wollen Sie speichern" = Nein
Beitrag von: Peter Klett am 01.06.10 - 15:51:31
Nur zur Vollständigkeit: Bei dem anderen Lösungsansatz sollte die Dialogbox mit einem temporären Dokument geöffnet werden, damit nicht schon Werte in das aktuelle Dokument zurückgeschrieben werden, bevor die Überprüfung stattgefunden hat. Also:

1. temporäres Dokument erstellen
2. relevante Felder aus dem Originaldokument hineinkopieren
3. Dialogbox mit temporärem Dokument öffnen
4. Prüfen und ggf. geänderte Felder in das Originaldokument zurückschreiben