Autor Thema: [LotusScript]: EditMode für bestimmte Dokumente verwehren  (Gelesen 18323 mal)

Offline koehlerbv

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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz