Frage zur NotesDocumentCollection

  • Hallo,


    in meinem vorhergehenden Beitrag habe ich angesprochen, dass ich eine Kundenberatung programmiere und jeden Kunden bzw. jedes Kundendokument der Warteschlange mit einer eindeutigen ID versehe.


    Ich habe mich belesen und bin auf die NotesDocumentCollection gestossen, bin mir allerdings nicht sicher ob das der richtige Weg ist.


    Was genau passiert denn bei dieser Anweisung:


    Set analysenColl = aktuelleDB.Search(|Form = "Kunde" & ID = "| & id & |"|, Nothing, 0)


    Set analyseDoc = analysenColl.GetFirstDocument


    Welche Rolle spielen hier die '|' Seperatoren??


    Danke!
    Mathias

    • Offizieller Beitrag

    |Form = "Kunde" & ID = "| & id & |"|
    die |-Symbole sind nur Stringeinfassungen. Du könntest auch schreiben:
    "Form = ""Kunde"" & ID = """ & id & """""
    oder
    {Form = "Kunde" & ID = "} & id & {"}


    Set analysenColl = aktuelleDB.Search(|Form = "Kunde" & ID = "| &
    id & |"|, Nothing, 0) .... sucht alle Dokument nach der angegebenen Formel und behält diese als Dokumentensammlung in einem Objekt


    Set analyseDoc = analysenColl.GetFirstDocument .... das erste Dokument in der Sammlung wird als Objekt analyseDoc zur verfügung gestellt.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Danke für die schnellen Antworten! :)


    Im Prinzip dürfte ja dann nur ein Dokument in der Collection stehen, da wie bereits gesagt, jedes Dokument eine eindeutige ID besitzt.
    Speicher ich nun das Ganze:


    Call aktuellesDoc.Save(True, True) müsste ja die ID an den Masken-Namen angehangen werden. Oder?



    Mein eigentliches Problem ist, dass ja über den Befehl "document.getElementById("Messagebox")" alle Browserfenster der Maske Kunde angesprochen werden. Da "document" sich nunmal auf alle Browserfenster eine Maske bezieht.


    Ich möchte aber erreichen, dass jeder Kunde einen eindeutige URL besitzt, was man ja über das hinzufügen einer ID erreichen kann.
    bspw.:


    http://localhost/sav/beratungstool.nsf/kunde&4711?OpenForm


    var url = '/' + $('WebDBName_').value + '/kunde&4711?OpenForm';


    --> url.getElementById("Messagebox")



    Ja bloß wie programmiert man das. Bin langsam am :cry:

  • Wenn Du weisst, dass es jeweils nur ein Dokument gibt mit einer eindeutigen ID ist es ziemlich Banane, hierfuer eine Collection zu bilden. GetDocumentbykey wuerde ich da vorziehen.


    Deine Url musst Du etwas anders aufbauen.
    /localhost/sav/beratungstool.nsf/kunde?OpenForm&ID =4711


    Ich frage mich nur.....soll ueber diese Url nicht ein bestehendes Dokument geoeffnet werden oder willst Du tatsaechlich ein neues Dok erstellen.
    Und schliesslich noch...wo tauchen denn die Links zu den Dokumenten auf???

  • Stimmt die URL muss natürlich so aussehen! Danke.


    Sobald der Berater frei wird, soll ja wie bereits beschrieben nur bei dem Kunden mit der ID=4711 die NachrichtenBox erscheinen (bspw. sichtbarmachen einen div-elements über style.visible....).




    Am Ende eines Gesprächs klickt der Kunde auf "disconnect". Ein onload-Event ruft dabei eine JavascriptFunktion auf, die über einen Agenten den Kunden ermittelt, der ganz oben in der Warteschlange bzw. in der VIEW steht (das ist der am Längsten wartende Kunde mit der ID=4711).


    Der Agent liest dabei dessen ID aus und gibt sie an die Javascript-Funktion zurück die damit eine URL erzeugen soll:


    url = /localhost/sav/beratungstool.nsf/kunde?OpenForm&ID =4711
    url.ElementById("MessageBox")


    Das div-Element der Maske Kunde mit der ID 4711 wird nun adressiert und sichtbar gemacht. Der Kunde 4711 kann nun über die Messagebox mit dem Berater texten.


    D.h. über die URL soll ein bestehendes Dokument geöffnet werden.
    Die Links zu den Dokumenten tauchen in der Javascript - Funktion auf.


    Nochmal Danke für die Unterstützung! :)

    • Offizieller Beitrag

    wenn es das erste Dokument in der Ansicht sein soll, warum dann suchen?


    benutze die View (NotesDatabase.GetView("Name der View")) und dann gleich das Dokument holen (NotesView.GetFirstDocument).


    Oder habe ich da was falsch verstanden?


    Gruß
    Dirk

    • Offizieller Beitrag

    Ok und wie hätte ich dann

    Zitat

    ... der ganz oben in der Warteschlange bzw. in der VIEW steht ...

    verstehen sollen / müssen / können?


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Man sollte nicht alles so woertlich nehmen. ;)
    Nach den Suchkriterien zu urteieln sucht er ein Dokument mit einer ganz bestimmten ID...nicht das erste Dokument in der Ansicht.
    Da diese Suche bei eindeutigen ID´s auch nur ein Dokument an die Collection uebergibt, nimmt er das oberste Dokument aus der Ansicht.
    Die ansicht beinhaltet ja nach der Suche nur noch das eine Dokument. Aber erst nach der Suche.

  • Also meine VIEW zeigt die Kunden sortiert an. Ganz oben in der VIEW steht der Kunde der am längsten wartet:


    Kunde___ID____Time
    1______4711___14:13:13
    2______1582___14:14:01
    3______3423___14:15:04
    n______xxxx___xx:xx:xx


    Über VIEW.getFirstDocument greife ich mir jetzt also den obersten Kunden bzw. das FirstDocument und lese da die ID aus. Diese ID bekommt nun meine Javascript Funktion die das div-Element im Browserfenster des Kunden 4711 sichtbar macht.


    Wäre ja zu schön um wahr zu sein wenn das funktionieren würde :)

  • Sorry wenn ich mich etwas mißverständlich ausgedrückt habe. Ich meine natürlich das erste Dokument. Ich wollte Euch damit auf keinen Fall in die Irre führen falls Ihr das jetzt denkt!


    Die Collection wollte ich nehmen, weil ich dachte das über 'Form=ID' jedes Dokument der Kunden-Maske eine eindeutige ID bekommt, was natürlich Schwachsinn ist...


    OK, ich ermittel nun das erste Dokument.


    Mein Agent dazu sieht folgendermaßen aus:



    Code
    [..]
    Set QueueDoc = aktuelleView.GetFirstDocument
    If QueueDoc.HasItem("ID") Then
        Set item = QueueDoc.GetFirstItem("ID")
    End If
    [..]


    Wie übergebe ich denn nun die ID an meine Javascript Funktion?


    Ist es denn nicht sinnvoller einfach über "ReadViewEntries" die ID auszulesen?

  • Die ID steht doch in einem Feld des Dokumentes drin. Also:


    [..]
    Set QueueDoc = aktuelleView.GetFirstDocument
    If QueueDoc.HasItem("ID") Then
    'Set item = QueueDoc.GetFirstItem("ID")
    ID = QueueDoc.ID(0)
    End If
    [..]


    Angenommen, das Feld heisst auch ID, dann steht nun in der Variablen ID Deine ID drin

  • ich :hammer: bin so doof.... :D


    das mit der id an den url anhängen ist vollkommen falsch. mit dem url wird ja nicht der client adressiert sondern der server. von daher bringt mir das gar nichts.


    ich habe nun eine funktion geschrieben, die automatisch alle 5 sekunden in die view schaut. diese funktion überprüft die id und checkt den berater status.


    Kunde___ID____Time_____Berater
    1______4711___14:13:13__frei
    2______1582___14:14:01
    3______3423___14:15:04
    n______xxxx___xx:xx:xx


    steht in dem 1. dokument "frei" und stimmt die id mit der (globalen) variablen id des kunden überein (==4711), kann der kunde mit dem berater verbunden werden. das erste dokument wird aus der warteschlange entfernt.


    Kunde___ID____Time_____Berater
    1______1582___14:14:01
    2______3423___14:15:04
    n______xxxx___xx:xx:xx


    funktioniert einwandfrei. manchmal liegt die lösung so nah :)

  • Zitat
    Code
    [..]
    Set QueueDoc = aktuelleView.GetFirstDocument
    If QueueDoc.HasItem("ID") Then
    'Set item = QueueDoc.GetFirstItem("ID")
    ID = QueueDoc.ID(0)
    End If
    [..]


    Angenommen, das Feld heisst auch ID, dann steht nun in der Variablen ID Deine ID drin


    Hmm ja in dem Agenten steht dann der Wert in ID drin. Aber wie bekomm ich denn nun den Wert von ID in meine Javascript-Funktion, in der ich Abgleiche ob die ID auf die des entsprechenden Kundens ist??

  • Keine Ahnung! :D


    Kannst Du nicht mit der JS-Funktion auf das Feld zugreifen????
    In der Art:


    window.document.forms[0].ID.value ??

  • das feld heisst ID und die variable id.


    d.h. window.document.forms[0].ID.value müsst richtig sein, erhalte aber die meldung: "has no properties". ID ist kein verstecktes feld.


    hier mal der agent:


    jetzt erhalte ich im log aufeinmal das die objektvariable nicht gesetzt ist. die view zeigt allerdings ein document an mit einer gesetzten ID. schon irgendwie seltsam....