Ajax-Programmierung - Teil 2

Rückgabewerte ermitteln

An Stelle des PHP-Skripts zur Ermittlung des Rückgabewerts wollen wir in unserer Lotus Notes/ Domino-Umgebung einen LotusScript- Agenten verwenden. Wie dieser aufzurufen ist, haben wir gerade gesehen. Bleibt die Frage, wie der Agent auf den im URL enthaltenen Parameter zugreifen kann.

Im Notes-Client ist es nicht möglich, einem Agenten beim Start einen oder mehrere Parameter zu übergeben. In unserem Fall erfolgt der Aufruf jedoch über das Web. Und hier ist es möglich, auf den URL, welcher zum Start des Agenten aufgerufenwurde, zuzugreifen. Beim Start des Agenten wird von der Session ein virtuelles Dokument für den Agenten erzeugt. Auf dieses können Sie über die Eigenschaft DocumentContext des ObjektsNotesSession zugreifen.

Dim agentDoc As NotesDocument
Set agentDoc = se.DocumentContext

Dieses Dokument enthält sowohl die Werte aller CGI-Variablen als auch den Inhalt des Query_String in gleichnamigen virtuellen Feldern. Beim Wert Query_String handelt es sich um den Teil des URL hinter dem Fragezeichen, also

OpenAgent&<ParamName>="+<ParamWert>

Diesen Wert können wir auslesen und einer Variablenzuweisen:

Dim queryString As String
queryString =
agentDoc.GetItemValue("Query_String")(0)

Da wir in unserem Beispiel nur einen Parameter verwenden, ist das dadurch notwendige Parsen des Ausdrucks recht einfach. Wir müssen nur den Textteil ermitteln, der hinter dem Gleichheitszeichen steht. Dazu deklarieren wir eine weitere Variable und speichern darin das Ergebnis der Trennzeichens in mehrere Bereiche

Dim queryStringParam
queryStringParam = Split(queryString, "=")

und speichert sie in einem Feld von Typ String. Das erste Element im Feld enthält danach den Text vor, das zweite Element den Text nach dem Gleichheitszeichen. Dieser ist der übergebene Parameterwert, den wir einer dritten Variablen zuweisen. Da Felder in LotusScript mit dem Wert 0 beginnen, greifen wir auf das Element <Feldname>( 1) zu:

Dim suchString As String
suchString = queryStringParam(1)

Bei der Verwendung mehrerer Parameter ist deren Ermittlung aus dem Query_String etwas aufwendiger, unter zu Hilfenahme der LotusScript- Funktionen zur Zeichenkettenbearbeitung aber möglich.

Der restliche Programmcode des Agenten (Listing 3) entspricht der üblichen Vorgehensweise, um ein Dokument in einer Ansicht zu finden. Über die Session wird auf die aktuelle Datenbank zugegriffen [1]. Diese ermöglicht den Zugriff auf eine Ansicht [2]. Die Ansicht wird Dokument für Dokument durchlaufen [3]. Dabei wird jedes Dokument auf das Vorhandensein des Suchstrings in dem Feld Buchkuerzel untersucht [4]. Entspricht der im Feld gespeicherte Wert dem Suchstring, wird mit der Anweisung Print der Name und die Abarbeitung des Agenten beendet [5]. Wurde nach dem Durchlaufen aller Dokumente kein passendes Buch gefunden, wird eine entsprechende Meldung als Rückgabewert der Anfrage geliefert [6].

Sub Initialize
Dim se As New NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
Dim doc As NotesDocument
Dim agentDoc As NotesDocument
Dim queryString As String
Dim queryStringParam
Dim suchString As String
Dim gefunden As Boolean
gefunden = False
Set agentDoc = se.DocumentContext
queryString = agentDoc.GetItemValue("Query_String")(0)
queryStringParam = Split(queryString, "=")
suchString = queryStringParam(1)
Set db = se.CurrentDatabase [1]
Set vw = db.GetView("Buecher") [2]
Set doc = vw.GetFirstDocument [3]
While Not doc Is Nothing
If suchString = doc.GetItemValue("Buchkuerzel")(0) Then [4]
Print doc.GetItemValue("Autor")(0) [5]
gefunden = True
Exit Sub
End If
Set doc = vw.GetNextDocument(doc) [3]
Wend
If Not gefunden Then [6]
Print "Kein passendes Buch gefunden"
End If
End Sub

Bei einem Test der Funktion im Browser ist kein optischer Unterschied im Vergleich zur Umsetzung mit der HTML-Seite und dem PHPSkript festzustellen (Bild 4). Lediglich die minimal größere Antwortzeit lässt ahnen, dass im Hintergrund nicht ein schneller Apache-Server steht, sondern ein Domino-Server arbeitet.

Bild 4: Die fertige Ajax-Anwendung im Browser.
Bild 4: Die fertige Ajax-Anwendung im Browser.

Wie geht es weiter?

Bis hierher haben wir uns eigentlich Aja und nicht Ajax angeschaut – XML ist noch nicht vorgekommen. Im nächsten Artikel wird sich das ändern. Nachdem wir wissen, wie wir die zugrunde liegenden Techniken sowohl in einer reinen HTML-Seite als auch in einer Notes/Domino- Umgebung nutzen, schauen wir uns an, wie und wo wir XML einsetzen können. Im Anschluss daran beschäftigen wir uns mit der Manipulation der Webseite unter Verwendung des Dokument Objekt Model (DOM) unter Berücksichtigung der Ergebnisse der Ajax-Anfrage.