Announcement

Collapse
No announcement yet.

Zugriff auf öffentlichen Outlook-Kontakte-Ordner eines Exchange Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf öffentlichen Outlook-Kontakte-Ordner eines Exchange Server

    Hallo zusammen,

    ich bin auf der Suche nach einer Möglichkeit Zugriff auf einen öffentlichen Kontakte Ordner von Outlook auf einem Exchange-Server zu bekommen. In meinem Fall möchte ich Kontakte aus meiner Datenbank nach Outlook "verschieben", also in Outlook einen neuen Kontakt mit diesen Daten anlegen.
    Für lokale Ordner funktioniert das ganze einwandfrei.
    Am Ordner auf dem Exchange-Server beiße ich mir jedoch die Zähne aus.
    Ich habe bei meiner Suche im Internet folgende Seite gefunden:

    http://msdn.microsoft.com/de-de/library/bb610437.aspx

    Das sieht schon stark danach aus, was ich benötige, jedoch bekomme ich einen Fehler wenn ich Teile des Codes kopiere.

    Dies Zeile:
    [highlight=vb.net]
    For Each addrList As Outlook.AddressList In addrLists
    [/highlight]

    wirft folgende Meldung
    Der Ausdruck ist vom Typ "Outlook.AddressLists" und ist keine Auflistung.
    Weiß jemand wie ich das hinbekommen kann? Gerne auch ein anderer Lösungsweg.

    Grüße
    Andi

  • #2
    Dim addrLists As Outlook.AddressLists
    For Each addrList As Outlook.AddressList?
    Christian

    Comment


    • #3
      Hi Christian,

      ich weiß nicht, was du mir damit sagen möchtest.

      Hier mal meine komplette Methode:
      [highlight=vb.net]
      ''' <summary>
      ''' Liefert den Kontaktordner
      ''' </summary>
      ''' <param name="unterordner"></param>
      ''' <value></value>
      ''' <returns>Outlook.MAPIFolder</returns>
      ''' <remarks></remarks>
      Public ReadOnly Property Kontaktordner(Optional ByVal unterordner As String = "") As Outlook.MAPIFolder
      Get
      Dim folder As Outlook.MAPIFolder
      If F_GetTPParameter("Outlook", "Exchange", TPINT, 1) = istExchange Then
      Dim addrLists As Outlook.AddressLists = OutlookApp.Session.AddressLists
      For Each addrList As Outlook.AddressList In addrLists <== hier tritt der Fehler auf
      If addrList.Name = unterordner Then
      folder = addrList.GetContactsFolder
      End If
      Next
      Else
      folder = GetOrdner(Outlook.OlDefaultFolders.olFolderContact s, unterordner) <== funktioniert
      End If
      Return folder
      End Get
      End Property
      [/highlight]

      Comment


      • #4
        Könnte es

        For Each addrList As Outlook.AddressLists

        heissen?
        Christian

        Comment


        • #5
          nein, ich möchte ja aus einer Liste von Listen (AdressLists) jede einzelne Liste (AdressList) ansehen.
          Von daher ist das so schon richtig.
          Mir scheint nur das die AdressLists nicht das For Each unterstützen.

          Comment


          • #6
            Hast du denn VSTO benutzt oder die Outlook COM Object Library selbst importiert? Die von dir gefundene Doku bezieht sich ja auf VSTO und ich könnte mir vorstellen das Microsoft an deren Interop Assemblies ~Hand~ angelegt hat um für AdressLists IEnumerable zu implementieren was bei selbsterstellten Interop Assemblies vielleicht nicht der Fall ist.

            In diesem KB von Microsoft bezüglich der Benutzung der selbst importierten Interop Assemblies werden explizit For Schleifen über die Item Property verwendet und keine foreach Schleifen.

            Comment


            • #7
              hmm...ok.
              Die Outlook COM Object Library hab ich selbst importiert. Dann liegt es klar daran.
              Mit der FOR-Schleife hab ich zwischenzeitlich auch schon herum probiert. Das scheint gut zu gehen.
              Jetzt muss ich schauen das ich den richtigen Exchange Ordner erwische. Der User hat oft einen Privaten der Kontakte heißt und der öffentliche heißt auch Kontakte. Aber ich denke, da hab ich schon eine Idee.

              [highlight=vb.net]
              Public ReadOnly Property Kontaktordner(Optional ByVal unterordner As String = "") As Outlook.MAPIFolder
              Get
              Dim folder As Outlook.MAPIFolder = Nothing
              If F_GetTPParameter("Outlook", "Exchange", TPINT, 0) = istExchange Then
              Dim addrLists As Outlook.AddressLists
              addrLists = OutlookApp.Session.AddressLists
              For i As Integer = 1 To addrLists.Count + 1
              'Ordnerpfad bestimmen
              Dim f As Outlook.MAPIFolder = addrLists.Item(i).GetContactsFolder
              Dim path As String = f.FolderPath
              'Name und pfad abstimmen
              If addrLists.Item(i).Name = unterordner AndAlso path.StartsWith("\\" & F_GetTPParameter("Outlook", "Profil", TPTXT)) Then
              folder = f
              Exit For
              End If
              Next
              Else
              folder = GetOrdner(Outlook.OlDefaultFolders.olFolderContact s, unterordner)
              End If
              Return folder
              End Get
              End Property
              [/highlight]

              Nicht verwirren lassen durch F_GetTPParameter. Die Methode holt nur Werte aus Parametertabellen in meiner DB ab.

              Comment


              • #8
                Jetzt passiert was komisches.
                Bei mir funktioniert das ganze einwandfrei.
                Vom User kam heute die Meldung, das es nicht funktioniert mit der Meldung "Public member 'GetContactsFolder' on type 'AddressList not found."
                Die Interop.Outlook.dll hat er, woran kann es noch liegen?

                Comment


                • #9
                  Er benutzt eine Outlook Version die diese Methode nicht kennt? Laut Doku gibt es GetContactsFolder ab Outlook 2007.

                  Wenn du eine Interop Assembly selbst erzeugst solltest du das definitiv gegen die älteste Outlook Version tun die du auch unterstützen möchtest um solche Probleme zu minimieren.

                  Comment


                  • #10
                    Ok, danke für den Hinweis.
                    Ich werde mal prüfen, welche Version da benutzt wird.

                    Comment


                    • #11
                      Es wird Outlook 2010 Sp1 benutzt.
                      An einer zu alten Version kann es daher nicht liegen.

                      Comment

                      Working...
                      X