GeoAnalyzer for SharePoint Online - Software + Services in action..

March 31st, 2009

Over the last few weeks we have been working on extending rich visualization applications for cloud based platforms. With SharePoint Online, Silverlight and Microsoft’s Azure platform the opportunities to build incredible applications that live in the cloud, integrate data in the cloud (with SQL Data Services) and enable workflow and collaboration is very real.

As we started working on extending our product suite for SharePoint online, it is very clear that when architected correctly, applications built for on premise should be able to be extended for the cloud. I will focus on the value proposition, our thoughts on cloud based solutions and specifically leverging the Microsoft cloud infrastructure in a future post.

In today’s post, I do want to let you know that we have released a version of GeoAnalyzer for SharePoint online. GeoAnalyzer for SharePoint Online consumes data stored in SharePoint Online lists and allows users to visualize and analyze data right in SharePoint Online. You can view a solution brief created by Microsoft about GeoAnalyzer here

-Raheel

Building Silverlight based custom web parts for SharePoint that communicate with backend databases

February 8th, 2009

Today, I would like to discuss the technical direction we have taken for Monitor Analytics GeoAnalyzer which was built using Silverlight and web services in ASP.NET 3.5.

A Silverlight application communicates to an ASP.NET 3.5 web application using Web Services in order to achieve the task of talking to databases, registry, and reading / writing of files. The above would have been complex to acheive in Silverlight flawlessly as those tasks are executed in  a web application. Web Services are the medium that connects Silverlight and ASP.Net 3.5 applications.

GeoAnalzyer for SharePoint is a SharePoint webpart that is built in Silverlight mashing Virtual Earth with data from a SQL Server. It was important to fully leverage Web Services in order to provide the ability to

The steps below describe in detail how web services are used in Silverlight based custom SharePoint web parts that communicate with databases:

A. Creating an ASP.NET Web Service(.asmx) in Visual Studio

  1. Create a web application project.
  2. Add Service.asmx file using feature ‘Add New Item’. (Please note the Class name here)
  3. Assign Strong name key to web application using properties of project.
  4. Build Web Application.
  5. Deploy the dll in Global Assembly Cache.
  6. Open the service.asmx file
  7. Replace the existing WebService directive with (Note. In Service.asmx, provide class name , namespace and public key token)
    <%@ WebService Language=”C#” Class=”MAGeoAnalyzerService, MA.GeoAnalyzerWeb,Version=1.0.0.0,  Culture=neutral, PublicKeyToken=Az2dca340f2dok8″ %>
  8. Make web application project start up file  to MAGeoAnalyzerService.asmx
  9. Run the web application project once by pressing F5 and note the URL. Provide this URL in Disco command in following step.

B. Generating and Modifying Static Discovery and WSDL Files

  1. Go to Start -> All Programs ->Microsoft visual studio 2008 ->Visual Studio Tools -> Visual Studio 2008 Command Prompt
  2. Provide your web service URL with Disco.exe here (Example. disco.exe http://localhost:12881/Monitor GeoAnalyzerWeb/MAGeoAnalyzerService.asmx)
  3. WSDL & DISCO file would be generated.
  4. Move WSDL & DISCO files from the solution folder to your project folder (we did search for disco file, “MAGeoAnalyzerService.disco”).
  5. In WSDL & DISCO file

Replace

<?xml version=1.0 encoding=utf-8?>

       With

<%@ Page=“” Language=C# Inherits=System.Web.UI.Page %>

<%@ Assembly=“” Name=Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral,PublicKeyToken=71e9bce111e9429c %>

<%@ Import=“” Namespace=Microsoft.SharePoint.Utilities %>

<%@ Import=“” Namespace=Microsoft.SharePoint %>

<% Response.ContentType = text/xml“; %>

 

6      In .DISCO file replace existing contract reference and SOAP address tags

<contractRef ref=“”<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request) + ?wsdl“),Response.Output); %>

docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>

xmlns=”<http://schemas.xmlsoap.org/disco/scl/>” />

<soap address=“”<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>

xmlns:q1=”<http://tempuri.org/>” binding=”q1:HelloWorld”

xmlns=”<http://schemas.xmlsoap.org/disco/soap/>” />

<soap address=“”<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %>

xmlns:q2=”<http://tempuri.org/>” binding=”q2:ServiceSoap12″ xmlns=”http://schemas.xmlsoap.org/disco/soap/>” />

7      In the .wsdl file, make the following similar substitution for the SOAP address that is specified

<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />

8      Rename both files in the respective formats servicedisco.aspx and servicewsdl.aspx so that your service is discoverable through Windows SharePoint Services.

C. Copying the Web Service Files to the _vti_bin Directories

  1. Copy the MAGeoAnalyzerService.asmx, MAGeoAnalyzerServicedisco.aspx, MAGeoAnalyzerServicewsdl.aspx files to c:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI Now you can go to any of the existing SharePoint site in Internet information Services(inetmgr) and go to _vti_bin folder and select your .asmx file and browse it.

     

Thus, the web service created using the above procedure can be deployed in any of the SharePoint site on Internet Information Services(inetmgr) and can be used by any of the port of the site. This will work for Windows Server 2003, Windows Server 2008 Operating system and Windows 7.

Reference used : http://msdn.microsoft.com/en-us/library/ms464040.aspx

-Idrees

Modifications to web.config when installing web parts built with .Net Framework 3.5

February 6th, 2009

