Development

Access Fileserver Data via SharePoint

**Update: ** The Webpart is not (yet) working as expected. Ajax only works for postbacks. The initial load will take longer, if you have many directories. I am working on this… **Update2: ** Almost done! Ajax is working fine. Ajax is registered, so you don’t need to modify the web.config yourself. Todo: Performance. Hang on just a little more. **Update3: ** Done. I have worked on my Webpart. It will now be faster and it is working 🙂

Custom Formatting in a SPGridView

One of the problems with the SPGridView occurs, if you display e.g. the file size of files, and try to sort with this information. The internal value you get from a SPFile of FileInfo Object shows you the length of the file in bytes. This is great if you want to sort this column. But what if you choose to display the long value with the amount of bytes for a file not as the value, but formatted with SPUtility.

EventHandler which sends an Email for new/changed items

What do you do if you want to be alerted for changes in a list? ![][1] Right. You set an alert. Or you can create a workflow with your SharePoint Designer. But there is a different way. With my "RH.ItemNotifier" Feature, you can configure alerts through the settings of a list. ![][2] Configure Users which need to be emailed for new items or changes to existing ones. ![][3] So why would you use this solution to create alerts?

Iterate through all SPWeb objects in your farm

Sometimes you need to hit all webs in your SharePoint farm. This is the code how you can achieve this task: 1: SPFarm farm = SPContext.Current.Site.WebApplication.Farm; <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"><span style="color:#606060"> 2:</span> SPWebService service = farm.Services.GetValue&lt;SPWebService&gt;(<span style="color:#006080">""</span>);</pre> <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"><span style="color:#606060"> 3:</span> </pre> <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"><span style="color:#606060"> 4:</span> <span style="color:#0000ff">foreach</span> (SPWebApplication webApplication <span style="color:#0000ff">in</span> service.WebApplications)</pre> <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"><span style="color:#606060"> 5:</span> <span style="color:#0000ff">foreach</span> (SPSite site <span style="color:#0000ff">in</span> webApplication.

WarmupSharePoint

Just a small update to my “WarmupSharePoint” tool, which loads all SharePoint websites initially, so the access to all sites is quicker. The difference to other warmup scripts is, that this one calls every site within the sitecollection! You can now specify the “AllSites” parameter. With this parameter passed to the tool, it will iterate through all sitecollections of the webapplication. This is usefull for the MySite webapplication, or any other webapplication with lots of sitecollections.

Get default page Url

l know it is not a smooth approach, but a working one. How do you get the default Url from an SPWeb? If you have the publishing feature activated, you can use PublishingWeb.DefaultPage property. But not for WSS. 1: internal static string GetDefaultWebUrl(string webUrl) <pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, 'Courier New', courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px"><span style="color:#606060"> 2:</span> {</pre> <pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, 'Courier New', courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px"><span style="color:#606060"> 3:</span> WebRequest request = WebRequest.Create(webUrl);</pre> <pre style="border-bottom-style:none;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:consolas, 'Courier New', courier, monospace;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px"><span style="color:#606060"> 4:</span> request.

Error 0x80020009

I am sure you all know the Best Practices: Using Disposable Windows SharePoint Services Objects Guide from Microsoft. If not, read it 🙂 Please be carefull what objects you dispose after you don’t need them anymore. If you dispose the SPContext.Current.Site object, you might get strange behaviours. e.g. you might not be able to save Webpart properties. Doing so, will generate an error: Cannot save the property settings for this Web Part.

Using the SharePoint SiteMapProvider

Did you ever wanted to create a Webpart for site navigation? Well, you can use the SPSiteMapProvider from SharePoint. In your Webpart you could use this code to access the SPSiteMapProvider. 1: SPSiteMapProvider sitemapProvider = (SPSiteMapProvider)SiteMap.Providers["SPSiteMapProvider"]; <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"><span style="color:#606060"> 2:</span> SiteMapDataSource datasource = <span style="color:#0000ff">new</span> SiteMapDataSource();</pre> <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none"><span style="color:#606060"> 3:</span> datasource.Provider = sitemapProvider;</pre> This Datasource can be the datasource for a regular ASP.

Updated WikiWebpart + Tool to install it

I updated my WikiWebpart. You can now download it as a SharePoint Solution. Steps to install the solution: Install the solution via “stsadm -o addsolution -filename RH.WikiWebpart.wsp” Go to your "Central Administration > Operations" and deploy the solution 1. * * Active the Feature for your Sitecollection Go to “Site Actions > Site Settings > Site Collection Administration > Site collection features” and active the feature ##### Add the Webpart to your Wiki library

SharePointConsole

I wrote a Console application, which will allow you do some common tasks for your SharePoint environment. stsadm lacks some functionality like recyling all list items from a list… Just copy the exe to your SharePoint Server, and execute it with an account which has the appropriate rights on your farm. Usage: SharePointConsole http://siteurl[/weburl] Command [Parameter1 Parameter2] The SharePointConsole has the following parameters: EnumContentTypes CreateContentType RenameContentType DeleteContentType DeleteAllListItems ShowInNewForm ShowInEditForm ShowInDisplayForm DeleteAllVersions RecycleAllVersions SetTitleWithFilename SetSearchCenterUrl SystemUpdate FeatureManager EmptyRecycleBin EnumContentType:

HowTo create an object if you only have its type as string

Sometimes you have only the type of an object, which you want to create. Meaning you want to create an object dynamically. This is how you would achieve your goal: In my case I wanted to create a SPField from its typename. 1: string typename = “Microsoft.SharePoint.SPFieldText, Microsoft.SharePoint, “+ <span class=lnum> 2: </span> <span class=str>"Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"</span>; 3: Type t = Type.GetType(typename, true, true); <span class=lnum> 4: </span><span class=kwrd>object</span> newObject = System.

Create an audience which contains an Active Directory Group

In the SDK are examples on how to create an audience which adds a rule like: 1: AudienceRuleComponent r1 = new AudienceRuleComponent("FirstName", "Contains", "John"); But how do you create a rule which takes the membership of an Active Directory Group? Well, look at this: 1: string groupName = "CN=Users,CN=Builtin,DC=domain,DC=tld"; <pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none"><span style="color:#606060"> 2:</span> AudienceRuleComponent r1 = <span style="color:#0000ff">new</span> AudienceRuleComponent(<span style="color:#006080">"DL"</span>, <span style="color:#006080">"Member of"</span>, groupName);</pre> To get the ‘distinguishedName’ from a group, you can use ADSI Edit (open up a MMC and add the ADSI Edit Snap-In).

Display all my alerts

The "old" SharePoint Server 2003 offered the ability to display all alerts from a user on his/her MySite. MOSS and SharePoint 2010 lacks this functionality. So I wrote a Webpart, which will display all my alerts. Of course is multilingual. Currently there is English, German and Spanish language support included. And it will work on Windows SharePoint Services V3 as well ass SharePoint Foundation. You don’t need the Office Server / SharePoint Server 2010 for it 🙂

HowTo use the resource files from SharePoint

How about using the available resources from SharePoint to translate some basic words and sentences? Well, it is quite easy to use the available resources. You need the Microsoft.SharePoint.Intl.dll and some lines of code to use the already translated resources: // define yourself variables private readonly CultureInfo _Cult; private readonly Assembly _SharePoint_Intl_Assembly; private readonly ResourceManager _SharePoint_RM; private readonly ResourceManager _SharePoint_WebPartPage_RM; // initialize them in your constructor _SharePoint_Intl_Assembly = Assembly.Load("Microsoft.SharePoint.intl, Version=12.