Benutzer mit den meisten Antworten
Suchen eines Outlook Kalendereintrags anhand von 2 Kriterien via C#

Frage
-
Hallo liebe Gemeinde,
ich suche anhand von 2 Kriterien einen Kalendereintrag in Outlook 2007 und komme leider nicht weiter, hier mein Versuch:
Outlook.AppointmentItem KADD = (Outlook.AppointmentItem)olApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.Find("@SQL="+"\""+"urn:schemas:httpmail:subject="+ "\""+" 'Anfahrt " + Variablen.DNach + "' AND urn:schemas:calendar:dtend '"+"\""+Variablen.DDatum+"");
Könnte mir jemand bei der Syntax helfen?
Vielen lieben Dank schonmal! :)
Antworten
-
Hallo,
Alles eine Frage der DASL-Syntax bei der Erstellung der Filter-Zeichenfolge.
So funktioniert's bei mir (getestet unter Outlook 2003 und 2010):using System; using System.Windows.Forms; using Outlook = Microsoft.Office.Interop.Outlook; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Outlook.Application olApp = new Outlook.Application(); Outlook.NameSpace olAppSession = null; Outlook.AppointmentItem olAppointment = null; Outlook.MAPIFolder olCalendarFolder = null; try { var dNach = "Stuttgart"; var dDatum = "15.12.2012"; var daslQuery = "@SQL=(urn:schemas:httpmail:subject='Anfahrt {0}' AND urn:schemas:calendar:dtend >= '{1}')"; var filterString = String.Format(daslQuery, dNach, dDatum); olAppSession = olApp.Session; olCalendarFolder = olAppSession.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar); olAppointment = (Outlook.AppointmentItem)olCalendarFolder.Items.Find(filterString); if (olAppointment != null) { MessageBox.Show(String.Format("Betreff: {0}, Beginn: {1}, Ende: {2}", olAppointment.Subject, olAppointment.Start, olAppointment.End)); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { if(olApp != null) { if (olAppointment != null) { olAppointment.Close(Outlook.OlInspectorClose.olDiscard); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olAppointment); olAppointment = null; } if (olCalendarFolder != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olCalendarFolder); olCalendarFolder = null; } if (olAppSession != null) { olAppSession.Logoff(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olAppSession); olAppSession = null; } olApp.Quit(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olApp); olApp = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); } } } } }
Ein gutest Buch zum Thema ist das von Ken Slovak - Professional Outlook® 2007 Programming.
Der MSDN Code-Editor hat seine Macken. Du solltest dein CodeSchnippsel neu formatieren, so dass dein Code sichtbar wird. Sonst muss jeder, der was lesen möchte im HTML-Quelltext fünding werden. Und es ist leider so: Je länger man braucht, um das zu lesen/verstehen, was gepostet wurde, desto geringer sind die Chancen, dass sich jemand die Mühe macht zu antworten.
Gruß
Marcel- Als Antwort markiert NorthSouth Dienstag, 18. Dezember 2012 05:43
-
Hallo,
Kannst Du mir noch sagen wie ich die EntryID eines grade erzeugten Kalendereintrages auslesen kann?
Gerne. Indem Du zuerst das AppointmentItem speicherst, und dann die Eigenschaft EntryID auswertest:
var oAppointment = (Outlook.AppointmentItem)olApp.CreateItem(Outlook.OlItemType.olAppointmentItem); oAppointment.Save(); var entryID = oAppointment.EntryID;
Gruß
Marcel- Als Antwort markiert NorthSouth Dienstag, 18. Dezember 2012 05:44
Alle Antworten
-
Hallo,
Alles eine Frage der DASL-Syntax bei der Erstellung der Filter-Zeichenfolge.
So funktioniert's bei mir (getestet unter Outlook 2003 und 2010):using System; using System.Windows.Forms; using Outlook = Microsoft.Office.Interop.Outlook; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Outlook.Application olApp = new Outlook.Application(); Outlook.NameSpace olAppSession = null; Outlook.AppointmentItem olAppointment = null; Outlook.MAPIFolder olCalendarFolder = null; try { var dNach = "Stuttgart"; var dDatum = "15.12.2012"; var daslQuery = "@SQL=(urn:schemas:httpmail:subject='Anfahrt {0}' AND urn:schemas:calendar:dtend >= '{1}')"; var filterString = String.Format(daslQuery, dNach, dDatum); olAppSession = olApp.Session; olCalendarFolder = olAppSession.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar); olAppointment = (Outlook.AppointmentItem)olCalendarFolder.Items.Find(filterString); if (olAppointment != null) { MessageBox.Show(String.Format("Betreff: {0}, Beginn: {1}, Ende: {2}", olAppointment.Subject, olAppointment.Start, olAppointment.End)); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } finally { if(olApp != null) { if (olAppointment != null) { olAppointment.Close(Outlook.OlInspectorClose.olDiscard); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olAppointment); olAppointment = null; } if (olCalendarFolder != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olCalendarFolder); olCalendarFolder = null; } if (olAppSession != null) { olAppSession.Logoff(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olAppSession); olAppSession = null; } olApp.Quit(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(olApp); olApp = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); } } } } }
Ein gutest Buch zum Thema ist das von Ken Slovak - Professional Outlook® 2007 Programming.
Der MSDN Code-Editor hat seine Macken. Du solltest dein CodeSchnippsel neu formatieren, so dass dein Code sichtbar wird. Sonst muss jeder, der was lesen möchte im HTML-Quelltext fünding werden. Und es ist leider so: Je länger man braucht, um das zu lesen/verstehen, was gepostet wurde, desto geringer sind die Chancen, dass sich jemand die Mühe macht zu antworten.
Gruß
Marcel- Als Antwort markiert NorthSouth Dienstag, 18. Dezember 2012 05:43
-
Hallo Marcel,
ich werde das Ganze mal morgen oder spätestens Montag testen, ich denke aber das es unter der 2007er Version auch funktionieren wird.
Kannst Du mir noch sagen wie ich die EntryID eines grade erzeugten Kalendereintrages auslesen kann?
Ach ja, vielen Dank zum 2ten :)- Bearbeitet NorthSouth Samstag, 15. Dezember 2012 16:32
-
Hallo,
Kannst Du mir noch sagen wie ich die EntryID eines grade erzeugten Kalendereintrages auslesen kann?
Gerne. Indem Du zuerst das AppointmentItem speicherst, und dann die Eigenschaft EntryID auswertest:
var oAppointment = (Outlook.AppointmentItem)olApp.CreateItem(Outlook.OlItemType.olAppointmentItem); oAppointment.Save(); var entryID = oAppointment.EntryID;
Gruß
Marcel- Als Antwort markiert NorthSouth Dienstag, 18. Dezember 2012 05:44
-
Als ich die Frage gestellt habe, hab ich mir das fast gedacht [...]
Gerne, gerne und gerne ;-)
Es lag auf der Hand. Die Dokumentation zu AppointmentItem.EntryID ist in diesem Punkt ziemlich eindeutig:
"Ein Anbieter für MAPI-Informationsspeicher weist eine Zeichenfolge mit einem eindeutigen Bezeichner zu, wenn ein Element in diesem Informationsspeicher erstellt wird. Aus diesem Grund wird die EntryID-Eigenschaft für ein Outlook-Element erst festgelegt, wenn es gespeichert oder gesendet wird."