Hab bei der Entwicklung des serverseitigen Teils gemerkt, dass ich 2 Parameter beim Client vergessen habe. Einer ist sehr wichtig für Model View Controller (MVC).
"AjaxServlet",
{
method: 'get',
parameters: "action=" + action + " unid=" + unid + " cat=" + newCat,
onComplete: parseTransferin,
onFailure: showAjaxError
}
Vor allem das action= ist wichtig. Das MVC soll bewirken, dass ALLE Ajax Requests gegen eine serverseitige Anwendung von ein und demselben Agenten verarbeitet werden. Sonst müllt man die Anwendung mit Tonnen von kleinen Agenten voll.
Gut. Was passiert jetzt auf der Serverseite.
1. Die Serverseite nimmt eine Anfrage aus dem JavaScript entgegen.
2. verarbeitet diese
3. Schickt Daten im JSON Format zurück. XML ginge auch, aber JSON ist von JavaScript einfacher zu verarbeiten.
Wie verarbeitet der Notes Agent die Anfrage?
Das folgende hat übrigens noch kein fertiges Fehlerhandling.
Die Parameter werden als CGI Variablen an die URL des Agenten gehängt. Darum kümmert sich Prototype automatisch, wenn man parameters: wie oben schreibt.
Ein Agent sollte das so auslesen können:
Set docContext = s.DocumentContext
queryStr = docContext.getItemValue("QUERY_STRING_DECODED")
ist halt ne CGI Variable.
In queryStr sollte dann sowas stehen wie:
"?openAgent&action=changeCategory&cat=blueChips&unid_doc_cur=9093458034853045"
Die einzelnen name=wert Paare zwischen den & lassen sich durch diese einfache Funktion in eine leicht zu handhabende List-Struktur bringen:
Function webParamsAsList (inVal As String) As Variant
Dim firstAmper As Integer
Dim ret List As String
Dim arrNameValuePairs As Variant
Dim elemNameValuePair As String
Dim arrNameValuePair As Variant
Dim i As Integer
firstAmper = Instr(inVal, "&")
inVal = Right$(inVal, Len(inVal) - firstAmper)
arrNameValuePairs = Split(inVal, "&")
For i = 0 To Ubound(arrNameValuePairs)
elemNameValuePair = arrNameValuePairs(i)
arrNameValuePair = Split(arrNameValuePairs(i), "=")
ret(Lcase(arrNameValuePair(0))) = Lcase(arrNameValuePair(1))
Next
webParamsAsList = ret
End Function
Nun kommt der Kontroller. Da wird einfach nur der action-Parameter ausgelesen und in die entsprechende Funktion zur Weiterverarbeitung aufgerufen.
webParams = webParamsAsList(inVal)
resp = ""
If Lcase(webParams("action")) = "changecategory" Then
resp = processChangeCategory(s, webParams)
End If
Am Ende soll dann nur noch etwas an den Browser zurückgeliefert werden. Kommt später.