Outlook-Daten
Auslesen der Aufgabenlisten aus Outlook
Organisation von Daten in Outlook
Outlook bildet intern eine Ordnerstruktur ab, die vergleichbar ist mit Ordnern auf einer Festplatte. In den Ordnern befinden sich die E-Mails, Kontakte usw.
Alle E-Mails, Aufgaben und Kontakte besitzen ein gemeinsames Interface item. Bevor auf die Eigenschaften eines Objektes zugegriffen werden kann, muss ein Casting durchgeführt werden.
Für jeden Ordner ist festgelegt, von welchem Typ (E-Mails, Kontakte…) seine enthaltenen Daten sind, siehe Abbildung. Trotz dieser Festlegung können auch Daten eines anderen Typs enthalten sein. Beispielsweise dürfen E-Mails in einem Ordner abgelegt werden, der für Aufgaben vorgesehen ist.
Voraussetzungen zum Zugriff auf den Code
Für einen Zugriff auf die Daten muss eine Verbindung zwischen dem compilierten Programmcode und dem Outlook-Prozess hergestellt werden. Dies lässt sich mit sehr einfach mit einem Addin realisieren. Visual Studio bietet ein vordefiniertes Projekt Outlook 2007 Add-In an. Mit Hilfe einer Variable erhält man Zugriff auf die Outlook-Session.
Ausschnitte aus dem Sourcecode
Hinweis: Die Codeausschnitte wurden aus Gründen der Übersichtlichkeit gekürzt.
Klasse OutlookController
Der Konstruktor der Klasse OutlookController erhält einen Übergabeparameter vom Typ Outlook.Application (Z6). Dabei handelt es sich um eine Referenz auf die Outlooksitzung. Über die Referenz kann auf die gesamte Ordnerstruktur innerhalb Outlook zugegriffen werden. Um auf alle Unterordner zugreifen zu können, wird die Funktion findTaskFolder() rekursiv aufgerufen (Z13, Z45). Die Funktion speichert alle für Aufgaben vorgesehene Ordner in einer ArrayList (Z39). Ausnahme bilden der Papierkorb und der Spam-Ordner (Z23ff). Sie werden von dem Durchsuchen ausgenommen. Zur weiteren Analyse jedes Aufgabenordners wird eine selbstentwickelte Klasse TaskFolder verwendet (Z39).
- public class OutlookController
- {
- private Outlook.Application OutlookSession;
- private ArrayList mTaskFolders = new ArrayList();
- public OutlookController(Outlook.Application Session)
- {
- OutlookSession = Session;
- //start searching for task folders
- foreach (Outlook.Folder fold in OutlookSession.Session.Folders)
- {
- findTaskFolder(fold);
- }
- }
- private void findTaskFolder(Outlook.Folder folder)
- {
- //ignore folder with deleted items and junk folder
- //detect these 2 folders via name of default junk and default trash
- //folder
- if (folder.Name
- != OutlookSession.Session.
- GetDefaultFolder(Microsoft.Office.Interop.
- Outlook.OlDefaultFolders.olFolderDeletedItems).Name
- &&
- folder.Name
- != OutlookSession.Session.
- GetDefaultFolder(Microsoft.Office.Interop.
- Outlook.OlDefaultFolders.olFolderJunk).Name
- )
- {
- //only remind folders containing tasks
- if (folder.DefaultItemType.GetHashCode() ==
- Outlook.OlItemType.olTaskItem.GetHashCode())
- {
- mTaskFolders.Add(new TaskFolder(folder));
- }
- //find subfolders in this folder, recursively
- foreach (Outlook.Folder fold in folder.Folders)
- {
- findTaskFolder(fold);
- }
- }
- }
- }
Klasse TaskFolder
Wie bereits beschreiben, kann ein Ordner mit Aufgaben auch E-Mails etc. enthalten. Aus diesem Grund werden alle Aufgaben herausgefiltert (Z9). Jede Aufgabe in Outlook wird über ein Objekt der selbstentwickelten Klasse ExtendedTask verwaltet (Z12).
- public class TaskFolder
- {
- Outlook.Folder fold;
- ArrayList taskarr = new ArrayList();
- public TaskFolder(Outlook.Folder uebfolder)
- {
- fold = uebfolder;
- var result = uebfolder.Items.OfType<Outlook.TaskItem>();
- foreach(Outlook.TaskItem titem in result)
- {
- taskarr.Add(new ExtendedTask(titem));
- }
- }
- }
Klasse ExtendedTask
Die Klasse erhält über den Konstruktor auf eine Referenz auf eine Aufgabe in Outlook (Z5). Die Referenz wird in der Klasse gespeichert.
Weitere Funktionen sind Getter auf die Eigenschaften der Aufgabe und die Berechnung der Priorität (Z10, Z18, Z37).
Die Priorität in Outlook 2007 kann folgende Werte annehmen: hoch, normal oder niedrig. Daraus wird ein Zahlenwert abgeleitet. Für die Visualisierung wird zusätzlich eine normierte Priorität berechnet.
- public class ExtendedTask
- {
- private Outlook.TaskItem mitem;
- public ExtendedTask(Outlook.TaskItem uitem)
- {
- mitem = uitem;
- }
- public Outlook.TaskItem Task
- {
- get
- {
- return mitem;
- }
- }
- public double calculatedpriority
- {
- get
- {
- //high ~ 0
- //middle ~ 1
- //low ~ 2
- double prio;
- if (Task.Importance == Outlook.OlImportance.olImportanceLow)
- prio = 2.0;
- else if (Task.Importance == Outlook.OlImportance.olImportanceNormal)
- prio = 1.0;
- else //importance high
- prio = 0.0;
- return prio;
- }
- }
- public double calculatednormalizedpriority
- {
- get
- {
- return calculatedpriority / 2.0;
- }
- }
- }
← Umsetzung als Outlook-Addin | ● | Erzeugen und Darstellen von 3D-Modellen in WPF →