Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Markus am 10.07.02 - 20:25:51

Titel: Umfangreiche Eingabevalidierung im Web
Beitrag von: Markus am 10.07.02 - 20:25:51
Hallo,

vielleicht kann mir jemand helfen.  :)
Ich habe das Problem, dass ich im Web umfangreich Eingabevalidierungen vornehmen muss. Bei Fehlern soll es dann zu einem Dialog mit dem Benutzer kommen. Da die Eingabevalidierungen nicht nur von den aktuellen Feldinhalten, sondern auch von einer Reihe von Backend-Objekten abhängig sind, ist das ganze in einem LS-Agenten angesiedelt, der im WebQuerySave aufgerufen wird. Dort habe ich es allerdings bisher noch nicht hinbekommen, einen Dialog im Browser anzuzeigen. Meine Versuche in der Richtung:

Print "<SCRIPT LANGUAGE=JavaScript>"
Print "Arg1 = document.forms[0].Feld1.value"
Print "Arg2 = document.forms[0].Feld2.value"
Print "alert("Fertig "+ Arg1 + Arg2 ")"
     
Print "</SCRIPT>"

wurden bisher ignoriert.  :P Der Agent führt allerdings dahinterstehenden Code korrekt aus.  :)
Irgendwie fehlt mir auch noch das Verständnis, wo hier Anführungsstriche hinkommen und wo nicht  ???
Falls mir jemand helfen kann, wäre ich echt dankbar.      
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: grosses.manitu am 11.07.02 - 10:59:51
Habe keine Ahnung von Web und Notes, aber hast es schon einmal so versucht:
     Print "alert(""Fertig ""+ Arg1 + Arg2  + "")"

?
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: Till_21 am 11.07.02 - 11:46:06
Verwende für die "Notes-Anführungsstriche" die Pipe | ...

gruss till
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: Markus am 11.07.02 - 18:20:03
Auch
Print "alert(""Fertig ""+ Arg1 + Arg2  + "")"  
wird vom Browser ignoriert.

Till, welches sind die Notes-Anführungstriche?
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: grosses.manitu am 12.07.02 - 08:23:31
Wie sieht den der Sourcecode aus, wenn Du die Seite im Browser aufrufst? Einfach nur den Teil mit dem alert.
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: Markus am 12.07.02 - 09:52:24
Der Source-Code enthält keinen Teil mit dem alert. Zumindest nicht bevor und auch nicht nachdem der Agent gelaufen ist. Dies ist nach meinem Verständnis auch korrekt so, da dieser Teil ja dynamisch zur Laufzeit generiert wird. Nachdem der Agent gelaufen ist, sollte wieder die alte Seite angezeigt werden. Vielleicht habe ich aber auch die Wirkungsweise von "Print" nicht verstanden ...

Zum Print statement steht in der Domino Designer Hilfe folgendes:
"...
If you are in Lotus Notes, note that the Print statement writes to the following:
The status bar when executing on a Notes client in non-debug mode.
The status bar and output window when executing on a Notes client in debug mode.
NOTES.LOG when executing on a Domino server.
If the request is from the Web, Print will be re-directed to the source. Print can be used to dynamically generate a Web page via QueryOnEvent"

In der Hilfe findet sich auch ein Beispiel eines Agenten, dessen Code in etwa meinem entspricht:

9. This LotusScript agent terminates by sending JavaScript to the browser. The JavaScript displays a message then loads the "Main View."

Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim context As NotesDocument
   Dim arg As String
   Set context = s.DocumentContext
   arg = s.DocumentContext.Query_String(0)
   p1 = Instr(arg, "&")
   If p1 = 0 Then
       Print "Need argument 'open' or 'closed'"
   Else
       arg = Lcase(Mid$(arg, p1 + 1))
       If arg <> "open" And arg <> "closed" Then
           Print "Argument must be 'open' or 'closed'"
       End If
   End If
   Set db = s.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   Do While Not(doc Is Nothing)
       doc.Status = arg
       Call doc.Save(False, True)
       Set doc = dc.GetNextDocument(doc)
   Loop
   Print "<SCRIPT LANGUAGE=JavaScript>"
   Print "alert(""Status changed to '" & arg & "' in all documents"")"
   Print "location.href = ""/Web+test.nsf/Main+View?OpenView"""
   Print "</SCRIPT>"
End Sub9.      This LotusScript agent terminates by sending JavaScript to the browser. The JavaScript displays a message then loads the "Main View."
Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim context As NotesDocument
   Dim arg As String
   Set context = s.DocumentContext
   arg = s.DocumentContext.Query_String(0)
   p1 = Instr(arg, "&")
   If p1 = 0 Then
       Print "Need argument 'open' or 'closed'"
   Else
       arg = Lcase(Mid$(arg, p1 + 1))
       If arg <> "open" And arg <> "closed" Then
           Print "Argument must be 'open' or 'closed'"
       End If
   End If
   Set db = s.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   Do While Not(doc Is Nothing)
       doc.Status = arg
       Call doc.Save(False, True)
       Set doc = dc.GetNextDocument(doc)
   Loop
   Print "<SCRIPT LANGUAGE=JavaScript>"
   Print "alert(""Status changed to '" & arg & "' in all documents"")"
   Print "location.href = ""/Web+test.nsf/Main+View?OpenView"""
   Print "</SCRIPT>"
End Sub
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: grosses.manitu am 12.07.02 - 10:09:02
Moment,

Zitat
If the request is from the Web, Print will be re-directed to the source. Print can be used to dynamically generate a Web page via QueryOnEvent"


klar muss der aler im Sourcecode sichtbar sein. Mit dem print statement generierst Du ja dynamisch eine Webseite....
... Also Du rufst doch eine Seite vom Browser auf, oder?
Und dieser wiederum fuer Deinen Agent aus, oder?
Und nachdem dieser gelaufen ist, sollte doch eine Webseite praesentiert werden und dieser beinhaltet Sourcecode....
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: Markus am 12.07.02 - 17:04:46
... aber nicht den alert ...
Titel: Re: Umfangreiche Eingabevalidierung im Web
Beitrag von: Markus am 18.07.02 - 18:15:12
Um eine alte Diskussion fortzuführen:
Der "alert" ist aufgetaucht. Merkwürdigerweise verarbeitet der Agent die Print-Befehle nicht, wenn ich das Dokument mit @Command([FileSave]) abschicke.
Lege ich dagegen JavaScript document.forms[0].submit() hinter die Schaltfläche wird der Code ordnungsgemäss ausgeführt. ??? (Das mit der Pipe war übrigens ein sehr guter Tip. Danke nochmal Till. ;))
Allerdings tritt nun das Problem auf, dass ein neues Dokument im Browserfenster angezeigt wird. Mit Hilfe von history.go(-1) kommt man wieder zurück, jedoch scheint das ganze nur zu laufen, wenn man den Code in eine Zeile packt:

Print "<SCRIPT LANGUAGE=JavaScript>" "history.go(-1);"&_
| win=open(location.href=  "/database.nsf/Antwort?OpenForm", "Newwin" , "screenX=460 ,screenY=460 ,width=320,height= 150"); |&_
     | doc = win.document ;| &_
"</SCRIPT>"

läuft. Das ganze in mehrere Print-Anweisungen gepackt führt den history-Befehl erst aus, wenn man das Fenster wieder schließt. Im Moment würde mich noch interessieren, ob es eine Möglichkeit gibt, die Werte im Print-Teil verwendeter JavaScript-Variablen wieder an LS-Variablen zu übergeben.

Gruss Markus