AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
04.08.20 - 12:38:54
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Domino 8 und frühere Versionen
| |-+  Entwicklung (Moderatoren: Axel, eknori, Hoshee, ata, Thomas Schulte, koehlerbv)
| | |-+  Edit Modus verbieten?
« vorheriges nächstes »
Seiten: [1] 2 Nach unten Drucken
Autor Thema: Edit Modus verbieten?  (Gelesen 11985 mal)
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« am: 07.01.05 - 14:52:32 »

Hallo ich mal wieder....

ich soll mal wieder "schnell"  Roll Eyes 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...  Huh

schönes wochenende an alle!  Cheesy
trouble
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« Antworten #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!
Gespeichert
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« Antworten #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?  Embarrassed
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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 » Gespeichert
mibo11
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 325



« Antworten #5 am: 07.01.05 - 15:31:08 »

Dim doc as notesdocument

Set doc = source.document

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

Gruß Sascha



Gespeichert
mibo11
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 325



« Antworten #6 am: 07.01.05 - 15:33:06 »

Source.~$Ref (0) <> ""

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

Gruß Sascha  Grin
Gespeichert
mibo11
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 325



« Antworten #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?  Huh

Gruß Sascha  Grin
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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 ...
Gespeichert
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« Antworten #10 am: 07.01.05 - 15:38:54 »

Es funzt! Genau so, wie ich's haben wollte.

DANKE!!!!!!!  Kiss
Gespeichert
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« Antworten #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?
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #12 am: 07.01.05 - 15:51:43 »

Keine Ahnung  Wink
Schick mal den Code und nenne die zeile, die der Debugger bemängelt.
Kann nur 'ne Kleinigkeit sein.

Bernhard
Gespeichert
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« Antworten #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

Gespeichert
Glombi
Gast
« Antworten #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
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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
Gespeichert
trouble
Junior Mitglied
**
Offline Offline

Geschlecht: Weiblich
Beiträge: 71


Hmmmmmmmm....


« Antworten #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.  Cool
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #17 am: 07.01.05 - 16:11:01 »

Die Fragen waren doch nicht lästig  Smiley

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

Ein schönes Wochenende wünscht

Bernhard
Gespeichert
koehlerbv
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 20460



« Antworten #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  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

HTH,
Bernhard
Gespeichert
Glombi
Gast
« Antworten #19 am: 07.01.05 - 17:19:59 »

Hi Bernhard,
das gibt aber einen Fleißpunkt  Wink

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 » Gespeichert
Seiten: [1] 2 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: