Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Filtrare gli AppointmentItem di Outlook con un criterio

Un piccolo tip che può magari servire anche a voi. Poco tempo vi ho parlato del mio RapportinoMaker, che unisce le funzionalità di Windows Mobile, Microsoft Excel Microsoft Outlook, un po' di C#, NHibernate e via dicendo. Arrivo al dunque. Mi serviva connettermi ad Outlook per contare le giornate lavorative all'interno di un determinato mese. Una giornata lavorativa è riconoscibile dall'oggetto dell'appuntamento. Ecco un pezzetto di codice per aprire Outlook ed ottenere un riferimento alla cartella del calendario:

Application outlookApp = new Application(); NameSpace outlookNS = outlookApp.GetNamespace("MAPI"); MAPIFolder theCalendar = outlookNS.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);

Detto questo, posso ottenere un riferimento agli appuntamenti inseriti nel calendario e ciclarli uno alla volta:

Items oFiltered = theCalendar.Items; foreach (AppointmentItem app in oFiltered) { // Faccio qualcosa... }

Non fatevi ingannare dal nome della variabile: oFiltered non filtra un bel nulla, perchè contiene un riferimento a tutti gli elementi inseriti nel calendario. Stasera mi sono detto: "Che schifo!!! Sistemiamo 'sta cosa...". Se questo software fosse di un cliente, lo lascerei così...del cliente non me ne importa nulla, ma siccome in questo caso il cliente sono io, beh...il discorso cambia un po'.

Via C# possiamo applicare un filtro, con una sintassi SQL-like, per restringere il set di oggetti AppointmentItem da esaminare. Non è nemmeno troppo complicato. E' bastato dichiarare una stringa criteria, alla quale ho assegnato:

criteria = string.Format("[Subject] = '{0}' AND ([Start] >= '{1}/01/{3}' AND [End] <= '{1}/{2}/{3}')", subject.ToUpper(), _maker.Month.ToString(), DateTime.DaysInMonth(_maker.Year, _maker.Month).ToString(), _maker.Year.ToString()); Items oFiltered = theCalendar.Items.Restrict(criteria);

E' una riga di C# un po' criptica, vista così. In pratica, vado ad iniettare nella stringa 4 stringhe diverse.
{0} è il subject degli appuntamenti (in pratica, dico di filtrare solo dove il subject è uguale a "AAA")
{1} è il mese su cui sto filtrando
{2} è l'ultimo giorno del mese che sto considerando, ottenuto con il metodo statico DaysInMonth della classe DateTime
{3} è l'anno su cui sto filtrando

Dopo aver inizializzato la variabile criteria, utilizzo il metodo Restrict sulla proprietà Items ed il gioco è fatto: questa volta oFiltered contiene gli appuntamenti che corrispondono solo ai criteri impostati nel filtro. Meglio di così!!! Il risultato è ovviamente stupefacente. Prima ciclavo qualcosa come 500 appuntamenti in Microsoft Outlook, adesso invece vado dritto sugli appuntamenti che mi interessano. Forte!!!

Print | posted on lunedì 19 febbraio 2007 23:58 | Filed Under [ Sviluppo .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET