Delphi - Outlook címlista használata Delphi-ből

Office 14. rész

forráskód letöltése
Soron következő Outlook programozásáról szóló cikkünkben a címlista használatát nézzük át. A címlista a velünk kapcsolatban álló személyek, cégek adatait tartalmazza. Ebből a cikkből megtudhatjuk, hogy hogyan kérdezhetjük le, és hogyan bővíthetjük a címlistát Delphi-ből. A mellékelt példaprogramban egy ListView komponensben jelenítjük meg a címlistánkban szereplő adatokat. Természetesen nem mindet, hiszen egy-egy elemhez rengeteg adat tartozik.

A címlista lekérdezése valamelyest hasonlít az e-mail lista lekérdezéséhez. Itt is ugyanazokat a műveleteket kell sorban elvégezni, ezért nézzük rögtön a forráskódot. A lista lekérdezéséhez létrehoztunk egy eljárást, mivel ezt több helyről is meg fogjuk majd hívni.

Ahhoz, hogy hozzáférjünk a címlistához szükségünk lesz egy NameSpace objektumra, amit a GetNameSpace függvénnyel kapunk meg. A függvény paramétere "MAPI" kell, hogy legyen! Ezután egy AddressList objektumra lesz szükségünk, amit az AddressLists osztály Item függvényével kaphatunk meg. Az Item függvénynek paraméterként meg kell adni a címlista nevét vagy sorszámát. Az Outlook több címlistát is tud kezelni, magyar nyelvű Outlook-ban az alapértelmezett címlista neve "Névjegyalbum".
  FNameSpace:=FOutlook.GetNameSpace('MAPI');
  FAddressList:=FNameSpace.AddressLists.Item('Névjegyalbum');
Ha megvan az AddressList objektumunk (az AddressList és AddressLists objektum nem azonos!), akkor egy ciklussal végigmegyünk az elemein. A címlista elemei egy-egy AddressEntry osztályban vannak tárolva, amiket viszont az AddressEntries osztályon keresztül érhetünk el az Item függvénnyel.
  for i:=1 to FAddressList.AddressEntries.Count do begin
    FAddressEntry:=FAddressList.AddressEntries.Item(i);
Hozzáadunk egy új elemet a ListView komponenshez, és beleírjuk az éppen kiolvasott AddressEntry (címlista elem) adatait.
    li:=ListView1.Items.Add;
    li.Caption:=FAddressEntry.Name;
    li.SubItems.Add(FAddressEntry.Address);
  end;
end;
Most nézzük meg azt, hogy hogyan adhatunk egy új elemet a címlistánkhoz. Az új cím adatait egy új Form-on keresztül adhatjuk meg. A Form2 Edit1 komponensében tároljuk az új elem nevét, míg az Edit2-ben az e-mail címét. Azért írok szándékosan "elem"-et, mivel a címlista tartalmazhat cég adatot, személyek adatait, valamint az Outlook 2000 verziótól kezdve ún. "Terjesztési listát". Akkor most nézzük a kódot, ami egy új elemet ad hozzá a címlistánkhoz:

Megjelenítjük a Form2-t a ShowModal függvény meghívásával. Ezzel azt érjük el, hogy a program futása addig nem folytatódik, amíg a felhasználó a Form-ot be nem zárta valamilyen módon. A Form2.Button1 komponens ModalResult property-jének értéke mrOK. Ha a felhasználó erre a gombra kattint, akkor a Form2 automatikusan bezáródik, és a ShowModal függvény visszatérési értéke mrOK lesz.
  with Form2 do begin
    if ShowModal=mrOK then begin
Mielőtt hozzáadnánk az új címet a címlistához el kell érnünk, hogy a Névjegyalbum mappa legyen az aktív. Megint kell egy NameSpace objektum, amit ismételten a GetNameSpace függvény segítségével kapunk meg. Ezután a GetDefaultFolder függvényt használjuk, aminek paramétereként az olFolderContacts konstanst adjuk meg.
      FNameSpace:=FOutlook.GetNameSpace('MAPI');
      FNameSpace.GetDefaultFolder(olFolderContacts);
Létrehozzuk az új címlista elemet a CreateItem függvény segítségével. A CreateItem függvényről is volt már szó egy korábbi cikkben, ezért most elég csak annyi, hogy a paramétere olContactItem kell, hogy legyen. Az eredmény egy ContactItem objektum lesz, amiben megadhatjuk az új bejegyzés adatait. A FullName property-ben a személy vagy cég teljes nevét kell megadnunk, míg az Email1Address property-ben az e-mail címet.
      FContactItem:=FOutlook.CreateItem(olContactItem);
      FContactItem.FullName:=Edit1.Text;
      FContactItem.Email1Address:=Edit2.Text;
Mivel most több adatot nem szeretnénk felvenni, ezért meghívjuk a Save metódust, amely elmenti az adatokat a címlistába. A ListView-ben lévő listánkat is frissíteni kell, ezért meghívjuk a fent ismertetett GetAddressList eljárást. Ha jól végeztük el a dolgunkat, akkor a listában már szerepelnie kell az új címnek!
      FContactItem.Save;
      GetAddressList;
    end;
  end;
end;
Szó volt arról, hogy az Outlook egyszerre több címlistát is tud kezelni. Ha szükségünk van ezeknek a címlistáknak a nevére, akkor az alábbi kódot felhasználva könnyedén szert tehetünk ezekre. A GetAddressList eljárás egy ComboBox-ba olvassa be a címlisták neveit:

Ismételten szükségünk lesz NameSpace osztályra, aminek AddressLists property-jében vannak tárolva a címlisták.
    FNameSpace:=FOutlook.GetNameSpace('MAPI');
Az AddressLists osztály Count függvényével lekérdezhetjük, hogy hány címlistánk van, míg az Item függvénnyel a megadott nevű vagy sorszámú címlistát kapjuk meg. Az Item függvény egy AddressList osztályt ad eredményül, melynek Name property-je megadja a címlista nevét, amit hozzáadunk a ComboBox elemeihez.
    for i:=1 to FNameSpace.AddressLists.Count do begin
      FAddressList:=FNameSpace.AddressLists.Item(i);
      ComboBox1.Items.Append(FAddressList.Name);
    end;
  ComboBox1.ItemIndex:=0;
end;

Office cikksorozat