AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Outlook - Ansteuerung

Ein Thema von GuenterS · begonnen am 23. Apr 2008 · letzter Beitrag vom 6. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#1

Outlook - Ansteuerung

  Alt 23. Apr 2008, 17:08
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;
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Outlook - Ansteuerung

  Alt 23. Apr 2008, 18:46
Es fehlt Logon und Logoff.
Delphi-Quellcode:
lNamespace := lOutlook.getnamespace('MAPI');
lNamespace.Logon(EmptyParam, EmptyParam, False, True); // <==
...
lItem.Save;
lNamespace.Logoff;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Outlook - Ansteuerung

  Alt 23. Apr 2008, 21:30
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]
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Outlook - Ansteuerung

  Alt 25. Apr 2008, 09:04
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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Outlook - Ansteuerung

  Alt 25. Apr 2008, 14:28
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: http://www.delphipraxis.net/internal...ct.php?t=22524

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;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Outlook - Ansteuerung

  Alt 25. Apr 2008, 16:20
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:
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;
Es kommt aber zu keiner Exception, die mir weiterhelfen könnte.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Outlook - Ansteuerung

  Alt 25. Apr 2008, 17:35
Zitat von GuenterS:
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.
Das war auch nur dazu gedacht, um den Fall dass Outlook nicht installiert ist oder sonst ein Problem hat, sauber zu behandeln.
Das hat nicht direkt mit deinem Problem zu tun.
Ich wollte dir nur zeigen, dass das Verbergen von Exceptions (Error hiding) schlechter Programmierstil ist.
Zitat von GuenterS:
Deshalb habe ich um das Save und Logoff auch noch try ... except gemacht
Das ist auf jeden Fall eine gute Idee.
Man sollte nur den Fehlertext leicht ändern, damit man im Fall einer Exception die Position im Sourcecode genau lokalisieren kann.
Zitat von GuenterS:
Es kommt aber zu keiner Exception, die mir weiterhelfen könnte.
Verstehe ich das richtig ?
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Outlook - Ansteuerung

  Alt 25. Apr 2008, 18:27
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.


Ich wollte dir nur zeigen, dass das Verbergen von Exceptions (Error hiding) schlechter Programmierstil ist.

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*
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Outlook - Ansteuerung

  Alt 6. Mai 2008, 08:09
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:

  try
 -->>>>> loutlook := GetActiveOleObject('Outlook.Application');
  except
    try
      loutlook := CreateOleObject('Outlook.Application');
    except
      exit;
    end;
Allerdings kracht es bei mir schon bei der ersten zeile,GetActiveOleObject.
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Outlook - Ansteuerung

  Alt 6. Mai 2008, 08:33
Hallo,

guggst du hier, besonders die Security Option
1

und hier, besonders For ISVs
2

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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz