Yesterday I posted an article on how to create events in SalesForce programmatically. Now we will do the same thing for Google Calendar. The processes are nearly the same but it’s not as straightforward as the SalesForce one, specially on Event Creation and custom field extensions. One good thing though that Google has is a native .NET API that you can add to your project so you do not need to reference to the Google Calendar Web Service and the DLL handles it for you.
First, you need to download that API and add it in your .NET project. You need to install the Google_Data_API_Setup_{CurrentVerion}.msi and to refer to it, you need to browse to “C:\Program Files (x86)\Google\Google Data API SDK\Redist” on 64 bit machines and “C:\Program Files\Google\Google Data API SDK\Redist” on 32 bit machines by default.
You need to reference four main items for this scenario and it is as follows:
Now include that reference in your code:
using Google.GData.Client;
using Google.GData.Calendar;
using Google.GData.Extensions;
Then like what we had done with the SalesForce article, we need a method for login and here is the code snippet. Again, I provided a proxy setting in case you need it:
private CalendarService GAuthenticate()
{
string sGoogleUserName = "username";
string sGooglePassword = "password";
Uri oCalendarUri = new Uri("http://www.google.com/calendar/feeds/" +
sGoogleUserName + "/private/full");
CalendarService oCalendarService = new CalendarService("CalendarSampleApp");
oCalendarService.setUserCredentials(sGoogleUserName, sGooglePassword);
GDataRequestFactory oRequestFactory =
(GDataRequestFactory)oCalendarService.RequestFactory;
WebProxy oWebProxy = new WebProxy(
WebRequest.DefaultWebProxy.GetProxy(oCalendarUri));
oWebProxy.Credentials = CredentialCache.DefaultCredentials;
oWebProxy.UseDefaultCredentials = true;
oRequestFactory.Proxy = oWebProxy;
return oCalendarService;
}
Now let's go to the methods you need; on all of the methods discussed below, you will need GAuthenticate
to execute your methods.
1. Creating Calendar Entries in Google programmatically
Now if you noticed, we used four different object types unlike in SalesForce where we used only one object which is the SalesForceService.Event
. Here we have to define an Event
, Where
, When
, and ExtendedProperty
if you need one. ExtendedProperty
is a way of adding properties to objects programmatically, so in this case, we created a property called SynchronizationID
which will hold our GUID that you can use with other apps. Hint: I use this for my sync application.
EventEntry oEventEntry = new EventEntry();
oEventEntry.Title.Text = "Test Calendar Entry From .Net";
oEventEntry.Content.Content =
"Hurrah!!! I posted my first Google calendar event through .Net";
Where oEventLocation = new Where();
oEventLocation.ValueString = "New Zealand";
oEventEntry.Locations.Add(oEventLocation);
When oEventTime = new When(new DateTime(2011, 5, 31, 9, 0, 0),
new DateTime(2011, 5, 31, 9, 0, 0).AddHours(1));
oEventEntry.Times.Add(oEventTime);
ExtendedProperty oExtendedProperty = new ExtendedProperty();
oExtendedProperty.Name = "SynchronizationID";
oExtendedProperty.Value = Guid.NewGuid().ToString();
oEventEntry.ExtensionElements.Add(oExtendedProperty);
CalendarService oCalendarService = GAuthenticate();
System.Net.ServicePointManager.Expect100Continue = false;
oCalendarService.Insert(oCalendarUri, oEventEntry);
You might also notice the line “System.Net.ServicePointManager.Expect100Continue = false
” takes care of the HTTP 417 Error, which is explained here.
2. Searching Calendar Entries in Google programmatically
Searching is also straightforward, just use the EventQuery
properties to pass to the CalendarService.Query
method. Set EventQuery.Query
to the same query you use when you search for the calendar in Google.
You can also filter by date start and end by using the StartDate
and EndDate
properties.
CalendarService oCalendarService = GAuthenticate();
EventQuery oEventQuery = new EventQuery(oCalendarUri.ToString());
oEventQuery.Query = "Query String";
oEventQuery.StartDate = new DateTime(2011, 6, 5);
oEventQuery.EndDate = new DateTime(2012, 6, 5);
Google.GData.Calendar.EventFeed oEventFeed = oCalendarService.Query(oEventQuery);
foreach (EventEntry oEventEntry in oEventFeed.Entries)
{
string sEventTitle = oEventEntry.Title.ToString();
}
But if you want to search for the ExtendedProperty
like the SynchronizationID
we created on the event creation on step 1, then you need to use the ExtraParameters
property and use extq=[YourCutomProperty:TheValue]
to get what you need.
CalendarService oCalendarService = GAuthenticate();
EventQuery oEventQuery = new EventQuery(oCalendarUri.ToString());
oEventQuery.ExtraParameters = "extq=[SynchronizationID:Your GUID Here]";
Google.GData.Calendar.EventFeed oEventFeed = oCalendarService.Query(oEventQuery);
foreach (EventEntry oEventEntry in oEventFeed.Entries)
{
string sEventTitle = oEventEntry.Title.ToString();
}
3. Updating Calendar Entries in Google programmatically
Updating is straightforward, just search for the item and then use the CalendarService.Update
method.
CalendarService oCalendarService = GAuthenticate();
EventQuery oEventQuery = new EventQuery(oCalendarUri.ToString());
oEventQuery.ExtraParameters = "extq=[SynchronizationID:{Your GUID Here}]";
Google.GData.Calendar.EventFeed oEventFeed = oCalendarService.Query(oEventQuery);
foreach (EventEntry oEventEntry in oEventFeed.Entries)
{
oEventEntry.Title.Text = "Updated Entry";
oCalendarService.Update(oEventEntry);
break;
}
4. Deleting Calendar Entries in Google programatically
Deleting is straightforward as well, just search for the item and then use the CalendarService.Delete
method.
CalendarService oCalendarService = GAuthenticate();
EventQuery oEventQuery = new EventQuery(oCalendarUri.ToString());
oEventQuery.ExtraParameters = "extq=[SynchronizationID:{Your GUID Here}]";
Google.GData.Calendar.EventFeed oEventFeed = oCalendarService.Query(oEventQuery);
foreach (EventEntry oEventEntry in oEventFeed.Entries)
{
oEventEntry.Delete();
break;
}