hi, wieder back ..
ich habe mal schnell ne maske für dich gekrizzelt:
1. Feld "TEXTEINGABE"
Hidden im Lesemodus
kein Vorgabewert
2. Feld "PASS"
Hidden =für Lesemodus und @isnewdoc
kein Vorgabewert
3. Feld "HIST"
Hidden im EDITMODUS
Berechnet mit Formel:
{a:=@If( @IsNewDoc;texteingabe;
!@IsNewDoc & pass=hid;texteingabe;
hist);
@If(!@IsNewDoc & pass!=hid;
@SetField("texteingabe";"");void);
a}
4. Feld "HID"
Hidden =für EDITMODE und !@isnewdoc
kein Vorgabewert
In das WEBQUERYSAVE Event der Maske kommt ein Aufruf eines Agenten, Name "(check)" per command-toolsrunmacro
Und der WebQuerySave Agent selbst, manuell aus der List, run once:
Sub Initialize
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext
Dim temppass As String
Dim hidpass As String
temppass = doc.pass(0)
hidpass = doc.hid(0)
If Not doc.isnewnote Then
If temppass = hidpass Then
doc.pass = ""
Print "[http://localhost/Gliederung.nsf/Sender?OpenView]"
Else
continue=False
Print "[http://localhost/Gliederung.nsf/Sender?OpenView]"
End If
Else
doc.texteingabe=""
Print "[http://localhost/Gliederung.nsf/Sender?OpenView]"
End If
End Sub
Zunächst:
Du kannst - zur Wiederholung wie im ersten Thread von Dir zu diesem Thema - keine QuerySave, QueryOpen Events ansprechen...im Web...die triggern nicht los. Dafür gibt es das Event WebQueryOpen (vor generieren des HTML Codes) und WebQuerySave (und vor submit der Form) in der Maske, die einen Agent aufrufen.
Also was passiert?
Beim erstellen der Maske erscheinen sichtbar die Felder
TEXTEINGABE und HID. In Texteingabe kommt Dein Text rein, in HID Dein Passwort.
Bei Speichern wird der Agent erstmalig aufgerufen.
Es wird der Part
Else
doc.texteingabe = ""
Print "[http://localhost/Gliederung.nsf/Sender?OpenView]"
End If
ausgeführt. Er leert das Texteingabefeld. Der darin enthaltene Text wird in das berechnete, im EDITMODe versteckte Feld "HIST" übernommen. Dazu ist die Formel im HIST Feld verantwortlich, aber nur der erste Teil:
a:=@If( @IsNewDoc;texteingabe; !@IsNewDoc & pass=hid;texteingabe;hist);
...
a
Hier übernimmt HIST den Inhalt von "texteingabe", da es sich um ein neues Doc handelt.
Über {Print "[http://localhost/Gliederung.nsf/Sender?OpenView]"} wird die Ausgangsansicht wieder aufgerufen (hier hardcodiert).
Nun editieren wir das Doc......das lasse ich zu...yep...nun werden die Felder
TEXTEINGABE und PASS eingeblendet. HID (das Feld mit dem Passwort) ist versteckt und wird auch nicht im HTML Code angezeigt! Der User kann nun etwas neues eingeben (oder aus dem Feld HIST den Inhalt kopieren und verändern...dazu dann eben das Hide When komplett für HIST rausnehmen...ist ja eh nicht editierbar). Aber, er muß ins Feld PASS sein Passwort eingeben, was er vormals bei der Erstellung des Docs verwendet hat.
Nun triggert beim Speichern wieder der WebQuerySave los. Nunmehr wird dieser Teil im LS ausgeführt:
If Not doc.isnewnote Then
If temppass = hidpass Then
doc.pass = "" Print "[http://localhost/Gliederung.nsf/Sender?OpenView]"
Else
continue=False Print "[http://localhost/Gliederung.nsf/PÖSEPÖSE.htm]"
End If
Wenn der Feldinhalt vom PASS Feld mit dem versteckelten Feldinhalt von HID übereinstimmt, wird das PASS Feld fürs nächste Editieren geleert (wäre ja sonst ziemlich...öhhhh..ääääähhh....dooof wenns stehenbleiben würde...) und die Ansicht mit den Docs aufgerufen. Wenn nicht, wird eine pöse.htm aufgerufen und das Speichern abgebrochen.
Die Formel im Feld HIST wird natürlich auch getriggered und zwar der Part:
{a:=@If( @IsNewDoc;texteingabe;
!@IsNewDoc & pass=hid;texteingabe;
hist);
@If(!@IsNewDoc & pass!=hid;
@SetField("texteingabe";"");void);
a}
1. wenn es kein neues Doc ist und Pass = Hid ist, übernimmt "HIST" den neuen Inhalt von "Texteingabe". Wenn nicht, bleibt HIST gleich.
2. zusätzlich, wenn pass <> hid ist, wird das Feld "Texteingabe" geleert....was im nachhinein eigentlich net nötig ist, da das Doc ja eh nicht gespeichert wird....doch..normalerweise sollte ich das gleiche Doc erneut aufrufen....na ja, egal...
Yep, das wars, was Du wolltest.
Ach soo..in die Maske in HTML HEAD komt folgende Formel rein, um das Caching auszuschalten, was beim Testen ja Sinn macht (sonst siehste net die Ergebnisse/Änderungen gleich..mußt dann manuell Refresh machen...wollen wir doch vermeiden)
"<META HTTP-EQUIV=\"expires\" content=\"Saturday, 31-Dec-89 06:30:00 GMT\"><META HTTP-EQUIV=\"Pragma\" CONTENT=\"no_cache\">"