Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet 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.
-
Habe keine Ahnung von Web und Notes, aber hast es schon einmal so versucht:
Print "alert(""Fertig ""+ Arg1 + Arg2 + "")"
?
-
Verwende für die "Notes-Anführungsstriche" die Pipe | ...
gruss till
-
Auch
Print "alert(""Fertig ""+ Arg1 + Arg2 + "")"
wird vom Browser ignoriert.
Till, welches sind die Notes-Anführungstriche?
-
Wie sieht den der Sourcecode aus, wenn Du die Seite im Browser aufrufst? Einfach nur den Teil mit dem alert.
-
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
-
Moment,
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....
-
... aber nicht den alert ...
-
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