Autor Thema: Kleiner Fehler in "EditMode für bestimmte Dokumente verwehren" ?  (Gelesen 6234 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
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
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 !"

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?
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
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.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Der erwähnte Code steht ja im PostOpen (und nicht im QueryModeChange).

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" ?
« Letzte Änderung: 28.03.05 - 13:48:43 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
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.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Matthias, Jens:
Ich verstehe wirklich nicht, was Ihr wollt. Jedes Event ist mit korrekten Beispielen versehen. Wenn man die Erläuterungen missverstehen will, kann man sie natürlich missverstehen, aber dann hat man wohl den gesamten Kontext nicht gelesen.
Sowie ich wieder Zeit habe, werde ich aber die Einleitung überarbeiten, damit diese auch für ein Überfliegen des Textes auch zu den Beispielen passt.

Interessanterweise sind wirkliche Anfänger mit dem BP-Artikel bisher klar gekommen ...

Bernhard

PS @Jens: Didaktik und Methodik haben logischerweise auch in meinem Studium ebenso wie bei Dir einen weiten Raum eingenommen. Und gerade deshalb habe ich dort einen Platzhalter für THE_CONDITION eingesetzt, um eben nicht zu konkretisieren.

PS @Matthias: THE_CONDITION hat absolut nichts mit dem jeweiligen Event zu tun - THE_CONDITION ist THE_CONDITION und vollkommen unabhängig von einem Event.

Offline animate

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Ich kann auch nichts Falsches oder Irreführendes erkennen. Und ich wüsste auch nicht, wie ich die "Bedingung ausschreiben" sollte. Die ist ja ziemlich variabel für jeden

Das Missverständnis liegt in meinen Augen bei TMC. Vielleicht ist der Punkt, wo du das missverstehst dieser hier:
Zitat
Erstmal ist ein Dokument im Lesemodus.

Laut koehlerbv ist ein Dokument aber eben gerade nicht erstmal im Lesemodus sondern
Zitat
kann ein Dokument auch aus einer Ansicht heraus bereits im EditMode geöffnet werden: Via Menü, via Button, per Tastatur. In diesem Fall wird natürlich das Maskenevent "QueryModeChange" nicht mehr ausgeführt - nach "QueryOpen" und "PostOpen" ist das Dokument geöffnet - im EditMode.
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Ich hab mal visualisiert, was mir da ins Auge gestochen war:
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz