Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden

  • Hallo AutoITer!

    Wie in der Themabezeichnung geschrieben, möchte ich gerne von einem Kalender (Outlook 2010) Daten innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopieren.

    Dazu habe ich mir die OutlookUDF (Ver. 1.3.4.1) heruntergeladen und ein Programm zusammengestellt.

    Dabei kommt es bei der Ausführung zu folgenden Problemen.

    1.) Ich habe eine Abfrage des Zielordners (Kalender) eingebaut. Führe ich das Script aus dem SciTE aus funktioniert es mit einem Zeitraum >= einem Jahr, ich erhalte keine Fehlermeldung.

    Gebe ich den gleichen Zeitraum ein und starte das Script als compilierte EXE erhalte ich von meiner Ordnerabfrage einen Fehler!?

    2.)Verwende ich einen langen Zeitraum kommt es sehr oft vor, dass beim Auslesen der Kalenderdaten nicht alle Felder eingelesen werden.

    Darunter die für mein Script notwendige EntryId.

    3.)Selbst wenn es scheint das alles funktioniert werden keine Kalendereinträge kopiert. (keine Fehlermeldung)

    Kennt jemand diese Probleme und weiß eine Lösung?

    Ich habe den Verdacht, das die OutlookEx UDF nicht stabil funktioniert.

    Spoiler anzeigen

    If not :?: then ?( else :thumbup:

  • Concara 8. Februar 2019 um 12:44

    Hat den Titel des Themas von „Problem mit OutlookEX - Kalenderdaten sollen innerhalbe eines bestimmten Zeitraums in einen anderen Kalender kopiert werden“ zu „Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden“ geändert.
  • Wir brauchen mehr Info:

    Welche Outlook-Version?

    Welche Meldungen?

  • Hallo Water!

    Wie geschrieben verwende ich Outlook 2010 hier die genaue Versionsnummer: 14.0.7227.5000 SP2 MSO 14.0.7228.5001

    es ist eine 64 Bit Version. Verbunden bin ich mit einem Exchange 2010 im Online Modus (kein Cache).

    Die Anhänge zeigen Problem 2.)

    Beim ersten Versuch ist der Zeitraum 30.12.2018 bis 30.09.2020 gewählt und ab Row 141 wird die EntryId nicht mehr ausgelesen!? (Fehler_beim_Auslesen.jpg)

    Gebe ich dann den Zeitraum ab dem der Fehler auftritt ein 10.06.2020 bis 30.09.2020 wird die EntryId ausgelesen.

    (Der_Zeitraum_ohne_Fehler.jpg)


    If not :?: then ?( else :thumbup:

  • Ups, stimmt. Sinnerfassendes und vollständiges Lesen hilft :)

    In Col1 des zurückgegebenen Array sollte das Objekt zu finden sein. Kannst Du bitte mit IsObj prüfen, ob für die Zeilen, in denen die EntryID fehlt, Col1 trotzdem ein Objekt beinhaltet? Falls ja, dann kannst du das statt der EntryID verwenden.

  • Hi!

    So jetzt wird es mir zu Bund. Ich kann dem Verhalten meines Systems nicht mehr folgen.

    Ich habe die Abfrage ob Col1 ein Objekt ist eingbaut und bei jedem Arrayeintrag ist ein Wahr herausgekommen.

    Also gut statt der EntryId wird jetzt das Objekt an die Kopierfunktion übergeben.

    Ergebins die drei Kalendereinträge die bis jetzt schon nicht kopiert wurden, wurden auch so nicht kopiert.

    Fehler 3 Source and target folder are of different types, kann nicht sein aber ok.

    Dann dachte ich mir "alles neu", Kalendereinträge im Zielordner gelöscht und von vorne.

    Gleicher Zeitraum eingestellt und es wurde rein garnichts kopiert, zumindest nicht in den Zielkalender.

    Im Quellkalender wurden immer mehr Einträge erstellt. Fehler 4 erweitert 6 (4 - Error moving the copied item to the target folder. @extended is set to the COM error)

    Einträge wo die EntryId nicht ausgelesen wurde erhalten den Fehler 3 (Source and target folder are of different types)

    Gut dann halt Zielkalender komplett gelöscht und wieder neu angelegt.

    Gleiches Verhalten.

    Einen Schritt zurück Backup in den Quellkalender eingespielt.

    Die EntryId wird wieder an die Kopierfunktion übergeben.

    Aber die Kalendereinträge werden wieder "nur" im Quellkalender erstellt und können nicht in den Zielkalender verschoben werden. (Fehler 4)

    Was gestern noch funktioniert hat geht jetzt nicht mehr!?

    Hat eventull jemand einen anderen Weg wie ich Kalenderdaten von einem Kalender in einen anderen Kalender bekomme, innerhalb eines bestimmten Zeitraums?

    Also Eingabe eines Von- und Bisdatum und dann kopieren.

    Es soll für einen Endanwender möglichst einfach sein.

    If not :?: then ?( else :thumbup:

  • Bin geschäftlich unterwegs. Wenn ich wieder im Büro bin, versuche ich mal ein reduziertes Testskript.

  • So, hat leider etwas gedauert.
    Habe es mit folgendem Skript getestet und nach 161 von 997 Datensätzen das selbe Problem festgestellt. Outlook 2016 32bit auf Windows 7.

  • Hallo Water!

    Danke für die Rückmeldung!

    Wenn man im Script _OL_ErrorNotify(3) setzt, erhält man auch den Fehler warum das passiert, nur habe ich noch keine Lösung gefunden es zu umgehen.

    Spoiler anzeigen

    ========================================================

    2019.02.28 16:15:45

    -------------------

    COM Error Encountered in Kalenderabfragen_test.au3

    OutlookEX UDF version = 1.3.4.1

    @AutoItVersion = 3.3.14.5

    @AutoItX64 = 0

    @Compiled = 0

    @OSArch = X64

    @OSVersion = WIN_7

    Scriptline = 623

    NumberHex = 80020009

    Number = -2147352567

    WinDescription = Ausnahmefehler aufgetreten.

    Description = Die Anzahl der Elemente, die gleichzeitig geöffnet werden können, wurde vom Serveradministrator begrenzt. Schließen Sie zunächst geöffnete Nachrichten, oder entfernen Sie Anhänge und Bilder von ungesendeten Nachrichten, die Sie gerade verfassen.

    Source = Microsoft Outlook

    HelpFile =

    HelpContext = 0

    LastDllError = 0

    ========================================================

    Diese Verhalten ist also im Zusammenspiel mit einem EXchangeserver "normal".

    Verwendet man einen lokalen Kalender (PST File) dann ist da Array vollständig.

    Mein Lösungsansatz war dann dass ich nicht so viele Kalenderelmente auf einmal auslese, dazu habe ich den Abfragezeitraum in meherer Teile unterteilt.

    Aber leider geht dort beim kopieren trotzdem etwas nicht in Ordnung.

    Was sehr stöhrend bei deiner kopieren UDF (_OL_ItemCopy) ist, dass wenn das Object nicht in den Zielkalender verschoben werden kann, es trotzdem im Quellkalender verbleibt. (doppelte Einträge)

    Hier ein Vorschlag wie man diese eventuell anpassen kann. Die Zeilen die ich verändert habe, habe ich mit einem ? am Anfang der Zeile markiert.

    Spoiler anzeigen

    If not :?: then ?( else :thumbup:

  • Die Fehlermeldung hilft. Passe die _OL_AppointmentGet bitte wie folgt an:

    Dadurch enthält zwar der zurückgegebene Array das Objekt nicht mehr, aber die Fehlermeldung sollte weg sein, da keine Referenz zum Appointment mehr besteht.

    Wenn Du auf das Objekt eines Items aus dem Array direkt zugreifen musst, dann verwende _OL_ItemGet mit der EntryID.

    Kannst Du das bitte testen? Falls es funktioniert, füge ich in Flag ein, damit solche Situationen umgangen werden können.

  • Was sehr störend bei deiner kopieren UDF (_OL_ItemCopy) ist, dass wenn das Object nicht in den Zielkalender verschoben werden kann, es trotzdem im Quellkalender verbleibt. (doppelte Einträge)

    Diese Änderung scheint meiner Meinung nach nicht sinnvoll zu sein und zwar: Wenn das Item nicht in den Zielordner kopiert werden kann (aus welchem Grund auch immer), dann sollte es NICHT gelöscht werden. Denn wenn Du die Ursache beheben kannst und das Skript nochmals durchführst, dann fehlt Dir das eine von der Funktion gelöschte Item.

    Falls Du das trotzdem brauchst, dann empfehle ich die Löschung im Fall eines Fehlers direkt nach dem Aufruf von _OL_ItemCopy in Deinem Skript.

  • Hallo Water!

    Ich habe es geteste und es funktioniert einwandfrei, wenn man diese Zeile auskommentiert.

    Array ist vollständig auch wenn ich meinen Exchangekalender verwende.

    Zur _OL_ItemCopy:

    Deine Funktion erstellt ja vom Ursprünglichen Eintrag eine Kopie im Quellordner und versucht dann diese Kopie in den Zielordner zu verschieben.

    Wenn kein Fehler auftritt alles ok.

    So jetzt schafft es die verschieben Funktion (_OL_ItemMove) nicht diesen kopierten Eintrag in den Zielordner zu verschieben.

    Ergebnis Original Eintrag plus kopierten Eintrag sind im Quellordner vorhanden.

    So wenn man das noch mal ausführen würde und es wieder nicht funktioniert erhält man vier Einträge. (exponential)

    Deshalb meine Anregung bei einem Fehler der verschieben Funktion die Kopie des Eintrags im Quellverzeichnis zu löschen.

    Der Ursprüngliche Eintrag ist dann ja immer noch vorhanden.

    In der Funktion steht es ja als Kommentar ja auch drinnen.

    ; Move the copied item to another folder


    P.S. wie kann man syntax highlighting im Forum erstellen? Mit Code funktioniert das nicht!?

    If not :?: then ?( else :thumbup:

  • Hast natürlich völlig Recht. Ich sollte aber auch bei _OL_ItemCopy nachsehen und nicht bei _OL_ItemMove :(
    Ich check das mal und poste eine neue Version.

  • P.S. wie kann man syntax highlighting im Forum erstellen? Mit Code funktioniert das nicht!?

    Das Syntax-Highlighting (für AutoIt Quellcode) funktioniert seit dem letzten Forumsupdate nicht mehr (noch ?!). Dies wurde auch bereits mehrfach im Update-Thread angesprochen, scheint aber offenbar nicht trivial zu sein es wieder zu aktivieren.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (1. März 2019 um 13:47)

  • Hier ist die aktualisierte Version von _OL_ItemCopy:

  • Habe die Änderungen in _OL_ItemCopy und _OL_AppointmentGet (neues Flag) in die UDF eingebaut und zum Download freigegeben.

    Edit: Und Dich in den relase notes auch als Fehlerjäger angeführt!