Autor Thema: Edit Modus verbieten?  (Gelesen 15814 mal)

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Edit Modus verbieten?
« am: 07.01.05 - 14:52:32 »
Hallo ich mal wieder....

ich soll mal wieder "schnell"  ::) was machen, benutze zum ersten mal "versioning" und will verhindern, dass alte versionen der dokumente geändert werden. Hab jetzt im forum gesucht und mehrfach den hinweise auf edit modus verbieten gefunden, aber nicht wie man das denn nun macht.

muss man dafür wieder ein wirklicher designer sein oder kann mir das jemand in kurzen schritten erklären? oder war ich wieder zu ungeschickt beim suchen in der designer hilfe? da hab ich's nämlich auch nicht gefunden...  ???

schönes wochenende an alle!  :D
trouble

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #1 am: 07.01.05 - 14:55:59 »
Eigentlich sollte man dafür schon Entwickler sein, denn das Thema ist nicht ganz unkomplex. Und die Designerhelp sagt dazu nix, ausser:

Autorenfelder verwenden. Wenn das machbar ist, ist das der einfachste Weg.

Sonst such hier mal nach dem gemeinsamen Vorkommen von
EditMode PostOpen QueryModeChange.

Was hier m.E. leider noch nie erwähnt wurde: Auch das PostRecalc-Event spielt beim Verhindern des EditMode u.U. eine Rolle !

Bernhard

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Re: Edit Modus verbieten?
« Antwort #2 am: 07.01.05 - 15:03:30 »
Irgendwie war mir klar, dass Du der erste sein würdest, der mir antwortet. :-)

Leider gehen autoren-felder nicht - weil nämlich die leute editor-access auf die db brauchen...

werde dann mal ne neue suche starten und mich durchwühlen.

wie immer vielen dank!

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Re: Edit Modus verbieten?
« Antwort #3 am: 07.01.05 - 15:27:39 »
Noch eine Frage.....

Hab jetzt folgenden Code gefunden, der mir auch super geholfen hat:
If Source.EditMode = True and (DEINEBEDINGUNG) then
  Source.EditMode = False
End If

Aber - DEINEBEDINGUNG wäre in Formula "@IsAvailable($Ref)" - wie formulier ich das in Script?  :-[

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #4 am: 07.01.05 - 15:29:58 »
Source.Document.~$Ref (0) <> ""

Und denk daran: Geprüft werden muss in PostOpen und QueryModeChange. Aber das hast Du bestimmt schon gefunden ;-)

Bernhard
« Letzte Änderung: 07.01.05 - 15:32:13 von koehlerbv »

Offline mibo11

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #5 am: 07.01.05 - 15:31:08 »
Dim doc as notesdocument

Set doc = source.document

... and doc.hasitem("$Ref")  Then

Gruß Sascha




Offline mibo11

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #6 am: 07.01.05 - 15:33:06 »
Source.~$Ref (0) <> ""

Bernhard, dies wird wahrscheinlich Probleme bringen, da Source  Frontend ist.

Gruß Sascha  ;D

Offline mibo11

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #7 am: 07.01.05 - 15:34:47 »
Source.Document.~$Ref (0) <> ""

Du hast geschummelt, eben stand da doch etwas anderes, oder bin ich jetzt vollkommen blöd?  ???

Gruß Sascha  ;D

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #8 am: 07.01.05 - 15:34:58 »
Das ist eleganter, Sascha, man muss aber dem Frieden trauen, dass es wirklich nie ein leeres $Ref-Item geben kann. Es sollte ja tatsächlich nicht, aber ...

Bernhard

PS: Den falschen Bezug auf's UIDocument hatte ich gerade schon korrigiert. Trotzdem danke, Sascha

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #9 am: 07.01.05 - 15:36:09 »
Schau auf die Edit-Zeit, Sascha - ich habe meinen Schnellschuss gerade mal ein paar Sekunden eher bemerkt, als Du posten konntest ...

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Re: Edit Modus verbieten?
« Antwort #10 am: 07.01.05 - 15:38:54 »
Es funzt! Genau so, wie ich's haben wollte.

DANKE!!!!!!!  :-*

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Re: Edit Modus verbieten?
« Antwort #11 am: 07.01.05 - 15:47:26 »
Upps, war wohl etwas vorschnell. Wenn ich jetzt ein neues Dokument erstellen will, bekomm ich die Meldung "Object Variable not set"

