Domino 9 und frühere Versionen > Entwicklung

Dringend zB Queryopen in einer Form

<< < (2/5) > >>

Rob Green:
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\">"

adminnaddel:
@Rob_Green

Guten Morgen und vielen Dank für Dein Wunderwerk.
Ich bin jetzt am Arbeitsplatz und habe mir Dein Werk gerade ausgedruckt. Nun werde ich mich an die Geschiche ran machen und hoffe, daß ich das alles verstehen werde!
Gruß und ich melde mich

Rob Green:
hab dir was zugemailed...kannste als Vorlage nehmen...Maske Sender2 ignorieren, ist für was anderes gedacht.

Halt nur Ansicht Sender, Maske Sender (incl. Code im Webquerysave) und Agent "(empty)"

Schaus Dir gleich mal im Browser an, ob Du schlau wirst draus.

Ach ja, gibt es nicht irgendwo Webspace für Domino kostenlos zum Testen???

adminnaddel:
Hi,

zu1= Danke für die Mail, aber nun bin ich ja net @home
Frage: hast du sie jetzt noch griffbereit, könntest du sie  vielleicht jetzt an meine Firmenadresse schicken?

zu2= Ja gibt es
http://www.corefusion.net = 5MB free
http://www.free.dominoserver.de = 10MB free

Gruss

Rob Green:
danke,


und die Firmenadresse...mail mich mal an oder warte, was soll der der Kram, ich poste den Link hier....: http://www.basic-t.com/upload/Gliederung1.zip

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln