Domino 9 und frühere Versionen > ND7: Entwicklung
Kollision zwischen OnHelp und Continue = False in Querysave
BigWim:
--- Zitat ---Bis dahin ist OnHelp in diesem Kontext tabu.
--- Ende Zitat ---
Eine Idee hätte ich noch: Vielleicht kannst Du mit einem "Temp"-Doc arbeiten, also praktisch mit einer Kopie des aktuellen Dokuments vor den Benutzeraktivitäten.
1. Im PostOpen der Maske Dokument mit Notesdocument.CopyAllItems kopieren.
2. Query-Save der Teilmasken führen Prüfungen durch und setzen Stati
4. Query-Save der Fußmaske entscheidet, welche "Version" des Dokuments produktiv bleibt.
4a. Ist Status = "ja, speichern": nix machen
4b. Ist Status = "nein, nicht speichern": aktuelles Dokument löschen, Temp-Doc (aus PostOpen-Maske) speichern mit doc.Save
Markus
pram:
Vielleicht kannst du, anstatt continue=false das Feld Saveoptions auf "0" seten um das speichern zu verhindern.
Gruß
Roland
Peter Klett:
Hallo Markus,
Deine Idee mit dem "Temp"-Doc ist grundsätzlich nicht schlecht. Leider hat sie einen entscheidenden Haken: Bei 4b schreibst Du "aktuelles Dokument löschen". Kein gewöhnlicher Benutzer in dem System hat Löschrechte, in der Regel sind alle Benutzer Autor und es wird mit einem Autorenfeld der Zugriff gesteuert.
Natürlich könnte man anstelle des Löschens auch im aktuellen Dokument alle Items löschen und dann aus dem "Temp"-Doc per CopyAllItems den Urzustand wiederherstellen. Doch auch dann bleibt mindestens ein Problem übrig:
Wenn der Benutzer ein neues Dokument erstellt hat und ihm Informationen fehlen, die er nicht sofort beibringen kann, das Dokument aber ohne diese Information nicht gespeichert werden darf (Fehlermeldung bei Validierung), ist dennoch ein unkorrektes Dokument gespeichert.
Viele Grüße
Peter
Peter Klett:
Hallo Roland,
Continue = False durch SaveOptions = "0" zu ersetzen, hört sich ganz gut an. Hab das in dem abgespeckten Testsystem nachgebaut. Das funktioniert einwandfrei mit und ohne OnHelp.
Ob ein Umbau ratsam ist, muss allerdings gut überlegt werden. Es gibt andere Aktionen, die abhängig davon sind, ob das Dokument gespeichert werden konnte. Hierzu wird ausgewertet, ob das Speichern des UIDocs fehlerfrei erfolgen konnte (Call notesuidocument.Save). Bei einem korrekt funktionierenden Continue = False gibt notesuidocument.Save einen Fehler aus, bei SaveOptions = "0" nicht. Mindestens diese Routine müsste dann auch geändert werden. Niemand weiß, ob in anderen kundenindividuellen Teilmasken so etwas gebaut wurde. Man könnte natürlich beide Wege parallel gehen, Continue und SaveOptions setzen. Ohne OnHelp ist dann alles "wie früher", mit OnHelp zieht dann nur SaveOptions.
Vielen Dank für die Idee. Wenn es zwingend umgesetzt werden müsste, erscheint mir Dein Ansatz auf jeden Fall eine nähere Untersuchung wert zu sein.
Viele Grüße
Peter
pram:
Hmm, deine Bedenken kann ich verstehen, deshalb noch ein paar Tipps zum Saveoptions-Feld:
Notes verhält sich bzgl des Wertes etwas "komisch", insbesondere die uiDoc.refresh-Methode, deshalb würde ich nur folgende 2 Zustände zulassen:
SaveOptions := "0"
SaveOptions := @Unavailable
(Im Web muss das Feld als "echtes" Feld auf der Maske/Teilmaske vorhanden sein)
OT: gibt es irgendwo eine Auflistung was die SaveOptions-Werte "0","1", 0, -1, @Unavailable,"",... genau bedeuten?
Die Hilfe beschreibt ja nur "0" und "1", In der original-Mail-DB werden aber rein numerische Werte verwendet.
--- Zitat von: IBM, OutOfOfficeLib_DE ---Call Me.m_noteUIDoc.document.replaceitemvalue(SAVE_OPTIONS, -1)
--- Ende Zitat ---
/OT
ich hab dein Problem übrigens mal nachgebaut und kann bestätigen, dass die Präsenz eines "onHelp"-Codes den ganzen querySave-Mechanismus durcheinanderbringt.
Evtl solltest du dir eine Alternative für das onHelp-Event überlegen:
- Einen Agenten starten (mit Formelsprache tritt das Problem nicht auf)
- OnHelp in einer TM verwenden (auch da tritt das Problem scheinbar nicht auf)
Allerdings erfordern vermutlich beide Lösungen ein Redesign der Help Routine.
Wenn sich der Code in der Maske befindet muss dieser ggf in einen Agenten/Subform ausgelagert werden, deshalb hätt ich hier noch einen zugegeben unschönen "Würgaround"
- im "onHelp" mit Formelsprache ein Feld auf "1" setzen und einen Recalc auslösen
- im QueryRecalc prüfen ob das Feld gesetzt ist und deinen bisherigen Help-Code ausführen, das Feld natürlich wieder zurücksetzen
Gruß
Roland
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln