Outlook-Kalendereinträge abfragen

  • Guten Morgen,

    ich habe mich noch nicht reingekniet, aber denke, dass ich am Wochenende dazu kommen. Um aber nicht Zeit zu verlieren (ja, ich bin ungeduldig ;) ), wollt ich heir schon mein Vorhaben kundtun und um Hinweise bitten.
    Nur Hinweise, welche Befehle, welche Funktionen usw.

    Ich möchte per geplante Aufgabe die Exe aufrufen. Jeden Freitag.
    Das Script soll einen Kalender überprüfen und eine Zusammenfassung an bestimmte Personen per Mail schicken.

    Hintergrund:
    Ich habe mehrere Kalender in meinem Outlook 2010 (ExchangeKonten) und mehrere öffentliche Kalender.
    Der öffentliche Kalender, um den es geht heißt "Technik".

    Meine Kollegen und ich müssen uns am Donnerstag eintragen, wer um 8 Uhr die darauffolgende Woche ans Telefon geht und wer bis 18 Uhr bleibt, um ans Telefon zu gehen. Hotline muss immer besetzt sein.
    So gibt es jeden Werktag zwischen 7 und 8 Uhr einen Eintrag, der so aufgebaut ist:
    LR ab 8 Uhr oder auch AG/LR ab 8 Uhr
    LR und AG sind unsere Mitarbeiterkürzel.
    Bei 18 Uhr sieht es immer so aus:
    LR bis 18 Uhr oder auch PS/AG bis 18 Uhr

    Dieses Schema bleibt gleich, nur die Kürzel ändern sich und um die Übersicht zu wahren muss der Termin im Block zwischen 7 und 8 Uhr sein.
    Das ist aber leider nicht einheitlich. Mal trägt einer den Termin von 7-7:30 Uhr, 7:30-8 Uhr und mal von 7-8Uhr ein (Termindauer).
    Das bedeutet, dass meine Suche auf den Terminbetreff-String "ab 8 Uhr" zwischen 7 und 8 Uhr reagieren muss. Und dann zwischen 18 und 19 Uhr "bis 18 Uhr"

    Die Auswertung soll dann eine Übersicht erstellen
    Spalte1 Überschrift: Wochentag, Spalte 2 Überschrift 8 Uhr-Schicht, Spalte 3 Überschrift 18 Uhr-Schicht
    Inhalt als Beispiel:
    Montag - LR - PS/AG
    (also nur die Kürzel)

    Sollte kein Eintrag vorhanden sein, deswegen ja überhaupt die Prüfung, so soll in der Zelle dick fett und in rot :rolleyes: stehen "kein Eintrag".
    Und das dann bitte noch an mehrere Email-Empfänger.

    Soviel zur Theorie.

    Ich weiß, dass ich natürlich mehrere Au3s aus dem Paket Outlook (OutlookEX.au3) brauche.
    _OL_ReminderGet - Kalendereintrag finden
    _OL_AccountGet - mein persönliches Konto auswählen zum Mailversand (ist das Standardkonto)
    Ein Array.au3 werd ich bauen.
    Öhm und das wars oder?

    Vielen Dank für eure Idee. Ich schau regelmäßig rein, um Fragen zu beantworten und dann morgen/Sonntag gehts los.
    LG, Xethria

    Einmal editiert, zuletzt von Xethria (11. Mai 2012 um 09:26)

  • Um Kalendereinträge zu suchen brauchst Du:

    _OL_FolderAccess (Zugriff auf den zu durchsuchenden Kalender-Folder)
    _OL_ItemFind (Suche nach Kalendereinträgen im vorher usgewählten Folder eingegrenzt nach Datum (Start- und Enddatum oder Inhalt oder ...)

    _OL_ReminderGet und _OL_AccountGet brauchst Du nicht.

  • Oh, vielen Dank für deine Antwort. Hab auch gerade bemerkt, dass ich noch bei der Version 0.6.0 bin. :) Ma eben neue Version ziehen.

  • Okay, hab schon angefangen. Mittagspause verbraten. Der Anfang funkt schon nicht.
    Der Zugriff.
    Wie lautet die Zeile um auf den Kalender zuzugreifen der Technik heisst?

  • [autoit]

    #include <OutlookEX.au3>
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "*\Technik")
    Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1], $olAppointment, ....)

    [/autoit]
  • Klappt nicht.
    $aFolder hat nicht meinen Kalender Technik inne.
    Mit Global $aFolder = _OL_FolderAccess($oOutlook, "*\Technik") ist das Array leer. Wird einfach nicht angezeigt.
    Mit Global $aFolder = _OL_FolderAccess($oOutlook, "*\Kalender") Bekomm ich ein Array mit IDs und Pfad.

    Spoiler anzeigen
    [autoit]

    #include <OutlookEX.au3>
    #include <array.au3>
    Global $oOutlook = _OL_Open()
    Global $aFolder = _OL_FolderAccess($oOutlook, "*\Kalender")
    _ArrayDisplay($aFolder)

    [/autoit]

    Das ist ein öffentlicher Kalender, den ich in meine Übersicht übernommen habe.

    Einmal editiert, zuletzt von Xethria (11. Mai 2012 um 14:10)

  • Per MsgBox bekommst Du von $aFolder auch keinen Inhalt, da es ein Array sein sollte.

  • Wenn es ein öffentlicher Kalender ist, dann musst Du den kompletten Pfad angeben. Also das, was in der Folder-Übersicht links im Ooutlook angezeigt wird z.B. "Öffentliche Ordner\Technik".

    [autoit]

    #include <OutlookEX.au3>
    Global $oOutlook = _OL_Open()
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_Open. @error = " & @error & ", @xtended = " & @extended)
    Global $aFolder = _OL_FolderAccess($oOutlook, "Öffentliche Ordner - [email='blubb@bla.de'][/email]\Alle Öffentlichen Ordner\Technik", $olFolderCalendar)
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_FolderAccess. @error = " & @error & ", @xtended = " & @extended)
    Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1], $olAppointment, ....)
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_ItemFind.
    @error = " & @error & ", @xtended = " & @extended)

    [/autoit]
  • Error 1.

    Der Ort ist:
    \\Öffentliche Ordner - blubb@bla.de\Alle Öffentlichen Ordner\Technik
    Aber auch mit Error 1
    \\Öffentliche Ordner - blubb@bla.de\Favoriten\Technik

    Spoiler anzeigen
    [autoit]

    #include <OutlookEX.au3>
    Global $oOutlook = _OL_Open()
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_Open. @error = " & @error & ", @xtended = " & @extended)
    Global $aFolder = _OL_FolderAccess($oOutlook, "\\Öffentliche Ordner - [email='blubb@bla.de'][/email]\Alle Öffentlichen Ordner\Technik")
    _ArrayDisplay($aFolder)
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_FolderAccess. @error = " & @error & ", @xtended = " & @extended)

    [/autoit]
  • Das geht sicher:
    "Öffentliche Ordner - blubb@bla.de\Alle Öffentlichen Ordner\Technik"

  • Nein leider nicht. :( Kann ich dir technische Infos geben? Vielleicht muss dafür noch was gemacht werden. Aber ich habe definivtiv Error 1.

  • Habe Post 8 angepasst. Sollte nun funzen.

  • Eintrag angepasst nun:
    _FolderAccess
    Error: 4, @xtended = - 2147352567
    Was heisst das?

    Nachtrag:
    Was mich wundert. Wenn ich das auf meinen eigenen Kalender losschicke. Ist das Array an Position 1 leer. 0 ist die Anzahl. Und 5 der Pfad. Was müsste an 1 stehen?
    Denn der Befehl:
    Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1])
    _ArrayDisplay($aItems)
    gibt nix zurück.

    Einmal editiert, zuletzt von Xethria (11. Mai 2012 um 15:43)

  • Fehler 4 heisst: Specified folder could not be found
    Wie gibst Du den Folder genau an?

  • Nachtrag:
    Was mich wundert. Wenn ich das auf meinen eigenen Kalender losschicke. Ist das Array an Position 1 leer. 0 ist die Anzahl. Und 5 der Pfad. Was müsste an 1 stehen?
    Denn der Befehl:
    Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1])
    _ArrayDisplay($aItems)
    gibt nix zurück.

    Element 1 ist nicht leer sondern enthält das Object zum Folder. Die genaue Beschreibung der Rückgabedaten sowie Fehlermeldungen findest Du in den Help-Files oder im UDF im Header der Funktionen.

  • Also.
    Dies klappt mit meinem Kalender. Das mit dem Öffentlichen klappt auch.
    Nun die Suche besser einbauen. Der Eintrag von heute mit dem Ort Room wird gefunden. Ich tu mir bissel schwer $sOL_Restrict zu setzen, aber ich bin dran. Vielen Dank für deine Hilfe soweit.

    Spoiler anzeigen
    [autoit]

    #include <OutlookEX.au3>
    Global $oOutlook = _OL_Open()
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_Open. @error = " & @error & ", @xtended = " & @extended)
    Global $aFolder = _OL_FolderAccess($oOutlook, "*\Kalender", $olFolderCalendar)
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_FolderAccess. @error = " & @error & ", @xtended = " & @extended)
    _ArrayDisplay($aFolder)
    Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1], $olAppointment, "", "Location", "Room", "EntryID,Subject,Location", "", 1)
    If @error then Exit MsgBox(16, "Error", "Error bei _OL_ItemFind. @error = " & @error & ", @xtended = " & @extended)
    _ArrayDisplay($aItems)

    [/autoit]

    Edit:
    Global $aItems = _OL_ItemFind($oOutlook, $aFolder[1], $olAppointment, "", "Subject", "ab 8 Uhr", "EntryID,Subject", "", 1)
    funktioniert auch! :)

  • Beschreib mal in Worten wie/wonach Du genau suchen willst.

  • Ich meine, dass ich das im ersten Beitrag beschrieben habe. Oder reden wir aneinander vorbei?
    Das Script wird jeden Donnerstag ausgeführt. Es soll die darauffolgende Woche jeden Tag nach zwei Einträgen überprüfen. Es soll immer ein "ab 8 Uhr" und ein "bis 18 Uhr" vorhanden sein. Wenn nicht, ist das ein Fehler worauf ich ja prüfen möchte.

  • Oder reden wir aneinander vorbei?

    Da Du von der Venus bist und ich vom Mars, ist das ja nicht wirklich unwahrscheinlich :whistling:
    Aber ernsthaft. Ich habe das schon öfter erlebt, dass der OP im Laufe der Diskussion mehr Einblick in das Thema bekam und sich dadurch seine Anforderungen etwas veränderten. Ich sichere mich daher mit Rückfragen immer wieder gerne ab.

    Du musst also auf jeden Fall das Start und Enddatum der Woche berechnen die Du durchsuchen willst.
    Im Parameter $sOL_Restrict steht dann z.B. "[Start]>'2012-05-14 00:00' And [End]<'2012-05-18 23:59'" und im $sOL_SearchName steht dann "Subject" und im $sOL_SearchValue steht dann "ab 8 Uhr".

    Wobei ich mich frage, ob es nicht einfacher wäre, Anfangs und Endzeit des Termines selbst richtig zu setzen und diesen dann abzufragen. Denn eigentlich werden Kalender so rum verwendet.

  • So schnell vergehen die Tage... der Beruf kann manchmal ganz schön ein Ar*** sein.

    Da bis zu 6 Kollegen dort was eintragen, was nur der Übersicht dient, kann es keinen einheitlichen Termin geben. Er aber definitiv zwischen halt 7-8 Uhrund 18-19 Uhr ist. Ich versuch mal das, was du geschrieben hast einzubauen. Vielen Dank dafür.

    Einmal editiert, zuletzt von Xethria (21. Mai 2012 um 14:41)