Best Practices > Diskussionen zu Best Practices

Kleiner Fehler in "EditMode für bestimmte Dokumente verwehren" ?

(1/2) > >>

TMC:
Ich hatte gerade was in einer DB eingebaut, und dachte "ach ja, das hatten wir ja schon in Best Practices".

Es geht um diesen Artikel:
[LotusScript]: EditMode für bestimmte Dokumente verwehren

Es heißt dort:

--- Zitat ---Für den Platzhalter THE_CONDITION ist jeweils die konkrete Bedingung zu formulieren. Soll das Editieren generell verhindert werden, kann dieser Zweig auch entfallen.
Zwei Beispiele:
If (Source.EditMode = True) And (Source.Document.Status (0) = "Accepted") Then
oder - ohne Bedingung -
If (Source.EditMode = True) Then
--- Ende Zitat ---
Und:

--- Code: ---Sub Querymodechange (Source As Notesuidocument, Continue As Variant)

'Prevent editing a document under a certain condition:
If (THE_CONDITION) Then
Messagebox "You are not allowed to edit this document !"
--- Ende Code ---

Meines Erachtens muss es allerdings heißen:
If (Source.EditMode = FalseTrue)

Warum?
Erstmal ist ein Dokument im Lesemodus. Source.EditMode gibt also False zurück. Wechselt nun ein User im geöffneten Doc vom Lesemodus in den EditModus (z.B. via Doppelklick oder Strg+E), so ist für Querymodechange Die Bedingung Source.EditMode=False nach wie vor zutreffend. Erst nach dem Querymodechange ist dann Source.EditMode=True.

D.h. will man einwirken, wenn vom Lesemodus auf den Edit-Modus gewechselt wird, so muss man IMHO auf Source.EditMode = False abfragen.

Oder sehe ich das jetzt falsch?

Semeaphoros:
Das ist so richtig, wie Du das siehst, die Query-Events passieren, bevor die Veränderung/Aktion stattfindet, damit ist beim Eintreten des Events noch die alte Umgebung zutreffend. Alles andere wäre ein Bug.

koehlerbv:
Nein, das seht Ihr falsch: Der erwähnte Code steht ja im PostOpen (und nicht im QueryModeChange). Wenn man im PostOpen schon EditMode = True hat, dann wurde das Doc bereits im Bearbeiten-Modus geöffnet, was ja verhindert werden soll.
Im QueryModeChange muss dann allerdings aus EditMode = False geprüft werden, wie es auch im BP-Artikel beschrieben wurde.

Bernhard

TMC:

--- Zitat von: koehlerbv am 28.03.05 - 13:23:29 ---Der erwähnte Code steht ja im PostOpen (und nicht im QueryModeChange).
--- Ende Zitat ---

Sicher?

Dort steht erst: "Praktische Umsetzung: Für den Platzhalter THE_CONDITION ist ....If (Source.EditMode = True) Then....". Dort ist keine Einschränkung auf PostOpen erwähnt.

Dann kommen Code-Beispiele. 1 für Postopen, und das 2. Codebeispiel für Querymodechange. Im Querym.-change Bsp. steht dann "If (THE_CONDITION) Then".

So wie sich das darstellt, kann man im Querym.-Change statt THE_CONDITION eben "Source.EditMode = True" einsetzen, was aber falsch ist in dem Kontext.

Es ist zwar im Artikel allgemein erwähnt, aber IMHO ist das Beispiel so falsch - zumindest irreführend bezügl. "THE_CONDITION".

Vielleicht sollte man das auch erweitern mit "THE_CONDITION_POSTOPEN" und "THE_CONDITION_QUERYMODECHANGE" ?

Semeaphoros:
Rein aus didaktischen Ueberlegungen sollte man an dieser Stelle (oder eigentlich fast überall, wo es um logische Ausdrücke geht) keinen Platzhalter verwenden, sondern die Bedingung ausschreiben, um genau solche Missverständnisse auszuschalten.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln