DBLookup in Lotusscript

  • Hallo zusammen,


    ich soll einen DBLookup Befehl in LotusScript umschreiben, hatte schon eine funktionierende Lösung in der ich Evaluate nutze, soll es jedoch nun auf einem anderen Weg, also mit den LotusScript-eigenen Möglichkeiten machen.


    Habe so angefangen:


    Call s.SetEnvironmentVar(Server, "ELS_DefServ")
    Call s.SetEnvironmentVar(Data, "ELS_DefData")


    Was ist nun der nächste Schritt? Gibt es eine Möglichkeit diese Zeile:



    Server := @Environment("ELS_DefServ");
    Data := @Environment("ELS_DefData");
    @DbLookup(""; Server : Data; "SCF"; @Environment("PSS_Language") + "SAPMaterialGroup"; 2)



    Mit GetDocumentByKey oder ähnlichem zu realisieren?

  • Bei meiner Internetrecherche werde ich leider nicht schlau is dieser Funktion, da ein DBLookup meist mit Evaluate vollzogen wird. Im Designer finde ich in der Hilfe nur GetDocumentByKey -Beispiele, bei denen auf die Current Database zugegriffen wird, meine benötige Datenbank liegt jedoch nicht in der selben.

  • Dann musst du dir davor eben die entsprechende Datenbank holen, indem du ein NotesDatabase Objekt für die Datenbank, die du brauchst, erzeugst.


    Du solltest dir mal das Domino Klassenmodell anschauen. Da werden genau diese Fragen beantwortet

    • Offizieller Beitrag

    Anstelle von GetDocumentByKey würde ich getAllDocumentsByKey verwenden.
    An eine andfer DB kommst du mit NotesSession.GetDatabase.


    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

    • Offizieller Beitrag

    sehe ich anders, weil ein DBLookup als Suche alle Dokumente, die dem Key entsprechen zurückgeben.


    Damit müssen im Script ggf. auch alle Dokumente zurückkommen.


    Wird nur ein Dokument erwartet, geht getDocumentByKey natürlich auch.


    Alternativ geht auch notesSession.Evaluate


    Gruß
    Dirk

    • Offizieller Beitrag

    naja die Frage war

    Zitat

    ich soll einen DBLookup Befehl in LotusScript umschreiben, ...

    und ein GetDocumentByKey liefert eben nicht das gleiche Ergebnis (nicht den gleichen Inhalt!) wie ein DBLookup. Im Gegensatz zu einem GetAllDocumentsByKey, da wird eine NotesDocumentCollection mit den Dokumenten zurückgegeben, die in der verwendeten Ansicht mit dem entsprechenden Schlüssel in der ersten sortierten Spalte angezeigt werden.


    In dem Ausgangspost wird auch nicht nach einem Dokument gefragt, sondern nach einer Alternative von @DBLookup im Script.


    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

  • Na ja umschreiben muss ja nicht heissen, daß man das ganze dann nicht auch gleich auf den jeweiligen Zweck optimiert.


    Dann müsstest du aber z.B. auch noch dazu sagen, daß der zweite Parameter dann auf True gesetzt sein muss, denn sonst ist das Ergebnis bei GetAllDocumentsByKey auch wieder anders als bei DBLookup

  • hi,


    ich würde auch das beispiel von diali nehmen, alleine schon aus erfahrungswerten...alternativ ist der vorschlag von taurec nicht falsch, aber ebend nur wenn genau ein dokument erwartet wird, di möglichkeit nutze ich aber nur für einwegfunktionen...wie gesagt dialies weg ist der bessere meiner meinung nach, da man noch diverse abfragenprüfungen machen kann...kleines code beispiel, wie sie auch in der hilfe zu finden sind...
    #######################
    dim session as new notessession
    dim db as notesdatabase
    dim col as notesdocumentcollection
    dim doc as notesdocument
    dim neudoc as notesdocument
    dim view as notesview
    dim i as integer


    ....


    'Hier wird die neue Datenbank geholt
    set neueDB as new notesdatabase( Server, Datenbank)
    'hier holen wir uns die Ansicht, für die Suche (wie in @DBLookup)
    set view = neueDB.getview(Ansichtenname)


    'alle Dokumente mit dem schlüssel holen
    set col = view.getalldocumentsbykey( Schlüssel , true)
    'Prüfung haben wir etwas?
    if col.count < 1 then
    msgbox "Nichts gefunden"
    exit sub
    end if
    for i = 1 to col.count
    set neudoc = col.getnthdocument(i)
    ......
    next
    ....
    end sub
    ##################


    ich hoffe ich konnt ein wenig helfen

  • entscheidend ist vor allem der zweite parameter -> true!!!
    ansonsten wird über script evtl. ein 'ähnliches' ergebniss zurückgeliefert


    dim s As New NotesSession


    set db = s.CurrentDatabase 'aktuelle datenbank
    oder
    set db = s.GetDatabase(server, filepath) 'beliebige datenbank


    set v = db.GetView(view)


    key = "suchstring"


    set col = db.GetAllDocumentsByKey(key, True) 'document collection
    oder
    set note = db.GetDocumentByKey(key, True) 'notes document

    bunt ist das dasein und granatenstark. volle kanne hoshi's!


    IBM Certified Advanced System Administrator (R5, D6, D7)
    IBM Certified Advanced Application Developer (R5, D6, D7, D8)