by Andreas

Sharepoint 2010 – show webpart in masterpage

Displaying a webpart (your own custom made or any of the OOTB ones) in the master page of your site might not be directly supported by the GUI, but requires minimal effort and no coding.

The easiest way is to add the web part to a normal page (not within a zone), open this page in Sharepoint Designer and steal the generated code. This code can then be inserted into the masterpage where you want it displayed, and then finally add the tag prefix in the header of the masterpage to reference the webpart assembly.

Here’s an example:

The following code is the generated markup for my SubSiteTitleWebPart.



Take note of the “WpNso” prefix, this is the one that references to the webpart assembly. You will find the reference at the top of the page, looking a little something like this:

<%@ Register TagPrefix="WpNs0" Namespace="SubsiteTitleBar.SubSiteTitleWebPart" Assembly="SubsiteTitleBar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3f987c92d971a0fb">

Just copy the same tag prefix to the masterpage and you’re done!

by Andreas

Log4Net i Sharepoint 2010 web parts

All kode (av noenlunde kvalitet…) som kjører i et produksjonsmiljø logger. Eller burde gjøre det. Om det er til fil, database, eventlogg eller remote over eteren har ikke noe å si – et sted bør det holdes varig track på hva som skjer i en applikasjon. Da jeg hev meg på utvikling i Sharepoint var en av de første “utfordringene” hvordan jeg skulle få skrevet til egne loggfiler i stedet for å bruke de interne Sharepointloggene. Hvorfor? Vel.. det skjer mye Sharepoint. Mye som du sannsynligvis ikke er interessert i, og som ikke nødvendigvis er relevant for den feilen du leter etter grunnen til.

Log4Net er en .NET-portering av Log4J. Den gjør det enkelt for en applikasjon å logge til fil. Det er omtrent det jeg tar med av bakgrunn, siden den som leser dette innlegget sannsynligvis har brukt det før og bare vil se hvordan det brukes i Sharepoint. Jeg tar heller ikke med mulighetene for å bruke Log4Net til å sende mail via SMTP, men den er verdt å få med seg at eksisterer.

Sharepoint er bygd på ASP.NET, og du kan derfor bruke samme fremgangsmåte som du hadde gjort i en hvilken som helst annen ASP.NET-applikasjon. Det som utgjør forskjellen er at en web part ikke nødvendigvis har en web.config-fil. I dette eksemplet bruker jeg den som ligger i roten på selve Sharepoint-instansen (På site collection-nivå). Det er ikke noe i veien for å bruke en mer lokal web.config, men det utgjør ikke noe vesentlig forskjell i demosammenheng.

1. Legg til en referanse til log4net.dll
Denne må enten registreres i GAC manuelt, eller så kan du legge den til Package-elementet i web part-prosjektet. Sjekk dette innlegget for en gjennomgang av det.

2. Legg inn den vanlige ConfigSection og konfigurasjon i web.config
I denne demoen bruker jeg web.config for en hel site collection (ligger gjerne her C:inetpubwwwrootwssVirtualDirectories80web.config).

Øverst i web.config legger jeg log4net-noden som første element under “configSections”:




....

Deretter legger jeg appender-config som et element rett før “system.web”:






















.......

3. Legg til en entry i AssemblyInfo.cs
Her settes ConfiguratorAttribute til å peke på web.config som konfigurasjonsfil:


[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "web.config", Watch = true)]

4. Legg til en statisk instans av loggeren på klassenivå slik som før (denne henter generisk ut klassens navn i stedet for å selv måtte sette dette for hver klasse):


private static readonly log4net.ILog _log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

5. Logging burde nå (med Guds velvilje og litt triksing med skriverettighetene i målmappen) fungere:


_log.Info("Degree Blogg sparte meg akkurat for masse jobb!");
_log.Warn(" (and I'm a poet and didn't know it) ");