One of the key goals we have when designing our products is that in addition to the enhanced experience for the end users, our products should also provide enhanced experience for the IT professional responsible for installing and configuring Monitor Analytics products. In that regard, we have made sure to provide easy set up as well as any needed config utilities to ensure the set up and installation process is as seamless as possible.

OLAP Filter, one of Monitor Analytics products is built using .Net Framework 3.5 which requires some key changes to the web.config file of the SharePoint virtual directorty that OLAP Filter is installed in. We provide a utility for the IT administrator that can be executed in your SharePoint virtual directory. This utility will make all the appropriate changes to your web.config that will allow SharePoint to work with applications built with .Net Framework 3.5. In this post, I will detail the changes needed in the web.config that our utility automatically takes care of.

OLAPFilter web part was built using asp.net 3.5 (including tree view structure).

All these settings are pertaining to the latest asp.net 3.5 and SP1. Without these setting custom web parts built with asp.net 3.5 will not work.

The following are the modifications automatically executed by our utility to modify web.config. You do not  need to reset IIS after running the utility.

·         Adding ScriptHandlers in HttpHandlers. This allows the server controls(asp.net 2.0 server controls) to execute AJAX (server – client interaction without refreshing the whole page) . Other wise the controls behave in normal postback by refreshing the page upon performing actions on the controls of the page.

 

<add verb=GET,HEAD path=ScriptResource.axd validate=false type=System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 />

 

·         Adding Session tag in HttpModules tag for supporting the Sessions on the page. (As OLAPFilter needs sessions to perform functionality).  This will enable the session states  for the web parts.

 

<add name=Session type=System.Web.SessionState.SessionStateModule />

 

·         Adding controls tag in system.web. This helps to use server controls provided by asp.net 3.5 (in addition to standard controls that asp.net 2.0 come with) like TreeeView, AJAX implementation, using script manager and hence update panels etc..

 

<controls>

        <add tagPrefix=asp namespace=System.Web.UI assembly=System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 />

</controls>

 

·         Adding dependent Assembly tag under the root tag of runtime -> assemblyBinding. This refers System.Web.Extension from  an old version of the frameowkr that may be referenced in the web.config to newer version. This is very important and critical piece in our utlity. Web.config might already have the references to System.Web.Extensions before you run the utility to older version or web.config might not have any references to System.Web.Extensions. In both these scenarios, the utility will ensure that we reference System.Web.Extensions to the higher version of the framework installed on the machine i.e. 3.5.0.0. This will not break any third party custom web  part functionality and will make our web part functional.

<dependentAssembly>

        <assemblyIdentity name=System.Web.Extensions publicKeyToken=31bf3856ad364e35 />

              <bindingRedirect oldVersion=1.0.0.0-1.1.0.0 newVersion=3.5.0.0 />

      </dependentAssembly>

At this moment you’re ready to make use of OLAP Filter that is built with the power of .Net Framework 3.5 but, the above changes may not be the same for other ASP.NET 3.5 applicatons to work in SharePoint site. It depends on the features of the .Net Framework 3.5 that are being used by the application that dictate the changes needed to the web.config.

-Idrees

Welcome to the Rich Intranet Business Applications. Welcome to Monitor Analytics!

January 21st, 2009

Hello and welcome to Monitor Analytics. For a long time we have wondered the reasons behind the difference in user experience and productivity between a consumer internet application and a corporate enterprise application. Needless to say, we are disheartened by the lack of innovation in enterprise applications when it relates to user experience. It is on the other hand understandable why that might be. For years the focus has been in ERP implementation, making those applications web enabled, automating business processes across siloed ERP applications and now more than ever service enabling the applications to build an infrastructure that can support composite applications.

Well, the time has finally come for us to focus on the experience of the user when it comes to enriching productivity and driving innovation. I could discuss many reasons for this focus, but I will list a few foundational reasons that got us excited:

1.      Services enabling applications makes it possible to build composite or “mash” up enterprise applications

2.      Rise of rich design tools like Adobe Flash and Microsoft Expression to build innovative designs for enterprise applications

3.      Upcoming technologies like Silverlight, Adobe AIR etc that provide amazing opportunities to offer either desktop (or Software + Service) experience or a similarly rich web experience

4.      The ability of the browser to support AJAX and other scripting languages for a seamless web experience

In addition to these foundational supportive trends, we have also been in awe of the amount of data that gets collected across the enterprise. Collectively as a group, we have have had several years of experience building Business Intelligence solutions for customers across many industries and verticals. We felt we could apply this new rich user experience to allow users to analyze data, correlate and predict information to be more intelligent  but doing it faster and allowing the user to control the form and method on how they would like to experience the information can significantly impact user productivity and in turn improve organizational profitability.

Enter Monitor Analytics! It has been months that we have been working away on bringing the rich experience of consumer internet technologies to enterprise applications. At Monitor Analytics, we are delivering products that focus on allowing users to work better with data using small applications that are light weight, perform a specific function but provide a rich user experience. These applications could mash mapping software with Business Intelligence data or leverage enterprise web portals like Microsoft Sharepoint to act as your analysis tool or enable people to carry their analysis from their desktops to their mobile devices. These applications can be web based, desktop based, mobile based or gadget based. It is up to you, the user to choose how and where you want to experience business insight.

We hope you agree. The future of user experience is exciting as ever and Business Intelligence can benefit significantly from leveraging these user experience trends. Our first product, Monitor Analytics Geo Analyzer has been wildly exciting for us to build and we are sure it will be a wildly exciting product for you to use.

–Monitor Analytics team