AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
22.11.19 - 03:44:38
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Best Practices
| |-+  At Notes Best Practices (Moderatoren: Axel, MartinG, animate, koehlerbv)
| | |-+  [LotusScript]: EditMode für bestimmte Dokumente verwehren
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: [LotusScript]: EditMode für bestimmte Dokumente verwehren  (Gelesen 14504 mal)
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« am: 07.01.05 - 22:14:43 »

Autor(en):             Bernhard Koehler
Stand:                   07.01.2005
Version:                1.00
Notes-Versionen:  4.x, 5.x, 6.x
Atnotes-Thread:    Thread     (Einer von vielen)



EditMode verhindern

Das nachfolgend geschilderte Verfahren stellt kein sicheres Procedere dar, um das Manipulieren von Dokumenten zu verhindern. Wenn möglich, sollte man unbedingt Autorenfelder verwenden und den Benutzern einer Applikation nur den Zugriff auf die DB mit Autorenrechten geben.
Für Fälle, in denen es ausreicht, den Benutzer lediglich darauf hinzuweisen "An diesem Dokument bitte keine Modifikationen mehr vornehmen !", genügt jedoch das nachfolgend geschilderte. Mit einfachen Aktionen auf GUI-Ebene lässt es sich auch nicht aushebeln, wohl aber durch selbstgeschriebene Agents, eigens kreierte Masken und ... na, wir wollen jetzt keinen auf falsche Gedanken bringen  Grin
"Einfach" geht es aber auf jeden Fall nicht mehr ...

Ein paar technische Hintergründe:
In einem geöffneten (!) Dokument führt der Wechsel des EditMode-Status (True / False) zum Triggern des Events "QueryModeChange". Das ist also genau das Event, in dem es einzugreifen gilt. Allerdings 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.

Erschwerend kann hinzukommen, dass im Event "PostRecalc" Code steht, der zum Beispiel zur Berechnung bestimmter Felder der Maske erforderlich ist. Dann lautet die Reihenfolge "QueryOpen" - "PostRecalc" - "PostOpen". In diesem Fall ist also auch das "PostRecalc"-Event zu beachten.

Ein Ereignis, welches immer durchlaufen wird (es sei denn, das Dokument ist bereits geöffnet), ist "QueryOpen": Hier stehen noch nicht alle Properties des Dokumentes zur Verfügung. So verlockend es klingt - "QueryOpen" können wir in diesem Zusammenhang getrost vergessen.

Praktische Umsetzung:

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


Code:
Sub Postopen (Source As Notesuidocument)

'Prevent editing a document under a certain condition:
If (Source.EditMode = True) And (THE_CONDITION) Then
Source.EditMode = False 'This triggers the QueryModeChange event !
End If

End Sub

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 !", MB_ICONEXCLAMATION, "Warning"
If Source.EditMode = False Then
Continue = False
End If     
End If     

End Sub

Soll das Editieren gänzlich untersagt werden, ist die Abfrage nach THE_CONDITION zu entfernen und die Messagebox nach der Abfrage des EditMode's einzubauen.


Für den Fall, dass beim Öffnen eines Dokuments im EditMode auch Code im "PostRecalc"-Event ausgeführt wird, dann brauchen wir hier ebenfalls folgenden Code wie im "PostOpen"-Event:

Code:
Sub Postrecalc (Source As Notesuidocument)

'Prevent editing a document under a certain condition:
If (Source.EditMode = True) And (THE_CONDITION) Then
Source.EditMode = False 'This triggers the QueryModeChange event !
End If

End Sub

« Letzte Änderung: 07.01.05 - 22:59:06 von koehlerbv » Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: