Domino 9 und frühere Versionen > Entwicklung

Umfangreiche Eingabevalidierung im Web

<< < (2/2)

Markus:
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

grosses.manitu:
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"
--- Ende Zitat ---


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

Markus:
... aber nicht den alert ...

Markus:
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

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln