Hooking into your Google Apps With the RSSBus Google Data Provider


 image001.jpg

Introduction

The world is full of information and there are all kinds of ways to access it. The Microsoft .NET framework provides several convenient ways to access data from different data sources, whether it's an XML file, a web stream, or a database. For databases, Microsoft offers several techniques for retrieving the data. One of the simplest forms is through an ADO.NET Data Provider. The Data Provider architecture gives us an easy way to extract data from a table and put it in an in-memory data structure called a DataSet. ADO.NET also provides a way to perform other common database tasks such as querying the data or calling stored procedures. If you have used ADO.NET in the past, you are probably familiar with using a Data Provider to control data inside a database. But what if you want to access data that is not available in a database? What if you want to find data that is inside your Google account? Is there a way to access Google account data through the ADO.NET mechanism many of us are already using? Fortunately the answer is a resounding "yes!". That choice is available through the RSSBus Google Data Provider which works like any other Data Provider, as you will soon find out.

Installing the Software

Installing the RSSBus Google DataProvider walks you through like most wizards these days. Just launch the executable and follow the steps. The only unusual part is that you are prompted for the registration keys twice: once from the web when downloading the installer, and again while running the executable. When I asked the company about the dual registration, RSSBus has indicated that customers are provided with direct links and a customer would only have to enter the serial number and registration key once.

You are also required to run a registry file for desktop applications. Because this is a developer application, the registry file is not too inconvenient, but it should probably be made more transparent in the future.    In the case of ASP.NET apps, RSSBus has alternative licensing available that does not require registry access for deployment such as shared server support.

 

The Data Provider Schema

The RSSBus Google Provider is laid out similarly to a SqlServer database with Tables, Views, and Stored Procedures. Tables consist of Calendar, ContactGroups, and Contacts which gives you access to Google's online calendar and contacts. Views consist of Google Docs which consist of Documents, MailMessages, SpreadSheets, and Worksheets. As you can see, the Views give you access to practically every other Google online application including GoogleDocs and Gmail. The stored procedures also supply a rich set of tools to use with Google applications enabling you to perform functions like a Google search, or to export GoogleDocs to Microsoft Word.

Using the Data Provider

Once the DataProvider is installed, it works just like a Sql Data Provider.This is great, because you can access the RSSBus Google Provider directly from Server Explorer, giving you all the drag and drop magic you are used to with other Data Providers. For example, you can create a new connection to a Google account simply by choosing the RSSBus Data Source as shown in figure 1:

image002.jpg

Figure 1 - Choosing the RSSBus Google Data Souce in Server Explorer

Then you can create a connection as you would any other Sql Connection; you just use your Google account credentials instead:

image003.jpg

Figure 2 - Filling in the Google Account Information

 

Once you hit Test Connection and it succeeds, you are all hooked up to Google and ready to go. You can immediately examine your data through Server Explorer and begin to imagine all the cool applications you can create for Google users. For example, the RSSBus Google Provider shows all my contact information from Google if I right click on contacts and retrieve the data:

image004.jpg

Figure 3 - Retrieving Contact Data Directly from a Google Account in Server Explorer

I could easily drag the Contacts table onto a Windows Form and bind it to a Data Grid, giving me an instant application that allowed me to organize my contact information from Google. Or I could create an ASP.NET web page that does the same thing. Although I don't know if I'd want to share all my Google contacts with the world, I could filter just those contacts I wanted to make available through a password protected site. Consider another scenario: Let's say I wanted to list all the people in my company's sales department on a page on the web. I could use the RSSBus Google Data Provider to query just the contacts in my sales ContactGroup and put them in the sales page. Anytime I hired new salesman (or lost an existing salesman), I could just change my Google ContactGroups and the page would auto-magically update itself to reflect the new information. You might say, "Well I can just as well do that in a database".  That's true, but if you are using the convenient web interface of Google to change contacts all the time, this is a way more convenient solution.

Query Limitations

Before delving further into an example of using the RSSBus Google Provider, it's important to understand that there are limitations to what you can do with a non-database provider as opposed to a provider that internally calls the Google API.  Here are some of them:

  • Table joins are not supported.
  • Table aliases are not supported.
  • GROUP BY, HAVING, ORDER BY clauses and nested statements are not supported at the time of this article (though the developers assured me that support for these queries will be available soon).
  • Scalar or aggregation functions are not supported.

The Data Provider does support Selects and Where clauses. Fortunately, this would be sufficient most of the time because I can manipulate the items above through LINQ once I have the requested data from the RSSBus Data Provider.  

 

The Code

If you are already familiar with using the Sql Data Provider, than using the RSSBus Google Data Provider is fairly straightforward. Listing 1 is a snippet from RSSBus's sample code for connecting Google Calendar Data to a Grid in your ASP.NET web page:

Listing 1 - Binding the RSSBus DataSource to a GridView in ASP.NET

  <asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="False"

            DataSourceID="GoogleDataSource" BorderStyle="Dotted" BorderWidth="2px"

            CellPadding="3" CellSpacing="3">

            <Columns>

                <asp:BoundField DataField="where" HeaderText="Where"

                    SortExpression="where" />

                <asp:BoundField DataField="authoremail" HeaderText="AuthorEmail"

                    SortExpression="authoremail" />

                <asp:BoundField DataField="description" HeaderText="Description"

                    SortExpression="description" />

                <asp:BoundField DataField="endtime" HeaderText="EndTime"

                    SortExpression="endtime" />

                <asp:BoundField DataField="starttime" HeaderText="StartTime"

                    SortExpression="starttime" />

                <asp:BoundField DataField="id" HeaderText="Id" ReadOnly="True"

                    SortExpression="id" />

                <asp:BoundField DataField="title" HeaderText="Title"

                    SortExpression="title" />

            </Columns>

        </asp:GridView>

        <asp:SqlDataSource ID="GoogleDataSource" runat="server"

            ConnectionString="<%$ ConnectionStrings:GoogleConnectionString %>"

            ProviderName="<%$ ConnectionStrings:GoogleConnectionString.ProviderName %>"

            SelectCommand="SELECT * FROM [Calendar.rsd]"></asp:SqlDataSource>

 

Remember: You will also need to list the connection string in the  web.config file:

 

                                  <add name="GoogleConnectionString" connectionString="Location=C:\Program Files (x86)\RSSBus\RSSBus Google Data Provider\db;[email protected];Password=csharpcornerrocks" providerName="System.Data.RSSBus.Google"/>

 

 

 

As you can see, there is little difference between binding a Sql Server data source and a RSSBus Data Source.  The only detail that I didn't recognize in the sample code is that the table name has an rsd extension, but removing the extension did not seem to affect the application. Figure 4 shows part of the resulting page with the minimum coding shown in Listing 1.

 


Where

AuthorEmail

Description

EndTime

StartTime

Id

Title

Liberal Arts and Science Academy (LASA) HS at 7309 Lazy Creek Drive,. Austin, TX 78724

[email protected]

Hi Bob, Just wanted to pass this on as an opportunity for the Robot Club here in Austin. Best, -Mike (an education based community service announcement) What : Judges Needed for FIRST LEGO League (FLL) Robotics Tournament When : Saturday, November 13th & Sunday, November 14th 7AM – 5PM (Volunteer one day or both days) Where : Liberal Arts and Science Academy (LASA) HS at 7309 Lazy Creek Drive,. Austin, TX 78724 On Saturday, November 13 and Sunday, November 14th, 2010, the Liberal Arts and Scienc... P

11/14/2010 12:00:00 AM

11/13/2010 12:00:00 AM

http://www.Google.

Judges Needed for FIRST LEGO League (FLL) Robotics Tournament

 

Figure 4 - The Google Calendar Data Displayed in a GridView bound to the RSSBus Google Data Provider


 

Let's look at a C# example in a Windows Form Application. Figure 5 is a sample Google Docs app supplied with the RSSBus demo. This begins to show us the range of capabilities provided by RSSBus for writing desktop apps.

 

image005.jpg

Figure 5 - A Google Docs Windows Form App

 

Now let's examine the code behind this Google App. Again, if you understand how to use a Sql Provider in ADO.NET and the rich class set in ADO.NET, then the learning curve for access to Google Docs is not steep.

 

Listing 2 - ADO.NET code in a Windows Form to Display Google Doc List

  private BindingSource GoogleDocsSource = new BindingSource();

    private string connectionString;

    private GoogleDataAdapter dataAdapter = new GoogleDataAdapter();

    private string selectCommand = "SELECT Name,AuthorName,Kind,Updated,Weblink from Docs";

 

    private void GetData()

    {

      try

      {

        Cursor.Current = Cursors.WaitCursor;

        dgvDocs.DataSource = GoogleDocsSource;

        GoogleConnection conn = new GoogleConnection(connectionString);

        dataAdapter = new GoogleDataAdapter(selectCommand, conn);

        GoogleCommandBuilder commandBuilder = new GoogleCommandBuilder(dataAdapter);

        dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

        DataTable table = new DataTable();

        dataAdapter.Fill(table);

        GoogleDocsSource.DataSource = table;

        dgvDocs.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

      }

      catch (Exception ex)

      {

        MessageBox.Show(ex.Message);

      }

      finally

      {

        Cursor.Current = Cursors.Default;

      }

    }

 

Notice that we fill a DataTable just like we would in any other Sql Data Provider application. We create a connection with the GoogleConnection object, passing it a connection string. We then create an adapter that takes a query string and the connection object. We use the adapter to fill a data table and then we bind the data table to a data grid.

The Google RSSBus Provider also has a set of stored procedures that provide additional features for extracting your online Google Docs. Listing 3 illustrates the use of a stored procedure that allows you to download a Google doc into other file formats. I was impressed by the number of formats the stored procedure supported through the underlying Google API. For example, for spreadsheets it supports exporting into txt, csv, and even xls format. For documents it supports exporting into pdf, doc, rtf, odt, and html format. Listing 4 illustrates how simple it is to call the ExportGoogleDoc stored procedure from the RSSBus Google Data Provider.

Listing 4 - Exporting a Document from Google Docs to the Desktop

    try

      {

        SaveFileDialog saveDialog = new SaveFileDialog();

        saveDialog.Filter = "All Files (*.*)|*.*|CSV (*.csv)|*.csv|DOCX (*.docx)|*.docx|HTM (*.htm)|*.htm|HTML (*.html)|*.html|PDF (*.pdf)|*.pdf|PPT (*.ppt)|*.ppt|TXT (*.txt)|*.txt|XLSX (*.xlsx)|*.xlsx";

        saveDialog.Title = "Select the location to download.";

        saveDialog.FileName = dgvDocs.Rows[dgvDocs.SelectedCells[0].RowIndex].Cells["Name"].Value.ToString();

        saveDialog.RestoreDirectory = true;

        if (saveDialog.ShowDialog() == DialogResult.OK)

        {

          Cursor.Current = Cursors.WaitCursor;

          GoogleConnection conn = new GoogleConnection(connectionString);

          GoogleCommand cmd = new GoogleCommand("ExportGoogleDoc", conn);

          cmd.CommandType = CommandType.StoredProcedure;

          cmd.Parameters.Add(new GoogleParameter("Type", new System.IO.FileInfo(saveDialog.FileName).Extension.Substring(1)));

          cmd.Parameters.Add(new GoogleParameter("Name", dgvDocs.Rows[dgvDocs.SelectedCells[0].RowIndex].Cells["Name"].Value.ToString()));

          cmd.Parameters.Add(new GoogleParameter("LocalFile", saveDialog.FileName));

          cmd.ExecuteNonQuery();

          MessageBox.Show("File Downloaded.");

        }

      }

      catch (Exception ex)

      {

        MessageBox.Show(ex.Message);

      }

      finally

      {

        Cursor.Current = Cursors.Default;

      }

 

As you may have deduced from figure 5, you can also use the provider to upload documents from your desktop to Google. For example, you could probably create a Word Add-In that seamlessly exports your word documents to your Google account. The import stored procedure code to call UploadGoogleDoc is implemented in much the same way as the export procedure code since it is using the same techniques to call a stored procedure using ADO.NET. The upload procedure just requires a path to the local file you are uploading as a parameter.

Listing 3 - Importing a Document into Google

      try

      {

        OpenFileDialog openDialog = new OpenFileDialog();

        openDialog.Filter = "All Files (*.*)|*.*";

        openDialog.Title = "Select a file to upload.";

        openDialog.RestoreDirectory = true;

        if (openDialog.ShowDialog() == DialogResult.OK)

        {

          Cursor.Current = Cursors.WaitCursor;

          GoogleConnection conn = new GoogleConnection(connectionString);

          GoogleCommand cmd = new GoogleCommand("UploadGoogleDoc", conn);

          cmd.CommandType = CommandType.StoredProcedure;

          cmd.Parameters.Add(new GoogleParameter("LocalFile", openDialog.FileName));

          cmd.ExecuteNonQuery();

          GetData();

        }

      }

      catch (Exception ex)

      {

        MessageBox.Show(ex.Message);

      }

      finally

      {

        Cursor.Current = Cursors.Default;

      }

 

Caching

You'll notice when using the provider that it can sometimes be a little slow due to the inherent latency of the underlying Google API. The RSSBus Provider comes with some caching functionality to help speed up performance. The cache allows the Data Provider to query against a local database on the user's machine. The RSSBus Data Provider allows you to explicitly cache data by use of the CACHE statement. Alternatively, you can set the RSSBus Data Provider to auto-cache by setting AutoCache to true in your connection string.The RSSBus Data Provider also provides a third caching option called offline. In offline caching, the user can execute all CRUD statements against the user's local cached database. To use offline mode, just set offline to true in your connection string:

GoogleConnection myConnection = new GoogleConnection("Location=/mydb;Offline=true;User=mgold45;Password=password");

 

The QuickBooks RSSBus Data  Provider

The Google Data Provider is not the only software that RSSBus provides. There is also an RSSBus QuickBooks Provider. The QuickBooks provider gives us the same convenient ADO.NET rich class set for querying and manipulating the data inside of QuickBooks. With the Provider the user has access to the all of the following QuickBooks Schema Components: Accounts, Bills, Checks, CreditMemos, Customers, Invoices, JournalEntries, PurchaseOrders, SalesOrders, SalesReceipts, and Vendors. The stored procedures in the RSSBus for QuickBooks allow you to search for particular transactions. This is useful if you want to find transactions for a particular account or find transactions that fall within a particular date range. Like the RSSBus Data Provider for Google, the QuickBooks has an offline and caching option as well. In the QuickBooks Data Provider, you can also provide a URL in the connection string if you want to communicate with QuickBooks remotely.

Conclusion

If you are a .NET programmer, you often find yourself looking for solutions to problems that allow you to leverage the .NET framework. If you have a project that requires you to manipulate data in a Google account or a group of Google accounts, the Google RSSBus Data Provider gives you an easy way to use what you already know. With RSSBus you can use ADO.NET and SQL to manipulate all of the applications available on Google. Whether it's for the desktop or the web, you can use this convenient mechanism to create Google-enhanced applications. If you are curious to experiment with the RSSBus for either Google or QuickBooks, you can download a trial version and give it a try from the RSSBus website. The cost of the Google RSSBus Data Provider is $299 as of this writing. The QuickBooks RSSBus Data Provider is $399. Once you purchase the components, they are royalty free to distribute with your application. If you are looking for a well-organized component for exercising the rich online applications provided by Google, your search is over: RSSBus gives you everything you need to mine the Google landscape.


Similar Articles