ok dann versuch ich mich mal an einer ausführlicheren beschreibung ;-)
ich versuche seit einiger zeit eine kundenberatung auf ajax basis unter notes domino zu realisieren. da ich noch anfänger in domino bin, komm ich leider oft an einen punkt wo ich nicht mehr weiter komme.
ich bin momentan dabei den beraterstatus (online oder offline) in der db zu hinterlegen. über ajax wird der status asynchron aus der db abgefragt und beim benutzer im (chat-)fenster angezeigt. zur zeit sieht meine status-view so aus:
online
offline
online
offline
online
usw...
unvorteilhaft ist das alle stati darin stehn, obwohl ich ja nur den letzten brauche...
jedenfalls parse ich das ganze dann und lese mittles dom-operation den letzten status aus, der beim kunden letztendlich angezeigt wird:
var requestedStatus = StatusXML.getElementsByTagName('text');
i = requestedStatus.length;
var StatusList = requestedStatus[i-1].firstChild.nodeValue;
problem ist das die datenbank allmählich immer größer wird und das parsen immerlänger dauert.
schön wäre es wenn der vorherige status in der db immer durch den aktuellen überschrieben werden würde und ich nur ein einziges dokument hätte in dem entweder online od. offline steht :-)
dann habe ich leider noch ein anderes problem. ich habe mehrere views.
wird nun der status in die db geschrieben. dann wird komischerweise in jeder view ein neues dokument angezeigt.
geht beispielsweise der privatkundenberater online bzw. offline wird bei dem businesskundenberater ein leeres dokument angelegt- wie kann das sein?
vg, mathias
also die js-funktion mit der ich den status an den agenten übermittel der den status in der db ablegt sieht folgerdermaßen aus:
function SaveBusinessBStatus(stat){
var saveBusinessBStatus = stat;
var url = '/' + $('WebDBName_').value + '/Status2?OpenAgent';
var postArguments = 'BusinessB=' + saveBusinessBStatus;
callServer('POST', url, false, 1000, [..] , postArguments);
}
der agent ist so aufgebaut:
[..]
Set aktuelleDB = session.CurrentDatabase
[..]
status2 = getPostParameter("BusinessB")
Set StatusDoc = aktuelleDB.CreateDocument()
StatusDoc.BusinessB = status2
If StatusDoc.Save(True, True) Then
Print |erfolgreich übertragen|
[..]
Die VIEW besitzt die Spalte Status mit dem Field "BUSINESSB".
@klauss: was genau meinst du mit "Select in den Views" ?
Bei View Selection habe ich nichts eingetragen.
@Thomas Schulte:
ich habe deinen rat befolgt und die übergabe an den agenten nun folgerdermaßen gestaltet:
function SavePrivatBStatus(stat){
var savePrivatBStatus = stat;
var berater = "berater";
var privatB = "Privatkundenberater";
var url = '/' + $('WebDBName_').value + '/Status?OpenAgent';
var postArguments = 'Berater=' + privatB + '&Status=' + savePrivatBStatus + '&Form=' + berater;
callServer('POST', url, false, 1000, [..], 'application/x-www-form-urlencoded', undefined, postArguments);
}
das feld "form" wird nun erzeugt. groß-/ und kleinschreibung scheint bei den feldwerten egal zu sein so wie es aussieht...
SELECT Form = "berater" funktioniert jetzt jedenfalls.
die view habe ich nach den beratern sortiert und categoried.
trotzdem werden nachwievor alle stati erfasst was mein eigentliches problem war und noch ist:
[Berater] [Status]
Businesskundenberater
offline
online
Privatkundenberater
online
offline
ich möchte allerdings nur den aktuellen status haben:
[Berater] [Status]
Businesskundenberater
online
Privatkundenberater
offline
der agent ist so aufgebaut:
[..]
Set aktuelleDB = session.CurrentDatabase
[..]
status2 = getPostParameter("BusinessB")
Set StatusDoc = aktuelleDB.CreateDocument()
StatusDoc.BusinessB = status2
If StatusDoc.Save(True, True) Then
Print |erfolgreich übertragen|
[..]
Dein Agent ist Falsch. Du erzeugst doch jedesmal ein neues Dokument mit aktuelleDB.CreateDocument.
Such dir mal View.GetdocumentByKey in der online Hilfe und schau dir da das Beispiel an. Dann sollte dir eigentlich ein Licht aufgehen warum das so wie du es jetzt machst nicht funktionieren kann.
so ich habe mich mal an die agentenprogrammierung gewagt. der agent zur aktualisierung des dokumenteninhaltes sieht nun so aus:
Sub Initialize
Dim session As New NotesSession
Dim aktuelleView As NotesView
Dim aktuelleDB As NotesDatabase
Dim StatusDoc As NotesDocument
Dim item As NotesItem
Dim status As String
Dim key As String
key = "Privatkundenberater"
Set aktuelleDB = session.CurrentDatabase
Set aktuelleView = aktuelleDB.GetView ("By Category" )
Set StatusDoc = aktuelleView.GetDocumentByKey (key )
status = getPostParameter("Status")
Set item = StatusDoc.ReplaceItemValue ("Status", status)
If StatusDoc.Save(True, True) Then
Print |erfolgreich übertragen|
Else
Print |Fehler beim Speichern aufgetreten.| ' Fehlermeldung
End If
End Sub
aus welchen grund auch immer funktioniert das ganze leider immer noch nicht.
der status wird nicht verändert... ::)
hmm irgendwie erhalte ich keine ausgabe :-[
If Not (Statusdoc Is Nothing) Then
Messagebox "$" & Statusdoc.GetItemValue ("Status"),, "Status"
Else
Messagebox "By Category " + key,, "Not found"
End If
der debugger läuft problemlos durch...