OLE Outlook

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

OLE Outlook

Beitrag von charlytango »

Hi.

Meine Absicht ist aus einer Kursverwaltung Daten (=Kurstermine =Appointments) in Outlook einzutragen.
Ich teste mit Outlook 2003, Laz 1.6.

Einges klappt ganz gut, an anderen Stellen kracht es aus nicht nachvollziehbaren Gründen, zumal die MS-Dokumentation und die MS-Beispiele Methoden vorgeben bei denen es dann zu Problemen kommt.

Ich teste mit einer kleinen Beispiel-App und allem Outlook-relevanten Code in einer eigenen Unit, die ich dem Forum zur Verfügung stellen würde.
(oder auch einen WIKI-Artikel damit bestücken)

Baustellen hab ich dzt. im Code 3 (alle mit // <<< markiert). Code liegt bei
die aktuellste ist das Auslesen und Anlegen von Categories.
Hier wird zur Laufzeit folgendes bemängelt:
<<< Method Categories not supported by automation object
Laut MS sollte das aber klappen.

Code: Alles auswählen

 
{ Prüft ob eine Kategorie existiert und falls nicht kann sie auch angelegt werden}
function OL_CategoryExists(sCategoryName: string; bCreateMissingCategory: boolean;
  iCategoryColor: integer; iCategoryShortcutKey: integer): boolean;
var
  Outlook,  olCategories,  olCategory,  olNameSpace: olevariant;
  i, NumItems: integer;
begin
  Outlook := CreateOleObject('Outlook.Application');
  olNameSpace := Outlook.GetNamespace('MAPI');
  //  olCategories := olNameSpace.Categories;
  //  numItems := olCategories.Count;
  numItems := olNameSpace.Categories.Count// <<< Method Categories not supported by automation object
  {
  laut
  https://msdn.microsoft.com/en-us/librar ... 63110.aspx
  sollte das eigentlich klappen
  }

 
  Result := False;
 
  if numItems > 0 then
  begin
    for i := 1 to numItems do
    begin
      //olCategory := olCategories.Item[i];
      olCategory := olNameSpace.Categories.Item[i];
 
      // olCategory.Name is the name of the category
      // olCategory.CategoryID is an internal, unique ID for the category
      if olCategory.Name = sCategoryName then
      begin
        Result := True;
        break;
      end;
      olCategory := Unassigned;
    end;
  end;
 
  if (not Result) then
  begin
    if bCreateMissingCategory then
    begin
      //------------------------------------------------
      // Kategorie erstellen: olCategories.Add
      // Name...string
      // Color..OlCategoryColor  (optional)
      // ShortcutKey.. OlCategoryShortcutKey (optional))
      //------------------------------------------------
      olCategories.Add(olevariant(sCategoryName), iCategoryColor);
      Result := True;
    end;
  end;
 
  olCategory := Unassigned;
  olCategories := Unassigned;
  olNameSpace := Unassigned;
  Outlook := Unassigned;
end;


Ich weiß dass das Durcharbeiten von fremdem Code meist eine Herausforderung ist, zumal etliches an Kommentaren und Schnipseln noch drin ist.
Aber vielleicht gibt es jmd der mir dabei weiterhelfen kann ..

THX
Dateianhänge
Outlook_OLE.zip
(7.55 KiB) 128-mal heruntergeladen

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OLE Outlook

Beitrag von wp_xyz »

Wenn ich dieses Dokument von MSDN richtig lese, hatte der NameSpace von Outlook 2003 noch keine Categories : https://msdn.microsoft.com/en-us/library/aa221870.aspx

Probier's mal direkt mit NameSpace.Items.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: OLE Outlook

Beitrag von charlytango »

Danke, das war der richtige Hinweis -- manchmal bin ich echt blind.
Ich erspare mir das mit den NameSpace.Items und verwende Outlook ab 2007.

Thx nochmal

Antworten