depicus

changing the digital world one bit at a time...

Blants (noun) the rants of a blogger

Create a vCal in dot.net

March 2, 2010 by The Man

I am in the process of updating a project we started 6 years ago. One of the functions was to add a diary event to Outlook. At the time there was a simple method of automation to add events directly to Outlook but in this day and age there are two problems with this approach

1. Automation of other applications is becoming more and more complex, having to jump through security hoops and then explain that to end users is just to much hard work.

2. Outlook may be king now but providing solutions that work with multiple suppliers software is the way forward.

This snippet now allows us to create a calendar event and open so the user can check and confirm, not the neatest solution but it works.

Dim myICal As New StreamWriter("event.vcs")
Dim sDate As Date = Convert.ToDateTime(edtOn.Text + " " + edtAT.Text)
Dim eDate As Date = DateAdd(DateInterval.Hour, 1, Convert.ToDateTime(edtOn.Text + " " + edtAT.Text))
Dim myLocation As String = lblView.Text
Dim mySubject As String = lblFor.Text
Dim myDescription As String = "Event details: Check server is started"

'Create the vCal
myICal.WriteLine("BEGIN:VCALENDAR")
myICal.WriteLine("PRODID:-//Digital Wired Limited.//Agency Manager Professional//EN")
myICal.WriteLine("BEGIN:VEVENT")
myICal.WriteLine("DTSTART:" & sDate.ToUniversalTime.ToString("yyyyMMddTHHmmssZ"))
myICal.WriteLine("DTEND:" & eDate.ToUniversalTime.ToString("yyyyMMddTHHmmssZ"))
myICal.WriteLine("LOCATION:" & myLocation)
myICal.WriteLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" & myDescription)
myICal.WriteLine("SUMMARY:" & mySubject)
myICal.WriteLine("PRIORITY:2")
myICal.WriteLine("END:VEVENT")
myICal.WriteLine("END:VCALENDAR")
myICal.Close()

System.Diagnostics.Process.Start("event.vcs")

That’s it, not pretty but functional.