Domino 9 und frühere Versionen > ND9: Entwicklung

Email-Adresse aus dem Adressbuch auslesen mit Excel

(1/2) > >>

Chirin:
Im Rahmen meiner Arbeit mit Excel habe ich gleich wieder das nächste Problem.
Und zwar möchte ich, um Sucharbeit zu sparen, EMail-Adressen aus dem Notes-Adressbuch auslesen und direkt in Excel eintragen lassen.

Ich habe bislang leider nicht herausgefunden (was gleichzeitig meine Fragen sind),
- welcher Typ / Welche Klasse das Adressbuch ist
- wie ich ein Element / Kontakt im Adressbuch aufrufe
- GetItemValue oder FieldGetText oder was ganz anderes zum Vergleich mit dem Referenzwert aus Excel zu Vergleich korrekt ist
- ob ich uidoc (NOTESUIDOCUMENT) an dieser Stelle überhaupt brauche
- ob mir sonst noch was fehlt

Folgendes Skript dient derzeit als Grundlage:

--- Code: ---Private Function getMailInAdressbook(Kunde As String, Ansprechpartner As String) As String
    Dim s As NOTESSESSION
    Dim db As NOTESDATABASE
    Dim workspace As New NOTESUIWORKSPACE
    Dim uidoc As NOTESUIDOCUMENT
   
    'Set uidoc = workspace.CURRENTDOCUMENT
    Set db = s.GETDATABASE("server", "adressbuch.nsf")
   
    For Each _kontakt_ as _datentyp_ In _adressbuch_
    If Kunde = uidoc.FIELDGETTEXT("CompanyName") _
        And (LeftStr(Ansprechpartner, " ") = uidoc.GETITEMVALUE("Firstname")) _
        And (MidStr(Ansprechpartner, " ") = uidoc.FIELDGETTEXT("Lastname")) Then
     getMailInAdressbook = uidoc.FIELDGETTEXT("mailaddress")
    End If
    Exit For
    Next _kontakt_

End Function
--- Ende Code ---

Ich wäre überglücklich, wenn ihr mir hier noch einmal helfen könnt.

wirklich dramatisch ist, glaube ich, noch die Einleitung der Schleife For each und die das If-Konstrukt

Viele Grüße

Tode:
Das ist der falsche Ansatz. Du möchtest nicht jedesmal alle Kontakte durchsuchen, sondern den Server die Arbeit machen lassen.


--- Code: ---Private Function getMailInAdressbook(Kunde As String, Ansprechpartner As String) As String
    Dim s As NOTESSESSION
    Dim db As NOTESDATABASE
    Dim dc as NOTESDOCUMENTCOLLECTION
    Dim doc as NOTESDOCUMENT
   
    Dim strQuery as String

    '- Diese Zeile baut Dir ein Query zusammen, das sieht dann so aus: CompanyName = "eingegebener Kunde" & FirstName = "Theo" & LastName = "Test"
    strQuery = {CompanyName = "} & Kunde & {" & FirstName = "} & LeftStr(Ansprechpartner, " ") & {" & LastName = "} & MidStr(Ansprechpartner, " ") & {"}

    Set db = s.GETDATABASE("server", "adressbuch.nsf")

    Set dc = db.Search( strQuery, Nothing, 0 )
    Set doc = dc.GetFirstDocument()
    If not doc is Nothing then
      getMailInAdressbook = doc.GetitemValue( "MailAddress" )(0)
    End If
End Function
--- Ende Code ---

Chirin:
Hallo Tode,

leider funktioniert das Skript nicht.

Ich habe das SQL-Statement zwar schon korrigiert, so dass es jetzt zumindest Laufen müsste,
allerdings erhalte ich die Meldung: Automatisierungsfehler - Ausnahmefehler des Servers
in der Zeile     Set dc = db.Search(strQuery, Nothing, 0)


--- Code: ---Private Function getMailInAdressbook(Kunde As String, Ansprechpartner As String) As String
    Dim s As Object  'notessession erzeugte fehlermeldung: Typen unverträglich
    Dim db As Object 'notesdatabase erzeugte fehlermeldung: Typen unverträglich
    Dim dc As NOTESDOCUMENTCOLLECTION
    Dim doc As NOTESDOCUMENT

    Dim strQuery As String

    '- Diese Zeile baut Dir ein Query zusammen, das sieht dann so aus: CompanyName = "Kunde GmbH" & FirstName = "Theo" & LastName = "Test"
    
     strQuery = "CompanyName = '" & Kunde & "' and Firstname = '" & LeftStr(Ansprechpartner, " ") & "' and LastName = '" & MidStr(Ansprechpartner, " ") & "'"

    Set s = CreateObject("Notes.NotesSession")
    Set db = s.GETDATABASE("server", "adrbuch.nsf")
    Set dc = db.Search(strQuery, Nothing, 0)
    Set doc = dc.GETFIRSTDOCUMENT()
    If Not doc Is Nothing Then
      getMailInAdressbook = doc.GETITEMVALUE("MailAddress")(0)
    End If

End Function
--- Ende Code ---

Gibt es bestimmte verweise, die eingebunden werden müssen oder andere Ideen, woran es noch liegen kann?

Aktuell eingebunden habe ich LN Automation classes und LN Domino objects,  ODBC würd ich gern vermeiden.

Peter Klett:
Das ist keine SQL-Abfrage, denn Notes ist keine relationale Datenbank. Du darfst die Werte nicht in ' einfassen, sondern musst " verwenden. Es handelt sich bei dem Query um eine Selektionsformel. Da verwendest Du Formelsprache, die kennt kein And, sondern &

--- Code: ---strQuery = |CompanyName = "| & Kunde & |" & Firstname = "| & LeftStr(Ansprechpartner, " ") & |" & LastName = "| & MidStr(Ansprechpartner, " ") & |"|
--- Ende Code ---

Anstelle von | kannst Du auch {} verwenden, ist m.E. umständlicher zu schreiben, aber leichter zu lesen

EDIT: Torsten hat Dir die korrekte Formel geschrieben, hatte ich jetzt nicht gelesen. Warum hast Du die nicht probiert, sondern in SQL umgewandelt?  ???

Tode:
OK, grade ausprobiert: VBA kennt wohl keine anderen Text- Delimiter als das doppelte Anführungszeichen... Und das muss man dann durch Verdoppelung maskieren...

Aber das ist ein VBA- Problem... die richtige Notes- Syntax für die Formel steht ja sogar im Kommentar über der Zeile...

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln