![]() |
Outlook - Ansteuerung
Hallo,
ich versuche aus Delphi (Version 5 Enterprise) Aufgaben in Outlook zu erstellen. Das klappt auch wunderbar, solange Outlook dabei gestartet ist. Ist dies aber nicht der Fall, krieg ich diese wunderbaren Fehlerberichte. Vielleicht sieht ja jemand an dem verwendeten Code, wo das Problem zu finden ist.
Delphi-Quellcode:
procedure CreateOutlookTaskItem(aStart, aDueDate, aReminderTime: TDateTime;
aSubject, aBody: string; aReminder: boolean); var lNamespace, lOutlook, lFolder, lItem: OleVariant; begin try loutlook := getactiveoleobject('outlook.application'); except try loutlook := createoleObject('outlook.application'); except exit; end; end; try lNamespace := lOutlook.getnamespace('MAPI'); lFolder := lNamespace.getdefaultfolder(13); lItem := lOutlook.createitem(3); lItem.StartDate := aStart; lItem.Subject := aSubject; lItem.Body := aBody; if (aDueDate <> 0) then lItem.DueDate := aDueDate; lItem.Categories := 'test'; if (aReminder) then begin lItem.ReminderTime := DateTimeToStr(aReminderTime); lItem.ReminderSet := true; end else lItem.ReminderSet := false; lItem.Save; lItem := unassigned; finally lOutlook := unassigned; end; end; |
Re: Outlook - Ansteuerung
Es fehlt Logon und Logoff.
Delphi-Quellcode:
lNamespace := lOutlook.getnamespace('MAPI');
lNamespace.Logon(EmptyParam, EmptyParam, False, True); // <== ... lItem.Save; lNamespace.Logoff; |
Re: Outlook - Ansteuerung
Vielen Dank :)
Genau das hat das Problem gelöst :) [Nachtrag] Da habe ich mich leider zu früh gefreut... die Fehlerberichtmeldung kommt trotzdem. Anscheinend gibt es Situationen wo diese dann nicht erscheint. Meine procedure habe ich nun folgendermaßen umgebaut:
Delphi-Quellcode:
procedure CreateOutlookTaskItem(aStart, aDueDate, aReminderTime: TDateTime;
aSubject, aBody: string; aReminder: boolean); var lNamespace, lOutlook, lFolder, lItem: OleVariant; begin try loutlook := getactiveoleobject('outlook.application'); except try loutlook := createoleObject('outlook.application'); except exit; end; end; try lNamespace := lOutlook.getnamespace('MAPI'); lNamespace.Logon(EmptyParam, EmptyParam, False, True); lFolder := lNamespace.getdefaultfolder(13); lItem := lOutlook.createitem(3); lItem.StartDate := aStart; lItem.Subject := aSubject; lItem.Body := aBody; if (aDueDate <> 0) then lItem.DueDate := aDueDate; lItem.Categories := 'test'; if (aReminder) then begin lItem.ReminderTime := DateTimeToStr(aReminderTime); lItem.ReminderSet := true; end else lItem.ReminderSet := false; lItem.Save; lNamespace.Logoff; lItem := unassigned; finally lOutlook := unassigned; end; end; [/Nachtrag] |
Re: Outlook - Ansteuerung
Vielleicht sollte ich noch dazusagen, dass ich Outlook 2000 mit Servicepack3 dafür verwende.
Die Aufgabe wird ja richtig angelegt in Outlook, lediglich beim Beenden scheint etwas schiefzugehn. |
Re: Outlook - Ansteuerung
Du hast doch einen integrierten Debugger in Delphi.
Welche Codezeile löst denn die Exception aus ? OLE Exceptions haben manchmal mehr Informationen zu bieten, als man normalerweise sieht. Siehe Code-Library: ![]() Hier nochmal dein Code (ich habe ein paar kleine Fehler entfernt):
Delphi-Quellcode:
procedure CreateOutlookTaskItem(aStart, aDueDate, aReminderTime: TDateTime;
aSubject, aBody: string; aReminder: boolean); var lNamespace, lOutlook, lFolder, lItem: OleVariant; begin try loutlook := getactiveoleobject('outlook.application'); except try loutlook := createoleObject('outlook.application'); except // Exit; // nur Exit ist nicht gut. wir wollen schon wissen warum es nicht geklappt hat on E:Exception do begin E.Message := 'Outlook Task kann nicht angelegt werden'#13#10+ E.Message; raise; end; end; end; lNamespace := lOutlook.getnamespace('MAPI'); lNamespace.Logon(EmptyParam, EmptyParam, False, True); lFolder := lNamespace.getdefaultfolder(13); lItem := lOutlook.createitem(3); lItem.StartDate := aStart; lItem.Subject := aSubject; lItem.Body := aBody; if (aDueDate <> 0) then lItem.DueDate := aDueDate; lItem.Categories := 'test'; if (aReminder) then begin lItem.ReminderTime := DateTimeToStr(aReminderTime); lItem.ReminderSet := true; end else lItem.ReminderSet := false; lItem.Save; lNamespace.Logoff; // lItem := unassigned; // überflüssig, da lokale Variablen automatisch entsorgt werden // lOutlook := unassigned; end; |
Re: Outlook - Ansteuerung
Ich kann mir irgendwie nicht vorstellen, dass beim Erstellen bzw. holen des Ole Objectes für lOutlook der Fehler auftritt, weil sonst denk ich würde ja auch nicht die entsprechende Aufgabe in Outlook angelegt.
Deshalb habe ich um das Save und Logoff auch noch try ... except gemacht
Delphi-Quellcode:
Es kommt aber zu keiner Exception, die mir weiterhelfen könnte.
procedure CreateOutlookTaskItem(aStart, aDueDate, aReminderTime: TDateTime;
aSubject, aBody: string; aReminder: boolean); var lNamespace, lOutlook, lFolder, lItem: OleVariant; begin try loutlook := getactiveoleobject('outlook.application'); except try loutlook := createoleObject('outlook.application'); except on E:Exception do begin E.Message := 'Outlook Task kann nicht angelegt werden'#13#10+ E.Message; raise; end; end; end; lNamespace := lOutlook.getnamespace('MAPI'); lNamespace.Logon(EmptyParam, EmptyParam, False, True); lFolder := lNamespace.getdefaultfolder(13); lItem := lOutlook.createitem(3); lItem.StartDate := aStart; lItem.Subject := aSubject; lItem.Body := aBody; if (aDueDate <> 0) then lItem.DueDate := aDueDate; lItem.Categories := 'test'; if (aReminder) then begin lItem.ReminderTime := DateTimeToStr(aReminderTime); lItem.ReminderSet := true; end else lItem.ReminderSet := false; try lItem.Save; except on E:Exception do begin E.Message := 'Outlook Task kann nicht angelegt werden'#13#10+ E.Message; raise; end; end; try lNamespace.Logoff; except on E:Exception do begin E.Message := 'Outlook Task kann nicht angelegt werden'#13#10+ E.Message; raise; end; end; end; |
Re: Outlook - Ansteuerung
Zitat:
Das hat nicht direkt mit deinem Problem zu tun. Ich wollte dir nur zeigen, dass das Verbergen von Exceptions ( ![]() Zitat:
Man sollte nur den Fehlertext leicht ändern, damit man im Fall einer Exception die Position im Sourcecode genau lokalisieren kann. Zitat:
Es gibt keine Exception in dieser Procedure aber trotzdem siehst du eine Fehlermeldung ("... die Fehlerberichtmeldung kommt trotzdem.") ? Dann muss das Problem doch eher ausserhalb von procedure CreateOutlookTaskItem zu suchen sein. |
Re: Outlook - Ansteuerung
Außerhalb passiert mit Outlook aber rein gar nichts.
Werde es mal extrahieren in eine eigene Minianwendung. Wenns dann auch noch kommt, vielleicht gibts ja auch Ursachen an meiner Outlook Installation. Es scheint immer dann zu sein wenn sich Outlook beendet. :wall: Ich wollte dir nur zeigen, dass das Verbergen von Exceptions (Error hiding) schlechter Programmierstil ist. :wall: Das ist nichts unbekanntes für mich ... und natürlich muss man die Fehlertexte noch ändern. Es geht mir hier ja auch nicht um die Entwicklung einer Procedure die ich 1:1 in die bestehende Applikation einbauen kann. Bischen Anpassen schaff ich gerade noch *grins* |
Re: Outlook - Ansteuerung
Hi @,
Ich bin gerade auch dabei meine bisherige Outlook Ansteuerung von XP O2003 auf Vista 2007 kompatible zu machen. Weil ich nur die Mapi32.dll verwende und nun über die Ext. Mapi gehen will. Allerdings wollte ich auch zuerst prüfen ob Outlook auf ist und wenn nciht neu starten.
Delphi-Quellcode:
Allerdings kracht es bei mir schon bei der ersten zeile,GetActiveOleObject.try -->>>>> loutlook := GetActiveOleObject('Outlook.Application'); except try loutlook := CreateOleObject('Outlook.Application'); except exit; end; Exception: Klasse EOlesyserror mit meldung: "Vorgang nicht verfügbar ". Hat ev. jemand eine Idee an was das leigen aknn? Ich habe Vista mit Ot2007 installiert. Nachtrag: Unter XP mit O2003 funktioniert es super. danke |
Re: Outlook - Ansteuerung
Hallo,
guggst du hier, besonders die Security Option ![]() und hier, besonders For ISVs ![]() Wie es aussieht erlaubt Outlook 2007 unter Vista externen Programmen keinen Zugriff mehr, nur in-proc (also Dlls) sind erlaubt. Du kannst das Prüfen, indem du unter Vista mal den Virenscanner ausschaltest, dann reagiert Outlook 2007 wie die 2003er Version. In der 2. URL sind Tipps, wie man das umgehen kann. Heiko Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz