Monday, December 20, 2010

Cannot connect to the configuration database - SharePoint 2007/2010

Most of the times, developers get this annoying error message, see snapshot below:

One of the common reason for this error is when MSSQLServer instance is not running, go to
Start->Run->Services.msc and start the MSSQLServer Service as shown in the snapshot below:

And then refresh your SharePoint page, it starts working perfectly fine again.

Trying to use an SPWeb object that has been closed or disposed and is no longer valid.

"Trying to use an SPWeb object that has been closed or disposed and is no longer valid" error message is very common amongst developers dealing with the SharePoint object model. Here is how the error looks like:

The reason behind this is a silly mistake that developers do, when trying to use the SPSite/SPWeb objects. Here is the bad code that resulted in the error:

I used the using clause alongwith the SPContext.Current.Site which resulted in this error, it implicilty disposes the SPSite object which should not be done when using the SPContext object. Lets refactor the code a little bit and have a look at the good code snippet which resolved this issue:

Thats about it, my code started working when I removed the using clause from the SPContext.Current.Site. The same thing is true when you try to either explicitly/implicitly Dispose the SPContext.Current.Web object. So moral of the story never dispose SPContext objects either implicitly leveraging the using clause or explicitly by using Dispose method from in your finally block.

Watch out for the SharePoint Object Model coding best practices at :

Javascript:ShowModalDialog Relative Site Collection URL

Get the dynamic Site Collection URL working in your Javascript code:

{SiteUrl} - Replaces the full Site Collection URL within your Javascript:ShowModalDialog Relative URL path, use this piece of code to avoid hard coding URL's in your Custom Ribbon Action's Elements.xml file,

~site - This one does the same thing but can't be used in Context of the Javascript code, and can only be used within SharePoint.

Here is a sample Elements.xml Custom Ribbon Action code, which shows how to use the {SiteUrl}  and ~site property:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="">
Alt="Open Modal Popup Ribbon Button"
LabelText="Update Profile Info"
<CommandUIHandler Command="OpenModalWindow" CommandAction="javascript:SP.UI.ModalDialog.showModalDialog({~site/_layouts/SharePointFix/PrintListItems.aspx', title: 'Print List Items' });" />
Description="Change your user profile country"
Title="Select Country View"
<UrlAction Url="javascript:(function () { var o = { url:'{SiteUrl}/_layouts/SharePointFix/PrintListItems.aspx', title: 'Select List Item', dialogReturnValueCallback: SP.UI.ModalDialog.RefreshPage }; SP.UI.ModalDialog.showModalDialog(o); }) ();"/>

Tuesday, December 7, 2010

How to go to the SharePoint Page Webpart Maintanance Mode?

There are 2 scenarios where we need the Webpart Maintanance Page to delete trouble making webparts from the current page:

a. At times the webpart we are developing might have code errors due to which the whole page hangs up or stops working entirely and redirects you to a SharePoint error message stack trace page.

b. Most of the times, we just tend to "Close" the unused webparts, while we are setting up our pages. But the webpart still remains hidden on the page and loads each time the page is called, even though not in use.

This might result in performance bottle necks, while loading the page as it loads unused webparts as well. The quickest and shortest route to fix the above is switching to the Page's Web Part Maintance Mode.

So, for eg: if your SharePoint Landing Page URL looks like this: http://sharepointfix:9999/Pages/default.aspx

In order to quickly switch to this pages webpart maintanance mode, you need to append the above URL with a ?Contents=1 query string parameter like this:

You can then delete the unused/not required webparts from this page, by checking on the webpart and clicking on the Delete option:

I hope this helps.