Personendokument auslesen

  • Hallo zusammen,


    Notes 6.5.3


    Habe mir nachfolgenden Code mühselig zusammengesucht:


    Dim db As NotesDatabase
    Dim acl As NotesACL
    Set db = New NotesDatabase( "", "alarm.nsf" )

    Set acl = db.acl
    Set acle = acl.GetFirstEntry

    While Not (acle Is Nothing)
    Msgbox(acle.name)

    Set acle = acl.GetNextEntry(acle)
    Wend


    Der Code liest alle in die ACL eingetragenen User der Datenbank alarm.nsf aus.
    Jetzt möcht ich zu dem User das zugehörige Personendokument in der Server-names.nsf suchen und dort den Namen seiner (die des Users) mail-nsf-Datei ausgeben bzw in eine Variable setzen lassen. wie funzt das?

  • Du öffnest die View "($VIMPeople)", suchst nach dem Namen nimmst das gefundene Dokument und greifst dann den Inhalt des Feldes "MailFile" ab

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hi,


    soetwas habe ich vor einigen Tagen schon einmal gefragt:


    Mailfile eines Users ermitteln


    wenn dur wirklich nur das MailFile des Users ermitteln willst, geht das über die @NameLookup Funktion relativ gut.


    Als Parameter übergibst du den Namen des Users und das gewünschte Feld.


    So kannst du z.B. den Server ermitteln:


    varMailServer = Evaluate("@NameLookup([NOSEARCHING]; 'Hans Tester'; 'MailServer')")


    Weitere Beispiele findest du in der Hilfe.

  • hat eigentlich schon mal jemand ne passende klasse geschrieben?
    so nach dem motto:


    dim person As New NotesUser('username')


    wenn ja, bitte mal hier posten ...

    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)

  • hallo ralph,
    die Zeile ---> varMailServer = Evaluate("@NameLookup([NOSEARCHING]; 'Hans Tester'; 'MailServer')")


    ist LS

  • Morgen Ralph,


    wie dnotes schon sagte, das ist LotusScript.


    Mit Evaluate ist es möglich einige Formelbefehle in Script auszuführen. Solltest du dir mal anschauen. Ermöglicht weitere tolle Sachen. ;)

    • Offizieller Beitrag

    ne Klasse habe ich nicht, ist aber auch nicht soviel Code.


    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

  • So jetzt hab ich was zusammen gebastelt. Es funzt aber nicht ganz.
    Problem: in acle.name steht der Name des jeweiligen Users, der auf die Datenbank alarm.nsf Zugriffsrechte hat.
    Mit
    Set doc_names = view_names.GetDocumentByKey (acle.name, True)
    möchte ich nun mittels des Views das Mailfile für den User auslesen. Und das klappt nicht. Liegt wohl daran, dass acle.name nicht als Variable behandelt wird sondern als Objekt. Wie bekomm ich jetzt den Inhalt von acle.name richtig in den obigen Befehl? Hoffe, dass das ganze dann funzt.



    Dim db As NotesDatabase
    Dim acl As NotesACL
    Set db = New NotesDatabase( "", "alarm.nsf" )
    Dim doc As NotesDocument
    Set acl = db.acl


    Dim session As New NotesSession
    Dim db_names As New NotesDatabase("","")
    Call db_names.OpenWithFailover("BV_BY_2","names.nsf")
    Dim doc_names As NotesDocument

    Set acle = acl.GetFirstEntry
    If Not db_names Is Nothing Then
    If db_names.IsOpen Then
    Set view_names = db_names.GetView("($VIMPeople)")
    If Not view_names Is Nothing Then

    While Not (acle Is Nothing)

    Set doc_names = view_names.GetDocumentByKey (acle.name, True)

    If Not doc_names Is Nothing Then

    Msgbox(doc_names.GetItemValue ("mailfile")(0))
    Set acle = acl.GetNextEntry(acle)
    End If
    Wend
    End If
    End If
    End If

  • acle iss ein Objekt vom Typ NotesACLEntry.. das stimmt so weit. Dann schauste in der Hilfe nach, welche Eigenschaften dieses Klasse so zu bieten hat...und wirst hoffentlich feststellen, dass das irgendwie mit acle.name klappen koennte. Das haste ja auch geschafft.
    Nur sollteste aufpassen, ob das Objekt doc_names erzeugt wird. Schau Dir mal die Schreibweise an.

    • Offizieller Beitrag

    die Schreibweise muss genau übereinsteimmen. Schau mal im Debugger nach, was acle.Name liefert. Und dann schau mal in die Ansicht "($VIMPeople)".


    Falls Du Namen in der ACL nur mit Vorname und Nachname eingetragen hast oder eventuell Gruppen verwendest, dann wird doc_names leer bleiben.



    Gruß
    Dirk

  • Mir kommt es fast so vor, als wüstet Ihr Drei die Lsg. ;)


    Das Objekt doc_names wird nicht generiet. Es bleibt leer.
    Die Schreibweise von acle.Name und dem View ist jeweils CN=Vorname Nachname/O=Organisation(so weit ich das jetzt sehen konnte)



    "Schau Dir mal die Schreibweise an." --> damit kann ich jetzt nix anfangen.

    • Offizieller Beitrag

    da liegt der Fehler.


    Acle.name liefert "CN=Vorname Nachname/O=Organisation"
    in der Ansicht steht aber "Vorname Nachname/Organisation".


    Aus diesm Grund bin ich den Weg über NotesName gegangen.


    "CN=Vorname Nachname/O=Organisation" und "Vorname Nachname/Organisation" sind unterschiedliche Schreibweise bzw. Strings.


    Im View steht in der 1. sortierten Spalte: "@Name([color=CC0000][Abbreviate][/color]; @Subset(Fullname; 1))". Dies liefert "Vorname Nachname/Organisation".


    Gruß
    Dirk

  • Wenn's so weiter geht, dann wird es im Händchenhaltmodus enden ;)


    Der Code:
    test = Evaluate("@name([Abbreviate]; @subset(acle.name;1))")


    liefert als Ergbnis: "" und nicht 'Vorname Nachname/Organisation'.
    Warum?

    • Offizieller Beitrag

    wo hast Du die Zeile

    Zitat

    test = Evaluate("@name([Abbreviate]; @subset(acle.name;1))")

    her?
    Die habe ich in den Beiträgen zu diesem Thema noch nicht gelesen.


    Aber diese Zeile hat das Problem, das Du Script- und Formel-Code ineinander baust. acle.name ist Script und der Rest @Function.


    Probiers mal so:
    test = Evaluate("@name([Abbreviate]; @subset(""" & acle.name & """;1))")


    */edit
    Sorry hatte noch die Hochkommas vergessen.


    Gruß
    Dirk

  • Woher ich die Zeile habe? Selber irgendwie zusammengebastelt. aber Du hast Recht. Ist eine Vermischung von zwei Sprachen. Das muss natürlich ersichtlich sein.


    Mit:
    Set doc_names = view_names.GetDocumentByKey (Evaluate("@name([Abbreviate]; @subset(""" & acle.name & """;1))"), True)


    funktioniert es. Er liest brav das Mailfile aus. Es ist nicht zu fassen. Ich danke Dir!

    • Offizieller Beitrag

    also ich würde die Variante ohne Evaluate bevorzugen.


    taurec
    :D Glückwunsch zur 3000
    :laola:


    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