Was hab ich denn jetzt wieder falsch gemacht?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #12 am: 07.01.05 - 15:51:43 »
Keine Ahnung  ;)
Schick mal den Code und nenne die zeile, die der Debugger bemängelt.
Kann nur 'ne Kleinigkeit sein.

Bernhard

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Re: Edit Modus verbieten?
« Antwort #13 am: 07.01.05 - 15:57:12 »
Hier der Code im Queryopen:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
   If Source.EditMode = True And Source.Document.~$Ref (0) <> "" Then
      Messagebox "This is an old version and must not be edited"
      Continue = False
      Exit Sub
   End If
End Sub

Debugger meckert gleich am Anfang:
If Source.EditMode = True And Source.Document.~$Ref (0) <> "" Then


Glombi

  • Gast
Re: Edit Modus verbieten?
« Antwort #14 am: 07.01.05 - 16:02:33 »
Kleiner Verbersserungsvorschlag:

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
if Not Source.IsNewDoc then
   If Source.EditMode = True And Source.Document.~$Ref (0) <> "" Then
      Messagebox "This is an old version and must not be edited"
      Continue = False
      Exit Sub
   End If
end if
End Sub


Kann sein, dass der das .Document im QueryOpen bei neuen Dokumenten nicht hat.
Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #15 am: 07.01.05 - 16:03:32 »
Jo, das ist auch QUERYOpen. Das ist für diese Belange ein unbrauchbares Event, da Source noch nicht vollständig zur Verfügung steht.

POSTOpen ist angesagt - und dann den entsprechenden Code für QueryModeChange nicht vergessen. Dort muss auch die Fehlermeldung hin - der Code in PostOpen triggert nämlich QueryModeChange, ergo muss dort die Messagebox aufpoppen.

Bernhard

Offline trouble

  • Junior Mitglied
  • **
  • Beiträge: 71
  • Geschlecht: Weiblich
  • Hmmmmmmmm....
Re: Edit Modus verbieten?
« Antwort #16 am: 07.01.05 - 16:09:06 »
OK, jetzt klappt's. Danke!

Oh, zur allgemeinen Erleichterung: Ich hab inzwischen offiziell bei meinen Vorgesetzten verlauten lassen, dass dies meine letzte Programmierarbeit in Notes ist, weil das ohne entsprechende Kenntnisse doch keinen Zweck hat (auch wenn Ihr mir des öfteren aus der Klemme helft)...

Hoffe also, in Zukunft bleibt Ihr von meinen lästigen Fragen verschont.  8)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #17 am: 07.01.05 - 16:11:01 »
Die Fragen waren doch nicht lästig  :)

Wenn Ihr jetzt was programmieren (lassen) wollt, wisst Ihr ja, in wen Ihr Euch noch wenden könnt  ;)

Ein schönes Wochenende wünscht

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit Modus verbieten?
« Antwort #18 am: 07.01.05 - 17:13:32 »
So, und jetzt mal strukturiert zum Thema

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 kreiierte 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

HTH,
Bernhard

Glombi

  • Gast
Re: Edit Modus verbieten?
« Antwort #19 am: 07.01.05 - 17:19:59 »
Hi Bernhard,
das gibt aber einen Fleißpunkt  ;)

Ich kann mich dunkel erinnern, mal ein Problem mit Dokumenten gehabt zu haben, wo die Einstellung galt "Automatisch im Bearbeitenmodus öffnen". Ich weiß aber nicht mehr genau, ob das Problem darin bestand, dass der Code anstatt im PostOpen im QueryOpen stand.
Man müsste mal prüfen, welche Events laufen, bevor dann automatisch in den Bearbeitenmodus geschaltet wird und ob dann das QueryModeChange packt...

Ausserdem sollte noch geprüft werden, ob das
 Source.EditMode = False
im Postopen nicht Probleme macht. Wenn bspw. Felder berechnet wurden, kommt doch die Abfrage "Wollen Sie speichern?". Das wollen wir hier ja gerade nicht.
Aus diesem Grund habe ich das immer ins QueryOpen geschrieben.

Habe leider nicht die Zeit, dass alles zu prüfen. Daher mal zunächst als Gedankenstütze...

Andreas
« Letzte Änderung: 07.01.05 - 17:22:27 von Glombi »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz