<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8904656588378643516</id><updated>2011-11-28T02:01:42.571+01:00</updated><category term='users'/><category term='customize'/><category term='navigation'/><category term='feature'/><category term='branding'/><category term='database'/><title type='text'>SharePoint 2007</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-7684662897938876778</id><published>2008-10-06T12:45:00.003+02:00</published><updated>2008-10-06T12:53:06.721+02:00</updated><title type='text'>Dynamically generating styles in code and localization</title><content type='html'>Today I ran into a stupid problem: For a company I am working on webparts that support localization. The styles are generated dynamically, depending on the amount of items to show in a table. When using the English regionsettings, everything worked fine, but when switching to another region, for example Dutch, whole my table was screwed up. After comparing the html source files by hand, the sources were completely the same! &lt;br /&gt;&lt;br /&gt;Then I decided to use a tool, named winmerge (i love that tool!). That tool showed me that the styles that were generated, did differ! With the dutch region settings, the style that was generated for my cells, had a relative percentage with a "," in it, while in english it was a ".".&lt;br /&gt;&lt;br /&gt;dutch: style="left:8,34%;"&lt;br /&gt;english: style="left:8.34%;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-7684662897938876778?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/7684662897938876778/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=7684662897938876778' title='37 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/7684662897938876778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/7684662897938876778'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/10/dynamically-generating-styles-in-code.html' title='Dynamically generating styles in code and localization'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-3006639150647590930</id><published>2008-07-23T20:59:00.003+02:00</published><updated>2008-07-23T21:05:01.891+02:00</updated><title type='text'>Infopath: "generate" a unique number for your document</title><content type='html'>Last week I was busy on an infopath form for a sharepoint document library in combination with an approval workflow. I was wondering how to generate a simple, unique number to make sure that my document wouldn't overwrite other documents with the same title. &lt;br /&gt;&lt;br /&gt;After a bit experimenting, I came across the following solution:&lt;br /&gt;- Generate a new data connection to retrieve data from a sharepoint document library.&lt;br /&gt;- make sure to select 'ID' from the specified document library&lt;br /&gt;- make sure to get all data, not only the data for the current document.&lt;br /&gt;&lt;br /&gt;When storing the document, create a button with the following ruleset:&lt;br /&gt;-Query the data connection that you just created&lt;br /&gt;- insert a function to compute the max(@ID) + 1, this is the highest available ID in the sharepoint lib + 1, so its always unique.&lt;br /&gt;- add it in front or in the end of your title&lt;br /&gt;- save &amp; close ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-3006639150647590930?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/3006639150647590930/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=3006639150647590930' title='1 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3006639150647590930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3006639150647590930'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/07/infopath-generate-unique-number-for.html' title='Infopath: &quot;generate&quot; a unique number for your document'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-7748467591372482077</id><published>2008-06-12T13:24:00.002+02:00</published><updated>2008-06-12T13:31:25.506+02:00</updated><title type='text'>Granting full access to a user on all site collections within a web application</title><content type='html'>Today i got a question from a colleague about how to grant full access to a user on all existing site collections. This is not the first time that i got that question, so i decided to put a small blogpost covering this subject. &lt;br /&gt;&lt;br /&gt;It's quite easy to do, you just have to now how:&lt;br /&gt;&lt;br /&gt;Go to SharePoint Central Administration. &lt;br /&gt;Click on the Application Management tab. &lt;br /&gt;Under Application Security click on Policy for Web Application &lt;br /&gt;Click Add Users &lt;br /&gt;Confirm your settings on the screen (defaults should be what you want) and click Next &lt;br /&gt;Now enter your user or group of users &lt;br /&gt;Click the box beside Full Control – Has full control. &lt;br /&gt;Click Finish &lt;br /&gt;&lt;br /&gt;Piece of cake, isnt it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-7748467591372482077?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/7748467591372482077/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=7748467591372482077' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/7748467591372482077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/7748467591372482077'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/06/granting-full-access-to-user-on-all.html' title='Granting full access to a user on all site collections within a web application'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-838236931465364674</id><published>2008-06-06T14:43:00.004+02:00</published><updated>2008-06-06T14:47:37.307+02:00</updated><title type='text'>Iterating through user profiles</title><content type='html'>some time ago i wrote an article about iterating through user profiles for non-admins (&lt;a href="http://sp2k7.blogspot.com/2008/03/iterating-through-user-profiles.html"&gt;click here&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Today, i had the same problem, but my solution that was given, isnt optimal. I had to iterate through about 50.000 user profiles, that was a bit slow ;) And, only administrators could iterate through those profiles, even RunWithElevatedPrivileges didnt work.&lt;br /&gt;&lt;br /&gt;I am glad that Microsoft hotfixed this problem (on the 8th of may 2008), you can download it here: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=952294"&gt;KB 952294&lt;/a&gt;. Now everyone can iterate through user profiles..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-838236931465364674?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/838236931465364674/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=838236931465364674' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/838236931465364674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/838236931465364674'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/06/iterating-through-user-profiles.html' title='Iterating through user profiles'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-4774733802465493223</id><published>2008-05-20T14:14:00.004+02:00</published><updated>2008-05-20T14:19:48.468+02:00</updated><title type='text'>restoring Inheritance</title><content type='html'>For my current project, I used Tzunami to migrate all the WebApps, SPSite and SPWeb structures. But I had one problem: the site owners werent allowed to view the lists and listItems on their sites anymore: this was due to the fact that Tzunami doesnt inherit SPRoleAssignments from the parentSite when migrating the items.&lt;br /&gt;&lt;br /&gt;Following code resets the inheritance:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;private void InheritPermissions(SPWebApplication SPWebApplication)&lt;br /&gt;        {            &lt;br /&gt;            &lt;br /&gt;            SPSiteCollection siteCollection = SPWebApplication.Sites;&lt;br /&gt;            foreach (SPSite site in siteCollection)&lt;br /&gt;            {                &lt;br /&gt;                foreach (SPWeb web in site.AllWebs)&lt;br /&gt;                {&lt;br /&gt;                    foreach (SPList list in web.Lists)&lt;br /&gt;                    {                        &lt;br /&gt;                        list.ResetRoleInheritance();&lt;br /&gt;                        foreach (SPListItem item in list.Items)&lt;br /&gt;                        {&lt;br /&gt;                            item.ResetRoleInheritance();                       &lt;br /&gt;                        }&lt;br /&gt;                    }                    &lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-4774733802465493223?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/4774733802465493223/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=4774733802465493223' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/4774733802465493223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/4774733802465493223'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/05/restoring-inheritance.html' title='restoring Inheritance'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-3630525226980878905</id><published>2008-05-13T11:47:00.002+02:00</published><updated>2008-05-13T11:50:16.009+02:00</updated><title type='text'>Starting Sharepoint 2007 development</title><content type='html'>Paul Andrew has made a blog entry with good information on starting sharepoint development.&lt;br /&gt;&lt;br /&gt;It provides links to courses, free online courses by microsoft, MCTS exams and a sample program. It's good information for everyone who wants to start sharepoint development!&lt;br /&gt;&lt;br /&gt;url: &lt;a href="http://blogs.msdn.com/pandrew/archive/2008/05/01/getting-started-with-sharepoint-development.aspx"&gt;http://blogs.msdn.com/pandrew/archive/2008/05/01/getting-started-with-sharepoint-development.aspx&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-3630525226980878905?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/3630525226980878905/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=3630525226980878905' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3630525226980878905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3630525226980878905'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/05/starting-sharepoint-2007-development.html' title='Starting Sharepoint 2007 development'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-8440915878488620178</id><published>2008-04-29T11:59:00.004+02:00</published><updated>2008-04-29T13:38:23.844+02:00</updated><title type='text'>More about events</title><content type='html'>As I had problems with the way events worked, I wanted to know more about the way they worked. below is bit of information about events that is good to know:&lt;br /&gt;&lt;br /&gt;Two different kinds:&lt;br /&gt;There are two different kinds of events: Synchronous and Asynchronous events.&lt;br /&gt;&lt;br /&gt;* Synchronous events&lt;br /&gt; - End with -ing (ItemAdding, ItemUpdating)&lt;br /&gt; - Block the code as long the events arent finished&lt;br /&gt; - Can (thus) make use of Session vars (HttpContext.Current is available)&lt;br /&gt; - Can be used to prevent the event being finished. For example, with the ItemUpdating event you can verify the content being updated. Is the update not valid, the SPItemEventProperties.Cancel can be set to true and the SPItemEventProperties.ErrorMessage can be filled with an error message. This error message &lt;em&gt;will not&lt;/em&gt; be displayed, but is written to the logfile. An error page will appear.&lt;br /&gt; - dont contain the SPListItem in it's SPItemEventProperties (well, in the case of ItemAdding, that is, I didnt test it for the other events), so when you want to make changes to any of it's field you need to make use of the SPItemEventProperties.AfterProperties (see message below).&lt;br /&gt;&lt;br /&gt;* Asynchronous events&lt;br /&gt; - End with -ed (ItemAdded, ItemUpdated)&lt;br /&gt; - Dont block the code. &lt;br /&gt; - Can't (thus) make use of the Session (HttpContext.Current is null)&lt;br /&gt; - Can't be reverted; When these events are fired, the item is already added, updated or deleted.&lt;br /&gt; - contains the SPListItem. Changes can be made if you want to. This fires the (for example) ItemUpdating and ItemUpdated event. This can be turned off by using this.DisableEventFiring();&lt;br /&gt;&lt;br /&gt;When creating a new list, events like FieldAdded and FieldAdding are &lt;em&gt;not&lt;/em&gt; fired!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-8440915878488620178?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/8440915878488620178/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=8440915878488620178' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/8440915878488620178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/8440915878488620178'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/04/more-about-events.html' title='More about events'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-5099636259945669744</id><published>2008-04-25T10:12:00.012+02:00</published><updated>2008-04-29T11:58:27.204+02:00</updated><title type='text'>modify SPListItem fields with vars from the Session in the itemAdding or itemAdded events</title><content type='html'>Yesterday, a colleague of me and I tried to alter a field of a SPListItem right after the moment that the item has been created. We stored a var in the sessionState and tried to read that one, so we could use that variable to alter the newly created SPListItem.&lt;br /&gt;&lt;br /&gt;We found out that this was not as easy as we thought.&lt;br /&gt;&lt;br /&gt;When using the itemAdded event, the httpContext is not available, so it's not possible to get the vars out of the HttpContext.Current.Session&lt;br /&gt;&lt;br /&gt;When using the itemAdding event, the HttpContext is available, but the properties.ListItem is null then. This is expected behaviour, because the SPListItem is only filled with data from the database and in the itemAdding event, no write actions to the database have been executed &lt;em&gt;yet&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;In this case, the properties.AfterProperties can be used to modify a field on creation.&lt;br /&gt;&lt;br /&gt;below is an example that shows whether the HttpContext and properties.ListItem are null or not shows how to modify properties when an item is added.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;public class ItemEventReceiver : SPItemEventReceiver&lt;br /&gt;{&lt;br /&gt;    private HttpContext hContext;&lt;br /&gt;&lt;br /&gt;    public ItemEventReceiver()&lt;br /&gt;    {&lt;br /&gt;        hContext = HttpContext.Current;&lt;br /&gt;    }&lt;br /&gt;    public override void ItemAdded(SPItemEventProperties properties)&lt;br /&gt;    {&lt;br /&gt;        Debug.WriteLine("ItemAdded");&lt;br /&gt;        CheckHContextAndSPListItem(properties.ListItem);&lt;br /&gt;        base.ItemAdded(properties);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// overrides the standard ItemAdding. In this case&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    /// &lt;param name="properties"&gt;&lt;/param&gt;&lt;br /&gt;    public override void ItemAdding(SPItemEventProperties properties)&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        string internalFieldName = null;&lt;br /&gt;        string FIELD_NAME = "Foo";            &lt;br /&gt;        SPFieldLookupValue lookupField = null;&lt;br /&gt;        &lt;br /&gt;        Debug.WriteLine("ItemAdding");&lt;br /&gt;        CheckHContextAndSPListItem(properties.ListItem);&lt;br /&gt;&lt;br /&gt;        using (SPWeb web = properties.OpenWeb())&lt;br /&gt;        {&lt;br /&gt;            internalFieldName = web.Lists[properties.ListId].Fields[FIELD_NAME].InternalName;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // example for adding a SPFieldLookupValue to a SPFieldLookup&lt;br /&gt;        lookupField = new SPFieldLookupValue(1, hContext.Session["key"].ToString());&lt;br /&gt;        string tempValue = lookupField.ToString();&lt;br /&gt;        properties.AfterProperties[internalFieldName] = tempValue;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// checks the values of hContext and SPListItem&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    /// &lt;param name="sPListItem"&gt;SPListItem out of the SPItemEventProperties&lt;/param&gt;&lt;br /&gt;    private void CheckHContextAndSPListItem(SPListItem listItem)&lt;br /&gt;    {&lt;br /&gt;        if (hContext == null)&lt;br /&gt;        {&lt;br /&gt;            Debug.WriteLine("hContext is null");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (listItem == null)&lt;br /&gt;        {&lt;br /&gt;            Debug.WriteLine("listItem is null");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-5099636259945669744?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/5099636259945669744/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=5099636259945669744' title='1 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/5099636259945669744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/5099636259945669744'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/04/modify-splistitem-fields-with-vars-from.html' title='modify SPListItem fields with vars from the Session in the itemAdding or itemAdded events'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-3088721568520323049</id><published>2008-04-17T16:25:00.010+02:00</published><updated>2008-04-17T16:33:58.862+02:00</updated><title type='text'>Crawl through all links</title><content type='html'>As I am still working on a migration project, the customer asked me if it was possible to check all urls in content editor webparts that I migrated. As i serialized all webparts on a 2003 to xml (for importing them to 2007), it was very easy for me to locate all content editor webparts, scan it's content and report the external, non-existant urls in it and change/report the internal, non-existant url's.&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;public static void GetAllUrls(string content)&lt;br /&gt;{&lt;br /&gt;            string pattern = @"\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&amp;amp;\?\:\\\&amp;quot;\'\,\|\~\;]*)\b";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            //Set up regex object &lt;br /&gt;            Regex RegExpr = new Regex(pattern, RegexOptions.IgnoreCase);&lt;br /&gt;&lt;br /&gt;            //get the first match &lt;br /&gt;            Match match = RegExpr.Match(content);&lt;br /&gt;&lt;br /&gt;            //loop through matches &lt;br /&gt;&lt;br /&gt;            Console.WriteLine(content);&lt;br /&gt;            while (match.Success)&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;                //output the match info &lt;br /&gt;                Console.WriteLinematch.Groups[0].Value);                &lt;br /&gt;                Console.WriteLinematch.Groups[1].Value);                &lt;br /&gt;                &lt;br /&gt;//get next match &lt;br /&gt;                match = match.NextMatch();&lt;br /&gt;            } &lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-3088721568520323049?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/3088721568520323049/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=3088721568520323049' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3088721568520323049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3088721568520323049'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/04/crawl-through-all-links.html' title='Crawl through all links'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-8530630125494161346</id><published>2008-04-17T14:24:00.005+02:00</published><updated>2008-04-17T14:39:34.520+02:00</updated><title type='text'>Reflection...</title><content type='html'>Today I got the question from a collegue if it was possible to instantiate a class, based on a result from a computation, without making use of an if-then-else, case or any other (logical) construction. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We found the answer in using reflection and attributes.&lt;br /&gt;first of all, we created a class "ClassType":&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;[AttributeUsage(AttributeTargets.Class)]&lt;br /&gt;    public class ClassType : System.Attribute&lt;br /&gt;    {&lt;br /&gt;        string[] _types;&lt;br /&gt;&lt;br /&gt;        public ClassType (params string[] types)&lt;br /&gt;        {&lt;br /&gt;            this._types = types;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public string[] types&lt;br /&gt;        {&lt;br /&gt;            get { return _types; }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;After that, we created some classes, with each its own attribute:&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;[ClassType ("Type", "A")]&lt;br /&gt;    public class test :System.Attribute&lt;br /&gt;    {               &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [ClassType ("Type", "B")]&lt;br /&gt;    public class Dog : test&lt;br /&gt;    {&lt;br /&gt;        &lt;br /&gt;        public Dog()&lt;br /&gt;        { &lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [ClassType ("Type", "C")]&lt;br /&gt;    public class Cat : test&lt;br /&gt;    {&lt;br /&gt;        public Cat()&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;after that, the attributes of a class in a certain assembly can be read (a little bit of pseudo code ;)&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;public class ReadAttribute&lt;br /&gt;    {&lt;br /&gt;        public ReadAtt()&lt;br /&gt;        {&lt;br /&gt;            // pseudo code&lt;br /&gt;            foreach(Class class in Assembly)&lt;br /&gt;            {      &lt;br /&gt;                System.Reflection.MemberInfo memberInfo = typeof(class);&lt;br /&gt;                object[] attributes = memberInfo.GetCustomAttributes(typeof(ClassType), false);&lt;br /&gt;    &lt;br /&gt;                foreach (Object attribute in attributes)&lt;br /&gt;                {&lt;br /&gt;                    ClassType aliasAttribute = attribute as ClassType ;                &lt;br /&gt;                }&lt;br /&gt;            }            &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-8530630125494161346?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/8530630125494161346/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=8530630125494161346' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/8530630125494161346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/8530630125494161346'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/04/reflection.html' title='Reflection...'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-4918782840081783903</id><published>2008-04-01T13:40:00.002+02:00</published><updated>2008-04-01T20:32:58.698+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='users'/><title type='text'>Import user accounts</title><content type='html'>As you were able to read in my post before, I had a problem with disabled users. I decided that i didnt want any disabled users in my shared service provider, but how could i manage that? Luckily, there is a &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;305144"&gt;Microsoft KB article&lt;/a&gt; which helped me with not importing disabled accounts. By making smart use of the ADSearch, only enabled accounts are retrieved:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols" &gt;&lt;br /&gt;(&amp;(objectCategory=person)(objectClass=user)( !(userAccountControl:1.2.840.113556.1.4.803:=2)))&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-4918782840081783903?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/4918782840081783903/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=4918782840081783903' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/4918782840081783903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/4918782840081783903'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/04/import-user-accounts.html' title='Import user accounts'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-1358017499414297319</id><published>2008-04-01T12:48:00.003+02:00</published><updated>2008-04-01T20:32:58.698+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='users'/><title type='text'>Adding users to a site</title><content type='html'>Today I was busy on migrating some data using the Tzunami tool, until I got the following error:&lt;br /&gt;&lt;br /&gt;SPS2003HandlerException: Principal 'xxx\xxx' cannot be resolved. I was sure about it that the user existed in the SSP and but to be sure, I checked it a second time. And yes: it existed. So i tried to add that user manually to a site, but the user couldnt be added. I stumbled on that problem for about an hour, until i accidentally checked something in the AD:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_C8dqCnAKDgA/R_IU2uc7rsI/AAAAAAAAAAQ/z72JLrQ4w1I/s1600-h/accountdisabled.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_C8dqCnAKDgA/R_IU2uc7rsI/AAAAAAAAAAQ/z72JLrQ4w1I/s320/accountdisabled.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5184229051471736514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Account disabled... SIGH!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-1358017499414297319?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/1358017499414297319/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=1358017499414297319' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/1358017499414297319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/1358017499414297319'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/04/adding-users-to-site.html' title='Adding users to a site'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_C8dqCnAKDgA/R_IU2uc7rsI/AAAAAAAAAAQ/z72JLrQ4w1I/s72-c/accountdisabled.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-2641612387699788583</id><published>2008-03-28T15:39:00.003+01:00</published><updated>2008-04-01T20:32:58.699+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='users'/><title type='text'>iterating through user profiles</title><content type='html'>Today i was busy on migrating some userprofiles and for some reason i had to iterate through the existing userprofiles in the MOSS 2007 environment.&lt;br /&gt;&lt;br /&gt;I got a nice, lovely errormessage saying that I wasn't allowed to enumerate through all userprofiles, because i didnt have the rights to "Manage user profiles".&lt;br /&gt;&lt;br /&gt;Dave Hunter's Blog (http://www.davehunter.co.uk/Blog/default.aspx) provided me the solution:&lt;br /&gt;&lt;br /&gt;iterate through a set number!&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp:nocontrols:firstline[1]"&gt;&lt;br /&gt;// get the server context&lt;br /&gt;Microsoft.Office.Server.ServerContext ctx = Microsoft.Office.Server.ServerContext.GetContext(HttpContext.Current);&lt;br /&gt;&lt;br /&gt;// get the user profile manager&lt;br /&gt;UserProfileManager userProfileManager = new UserProfileManager(ctx);&lt;br /&gt;&lt;br /&gt;// set the number of profiles to iterate through&lt;br /&gt;int numberOfProfiles = 400;&lt;br /&gt;&lt;br /&gt;// loop through the user profiles&lt;br /&gt;for (int i = 0; i &lt; numberOfProfiles; i++)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        UserProfile profile = userProfileManager.GetUserProfile(i);&lt;br /&gt;&lt;br /&gt;        // do some action on each currentProfile&lt;br /&gt;    }&lt;br /&gt;    catch (Exception ex)&lt;br /&gt;    {&lt;br /&gt;        // failed to get user profile&lt;br /&gt;        // log the error&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-2641612387699788583?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/2641612387699788583/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=2641612387699788583' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/2641612387699788583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/2641612387699788583'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/03/iterating-through-user-profiles.html' title='iterating through user profiles'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-6683220074272615471</id><published>2008-03-19T13:22:00.010+01:00</published><updated>2008-04-01T20:33:36.176+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='feature'/><title type='text'>Feature stapling - custom code OnSiteCreation</title><content type='html'>I wanted to enable some features upon a siteCollection creation, but i couldnt find an eventhandler which I could use to run some code in to activate those features. I found out that sharepoint is missing a OnSiteCreation event :(. After some search on the web, I found out some possibilities:&lt;br /&gt;&lt;br /&gt;1) alter the SiteTemplates&lt;br /&gt;This was no option for me: too much work for a lazy person like me&lt;br /&gt;2) feature stapling&lt;br /&gt;This was a technique I never heard of: A new, farm wide feature is created, with a &lt;br /&gt;reference to a stapling.xml. That file is filled with:&lt;br /&gt;* elements&lt;br /&gt;* FeatureSiteTemplateAssociation Id: the feature that needs to be installed&lt;br /&gt;* TemplateName&lt;br /&gt;&lt;br /&gt;This way, features can be activated to some siteDefinitions (for example STS#1, BLANKINTERNET#0) or to the GLOBAL definition!&lt;br /&gt;&lt;br /&gt;When making a custom feature with a OnFeatureActivated method, and that feature is deployed to GLOBAL, code can be executed ON SITE CREATION!&lt;br /&gt;&lt;br /&gt;NOTE: the STS#1 (blank page) has a setting "AllowGlobalFeatureAssociations" set to false. This way, the STS#1 sitedefinition needs to be added to, when you want to execute custom code to be executed when any site is created.&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="xml:nocontrols:firstline[1]"&gt;&lt;br /&gt;&lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;&lt;br /&gt; &lt;FeatureSiteTemplateAssociation Id="F6924D36-2FA8-4f0b-B16D-06B7250180FA" TemplateName="GLOBAL" /&gt; &lt;br /&gt; &lt;FeatureSiteTemplateAssociation Id="F6924D36-2FA8-4f0b-B16D-06B7250180FA" TemplateName="STS#1" /&gt; &lt;br /&gt;&lt;/Elements&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-6683220074272615471?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/6683220074272615471/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=6683220074272615471' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/6683220074272615471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/6683220074272615471'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/03/feature-stapling-custom-code.html' title='Feature stapling - custom code OnSiteCreation'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-8839747711011810855</id><published>2008-03-19T12:51:00.011+01:00</published><updated>2008-04-01T20:34:21.275+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='navigation'/><title type='text'>Migration - QuickLaunch</title><content type='html'>It has been a long time ago since i made my last post, but that's because of my current project, there's a lot of pressure on it at the moment. &lt;br /&gt;&lt;br /&gt;At the moment i am busy on migrating a SP2003 environment to a SP2007. Due to the customers wishes, this is a very time consuming project. I decided to write a nice tool to help me migrate all the webparts, it's data and the navigation, since we used Tzunami for the content migration. It helped me in some way, but i can say: it isnt worth it's money. 12000 Euro for a product that has a lot of bugs and misses a lot of functionality.&lt;br /&gt;&lt;br /&gt;well, let me go further on the main subject ;) I was asked if it was possible to maintain all links in the quicklaunch and in the same order. At first, it didnt look too good for me: The object model of sharepoint 2003 didnt allow me to gather information about the quicklaunch menu. &lt;br /&gt;&lt;br /&gt;So I decided to write a query to get the navigation information out of the database and stored into an xml file:&lt;br /&gt;&lt;textarea name="code" class="xml"&gt;&lt;br /&gt;&lt;SubMenu Category="1003"&gt;&lt;br /&gt;  &lt;Item order="0"&gt;Link&lt;/Item&gt;&lt;br /&gt;&lt;/SubMenu&gt;&lt;br /&gt;&lt;SubMenu Category="1004"&gt;&lt;br /&gt;  &lt;Item order="0"&gt;Link&lt;/Item&gt;&lt;br /&gt;  &lt;Item order="1"&gt;Link&lt;/Item&gt;&lt;br /&gt;  &lt;Item order="2"&gt;Link&lt;/Item&gt;&lt;br /&gt;&lt;/SubMenu&gt;&lt;br /&gt;&lt;SubMenu Category="1006"&gt;&lt;br /&gt;  &lt;Item order="0"&gt;Link&lt;/Item&gt;&lt;br /&gt;&lt;/SubMenu&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In SP2003, the order of Documents, PictureLibrary, Lists are in an order that is always the samen (when nog changed). In SP2007, the order depends on the order of creating doclibs and lists.&lt;br /&gt;&lt;br /&gt;For example, when a list is created first and after that, a doclib is created, the menu "List" will be displayed above "Document Library" (or whatever its name is ;))&lt;br /&gt;&lt;br /&gt;This problem is tackled with the following code:&lt;br /&gt;- make all lists and doclibs invisible in the quicklaunchmenu:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp"&gt;&lt;br /&gt;foreach (SPList list in spweb.Lists)&lt;br /&gt;            {&lt;br /&gt;                list.OnQuickLaunch = false;&lt;br /&gt;                list.Update();&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            spweb.Update();&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;afther that, &lt;br /&gt;&lt;br /&gt;use this function to add items:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp"&gt;&lt;br /&gt;private Dictionary &lt;int, SortedList&lt;int, string&gt;&gt; list;&lt;br /&gt;&lt;br /&gt;public void AddItems(XmlNode web)&lt;br /&gt;        {&lt;br /&gt;            if (web["QuickLaunch"].ChildNodes.Count &gt; 0)&lt;br /&gt;            {                &lt;br /&gt;                foreach (XmlNode subMenu in web["QuickLaunch"].ChildNodes)&lt;br /&gt;                {&lt;br /&gt;                    KeyValuePair&lt;int, SortedList&lt;int, string&gt;&gt; kvp;&lt;br /&gt;                    kvp = ParseQuickLaunchXmlPerWeb(subMenu);&lt;br /&gt;                    list.Add(kvp.Key, kvp.Value);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                AddQuickLaunchItems();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;use the following function to add the items to the quicklaunch: they are added to the right subMenu&lt;br /&gt;&lt;textarea name="code" class="csharp"&gt;&lt;br /&gt;private void AddQuickLaunchItems()&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            foreach (KeyValuePair&lt;int, SortedList&lt;int, string&gt;&gt; kvp in list)&lt;br /&gt;            {&lt;br /&gt;                foreach (KeyValuePair&lt;int, string&gt; skvp in kvp.Value)&lt;br /&gt;                {&lt;br /&gt;                    string listName = mapping.FindListName(spWeb, skvp.Value);&lt;br /&gt;                    if (!String.IsNullOrEmpty(listName))&lt;br /&gt;                    {&lt;br /&gt;                        try&lt;br /&gt;                        {&lt;br /&gt;                            SPList tempList = spWeb.Lists[listName];&lt;br /&gt;                            tempList.OnQuickLaunch = true;&lt;br /&gt;                            tempList.Update();&lt;br /&gt;                        }&lt;br /&gt;                        catch (System.ArgumentException e)&lt;br /&gt;                        {&lt;br /&gt;                            Logging.Logger.LogMessage(Logging.LogLevel.Error, "list " + listName + " not found", e.Message);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        Logging.Logger.LogMessage(Logging.LogLevel.Error, "listname not found in mappingfile", skvp.Value);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;And use this function to put the subMenu items in the right order:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="csharp"&gt;&lt;br /&gt;private void ReOrderSPNodes(SPNavigationNodeCollection spNodeCollection, SPNavigationNode node)&lt;br /&gt;        {&lt;br /&gt;            node = MoveSPNode(QuickLaunchHeaders.Documents, spNodeCollection, node);            // Documents&lt;br /&gt;            node = MoveSPNode(QuickLaunchHeaders.Pictures, spNodeCollection, node);            // pictures&lt;br /&gt;            node = MoveSPNode(QuickLaunchHeaders.Lists, spNodeCollection, node);            // lists&lt;br /&gt;            node = MoveSPNode(QuickLaunchHeaders.Discussions, spNodeCollection, node);            // discussions&lt;br /&gt;            node = MoveSPNode(QuickLaunchHeaders.Surveys, spNodeCollection, node);            // surveys                        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;private SPNavigationNode MoveSPNode(int headerID, SPNavigationNodeCollection spNodeCollection, SPNavigationNode previousSibling)&lt;br /&gt;        {&lt;br /&gt;            foreach (SPNavigationNode n in spNodeCollection)&lt;br /&gt;            {&lt;br /&gt;                if (n.Id == headerID)&lt;br /&gt;                {&lt;br /&gt;                    if (previousSibling == null)&lt;br /&gt;                    {&lt;br /&gt;                        n.MoveToFirst(spNodeCollection);&lt;br /&gt;                        previousSibling = n;&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        n.Move(spNodeCollection, previousSibling);&lt;br /&gt;                    }&lt;br /&gt;                    return n;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return previousSibling;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Moves QuickLaunchHeader below the given node&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="header"&gt;&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="spNodeCollection"&gt;&lt;/param&gt;&lt;br /&gt;        /// &lt;param name="node"&gt;&lt;/param&gt;&lt;br /&gt;        /// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;        private SPNavigationNode MoveSPNode(QuickLaunchHeaders header, SPNavigationNodeCollection spNodeCollection, SPNavigationNode previousSibling)&lt;br /&gt;        {&lt;br /&gt;            int p = (int)header;&lt;br /&gt;            previousSibling = MoveSPNode(p, spNodeCollection, previousSibling);&lt;br /&gt;            return previousSibling;&lt;br /&gt;        }&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-8839747711011810855?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/8839747711011810855/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=8839747711011810855' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/8839747711011810855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/8839747711011810855'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/03/migration-quicklaunch.html' title='Migration - QuickLaunch'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-590587514617388596</id><published>2008-01-29T11:48:00.000+01:00</published><updated>2008-04-01T20:33:36.177+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='feature'/><category scheme='http://www.blogger.com/atom/ns#' term='customize'/><title type='text'>generic feature to install a custom masterpage</title><content type='html'>During my current job i needed to create a few new visual designs and install them as a masterpage. I searched the internet and found a custom masterpage changer, and used it. But it didnt fullfill my needs. WHen using this solution, i needed to have 7 assemblies for 7 masterpages. I changed the code and the feature.xml a bit to make it more generic. The code isn't too neat, it's more of quickly hacked ;)&lt;br /&gt;&lt;br /&gt;How to use it?&lt;br /&gt;&lt;br /&gt;Create a new dir with the name of your feature. Put an elements.xml, feature.xml and a dir with the name of your masterpage([name]). put the NewDesign.master, and custom css files (and maybe some other files) into that directory.&lt;br /&gt; &lt;br /&gt;FeatureName&lt;br /&gt;|- [Name]&lt;br /&gt;|- Feature.xml&lt;br /&gt;|- Elements.xml&lt;br /&gt;&lt;br /&gt;put the ChangeMaster assembly into the GAC. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;feature.xml:&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&amp;#60;&amp;#63;&amp;#120;&amp;#109;&amp;#108;&amp;#32;&amp;#118;&amp;#101;&amp;#114;&amp;#115;&amp;#105;&amp;#111;&amp;#110;&amp;#61;&amp;#34;&amp;#49;&amp;#46;&amp;#48;&amp;#34;&amp;#32;&amp;#101;&amp;#110;&amp;#99;&amp;#111;&amp;#100;&amp;#105;&amp;#110;&amp;#103;&amp;#61;&amp;#34;&amp;#117;&amp;#116;&amp;#102;&amp;#45;&amp;#56;&amp;#34;&amp;#32;&amp;#63;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#60;&amp;#70;&amp;#101;&amp;#97;&amp;#116;&amp;#117;&amp;#114;&amp;#101;&amp;#32;&amp;#120;&amp;#109;&amp;#108;&amp;#110;&amp;#115;&amp;#61;&amp;#34;&amp;#104;&amp;#116;&amp;#116;&amp;#112;&amp;#58;&amp;#47;&amp;#47;&amp;#115;&amp;#99;&amp;#104;&amp;#101;&amp;#109;&amp;#97;&amp;#115;&amp;#46;&amp;#109;&amp;#105;&amp;#99;&amp;#114;&amp;#111;&amp;#115;&amp;#111;&amp;#102;&amp;#116;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&amp;#47;&amp;#115;&amp;#104;&amp;#97;&amp;#114;&amp;#101;&amp;#112;&amp;#111;&amp;#105;&amp;#110;&amp;#116;&amp;#47;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#73;&amp;#100;&amp;#61;&amp;#34;&amp;#57;&amp;#48;&amp;#57;&amp;#54;&amp;#57;&amp;#54;&amp;#53;&amp;#54;&amp;#45;&amp;#65;&amp;#49;&amp;#67;&amp;#57;&amp;#45;&amp;#52;&amp;#102;&amp;#52;&amp;#48;&amp;#45;&amp;#65;&amp;#57;&amp;#53;&amp;#70;&amp;#45;&amp;#65;&amp;#51;&amp;#66;&amp;#68;&amp;#68;&amp;#70;&amp;#53;&amp;#55;&amp;#50;&amp;#51;&amp;#66;&amp;#70;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#84;&amp;#105;&amp;#116;&amp;#108;&amp;#101;&amp;#61;&amp;#34;&amp;#85;&amp;#115;&amp;#101;&amp;#32;&amp;#67;&amp;#117;&amp;#115;&amp;#116;&amp;#111;&amp;#109;&amp;#32;&amp;#77;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#32;&amp;#70;&amp;#105;&amp;#108;&amp;#101;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#83;&amp;#99;&amp;#111;&amp;#112;&amp;#101;&amp;#61;&amp;#34;&amp;#87;&amp;#101;&amp;#98;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#9;&amp;#32;&amp;#82;&amp;#101;&amp;#99;&amp;#101;&amp;#105;&amp;#118;&amp;#101;&amp;#114;&amp;#65;&amp;#115;&amp;#115;&amp;#101;&amp;#109;&amp;#98;&amp;#108;&amp;#121;&amp;#61;&amp;#34;&amp;#67;&amp;#117;&amp;#115;&amp;#116;&amp;#111;&amp;#109;&amp;#77;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#44;&amp;#32;&amp;#86;&amp;#101;&amp;#114;&amp;#115;&amp;#105;&amp;#111;&amp;#110;&amp;#61;&amp;#49;&amp;#46;&amp;#48;&amp;#46;&amp;#48;&amp;#46;&amp;#48;&amp;#44;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#67;&amp;#117;&amp;#108;&amp;#116;&amp;#117;&amp;#114;&amp;#101;&amp;#61;&amp;#110;&amp;#101;&amp;#117;&amp;#116;&amp;#114;&amp;#97;&amp;#108;&amp;#44;&amp;#32;&amp;#80;&amp;#117;&amp;#98;&amp;#108;&amp;#105;&amp;#99;&amp;#75;&amp;#101;&amp;#121;&amp;#84;&amp;#111;&amp;#107;&amp;#101;&amp;#110;&amp;#61;&amp;#98;&amp;#50;&amp;#102;&amp;#49;&amp;#54;&amp;#52;&amp;#53;&amp;#51;&amp;#52;&amp;#100;&amp;#55;&amp;#50;&amp;#53;&amp;#98;&amp;#56;&amp;#49;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#82;&amp;#101;&amp;#99;&amp;#101;&amp;#105;&amp;#118;&amp;#101;&amp;#114;&amp;#67;&amp;#108;&amp;#97;&amp;#115;&amp;#115;&amp;#32;&amp;#61;&amp;#34;&amp;#67;&amp;#117;&amp;#115;&amp;#116;&amp;#111;&amp;#109;&amp;#77;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#46;&amp;#67;&amp;#104;&amp;#97;&amp;#110;&amp;#103;&amp;#101;&amp;#77;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#69;&amp;#108;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#77;&amp;#97;&amp;#110;&amp;#105;&amp;#102;&amp;#101;&amp;#115;&amp;#116;&amp;#115;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#69;&amp;#108;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#77;&amp;#97;&amp;#110;&amp;#105;&amp;#102;&amp;#101;&amp;#115;&amp;#116;&amp;#32;&amp;#76;&amp;#111;&amp;#99;&amp;#97;&amp;#116;&amp;#105;&amp;#111;&amp;#110;&amp;#61;&amp;#34;&amp;#69;&amp;#108;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#115;&amp;#46;&amp;#120;&amp;#109;&amp;#108;&amp;#34;&amp;#47;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#47;&amp;#69;&amp;#108;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#77;&amp;#97;&amp;#110;&amp;#105;&amp;#102;&amp;#101;&amp;#115;&amp;#116;&amp;#115;&amp;#62;&amp;#32;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#80;&amp;#114;&amp;#111;&amp;#112;&amp;#101;&amp;#114;&amp;#116;&amp;#105;&amp;#101;&amp;#115;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#80;&amp;#114;&amp;#111;&amp;#112;&amp;#101;&amp;#114;&amp;#116;&amp;#121;&amp;#32;&amp;#75;&amp;#101;&amp;#121;&amp;#61;&amp;#34;&amp;#86;&amp;#105;&amp;#115;&amp;#117;&amp;#97;&amp;#108;&amp;#68;&amp;#101;&amp;#115;&amp;#105;&amp;#103;&amp;#110;&amp;#78;&amp;#97;&amp;#109;&amp;#101;&amp;#34;&amp;#32;&amp;#86;&amp;#97;&amp;#108;&amp;#117;&amp;#101;&amp;#61;&amp;#34;&amp;#91;&amp;#78;&amp;#97;&amp;#109;&amp;#101;&amp;#93;&amp;#34;&amp;#32;&amp;#47;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#47;&amp;#80;&amp;#114;&amp;#111;&amp;#112;&amp;#101;&amp;#114;&amp;#116;&amp;#105;&amp;#101;&amp;#115;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#60;&amp;#47;&amp;#70;&amp;#101;&amp;#97;&amp;#116;&amp;#117;&amp;#114;&amp;#101;&amp;#62;&amp;#13;&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;elements.xml:&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&amp;#60;&amp;#63;&amp;#120;&amp;#109;&amp;#108;&amp;#32;&amp;#118;&amp;#101;&amp;#114;&amp;#115;&amp;#105;&amp;#111;&amp;#110;&amp;#61;&amp;#34;&amp;#49;&amp;#46;&amp;#48;&amp;#34;&amp;#32;&amp;#101;&amp;#110;&amp;#99;&amp;#111;&amp;#100;&amp;#105;&amp;#110;&amp;#103;&amp;#61;&amp;#34;&amp;#117;&amp;#116;&amp;#102;&amp;#45;&amp;#56;&amp;#34;&amp;#32;&amp;#63;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#60;&amp;#69;&amp;#108;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#115;&amp;#32;&amp;#120;&amp;#109;&amp;#108;&amp;#110;&amp;#115;&amp;#61;&amp;#34;&amp;#104;&amp;#116;&amp;#116;&amp;#112;&amp;#58;&amp;#47;&amp;#47;&amp;#115;&amp;#99;&amp;#104;&amp;#101;&amp;#109;&amp;#97;&amp;#115;&amp;#46;&amp;#109;&amp;#105;&amp;#99;&amp;#114;&amp;#111;&amp;#115;&amp;#111;&amp;#102;&amp;#116;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&amp;#47;&amp;#115;&amp;#104;&amp;#97;&amp;#114;&amp;#101;&amp;#112;&amp;#111;&amp;#105;&amp;#110;&amp;#116;&amp;#47;&amp;#34;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#77;&amp;#111;&amp;#100;&amp;#117;&amp;#108;&amp;#101;&amp;#32;&amp;#78;&amp;#97;&amp;#109;&amp;#101;&amp;#61;&amp;#34;&amp;#65;&amp;#100;&amp;#100;&amp;#77;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#115;&amp;#34;&amp;#32;&amp;#85;&amp;#114;&amp;#108;&amp;#61;&amp;#34;&amp;#95;&amp;#99;&amp;#97;&amp;#116;&amp;#97;&amp;#108;&amp;#111;&amp;#103;&amp;#115;&amp;#47;&amp;#77;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#80;&amp;#97;&amp;#103;&amp;#101;&amp;#34;&amp;#32;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#70;&amp;#105;&amp;#108;&amp;#101;&amp;#32;&amp;#85;&amp;#114;&amp;#108;&amp;#61;&amp;#34;&amp;#91;&amp;#78;&amp;#65;&amp;#77;&amp;#69;&amp;#93;&amp;#47;&amp;#78;&amp;#101;&amp;#119;&amp;#68;&amp;#101;&amp;#115;&amp;#105;&amp;#103;&amp;#110;&amp;#46;&amp;#109;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#34;&amp;#32;&amp;#84;&amp;#121;&amp;#112;&amp;#101;&amp;#61;&amp;#34;&amp;#71;&amp;#104;&amp;#111;&amp;#115;&amp;#116;&amp;#97;&amp;#98;&amp;#108;&amp;#101;&amp;#73;&amp;#110;&amp;#76;&amp;#105;&amp;#98;&amp;#114;&amp;#97;&amp;#114;&amp;#121;&amp;#34;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#73;&amp;#103;&amp;#110;&amp;#111;&amp;#114;&amp;#101;&amp;#73;&amp;#102;&amp;#65;&amp;#108;&amp;#114;&amp;#101;&amp;#97;&amp;#100;&amp;#121;&amp;#69;&amp;#120;&amp;#105;&amp;#115;&amp;#116;&amp;#115;&amp;#61;&amp;#34;&amp;#84;&amp;#114;&amp;#117;&amp;#101;&amp;#34;&amp;#47;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#70;&amp;#105;&amp;#108;&amp;#101;&amp;#32;&amp;#85;&amp;#114;&amp;#108;&amp;#61;&amp;#34;&amp;#91;&amp;#78;&amp;#65;&amp;#77;&amp;#69;&amp;#93;&amp;#47;&amp;#99;&amp;#117;&amp;#115;&amp;#116;&amp;#111;&amp;#109;&amp;#46;&amp;#109;&amp;#97;&amp;#115;&amp;#116;&amp;#101;&amp;#114;&amp;#34;&amp;#32;&amp;#84;&amp;#121;&amp;#112;&amp;#101;&amp;#61;&amp;#34;&amp;#71;&amp;#104;&amp;#111;&amp;#115;&amp;#116;&amp;#97;&amp;#98;&amp;#108;&amp;#101;&amp;#73;&amp;#110;&amp;#76;&amp;#105;&amp;#98;&amp;#114;&amp;#97;&amp;#114;&amp;#121;&amp;#34;&amp;#32;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#73;&amp;#103;&amp;#110;&amp;#111;&amp;#114;&amp;#101;&amp;#73;&amp;#102;&amp;#65;&amp;#108;&amp;#114;&amp;#101;&amp;#97;&amp;#100;&amp;#121;&amp;#69;&amp;#120;&amp;#105;&amp;#115;&amp;#116;&amp;#115;&amp;#61;&amp;#34;&amp;#84;&amp;#114;&amp;#117;&amp;#101;&amp;#34;&amp;#47;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#9;&amp;#60;&amp;#70;&amp;#105;&amp;#108;&amp;#101;&amp;#32;&amp;#85;&amp;#114;&amp;#108;&amp;#61;&amp;#34;&amp;#91;&amp;#78;&amp;#65;&amp;#77;&amp;#69;&amp;#93;&amp;#47;&amp;#99;&amp;#117;&amp;#115;&amp;#116;&amp;#111;&amp;#109;&amp;#46;&amp;#99;&amp;#115;&amp;#115;&amp;#34;&amp;#32;&amp;#84;&amp;#121;&amp;#112;&amp;#101;&amp;#61;&amp;#34;&amp;#71;&amp;#104;&amp;#111;&amp;#115;&amp;#116;&amp;#97;&amp;#98;&amp;#108;&amp;#101;&amp;#73;&amp;#110;&amp;#76;&amp;#105;&amp;#98;&amp;#114;&amp;#97;&amp;#114;&amp;#121;&amp;#34;&amp;#32;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#73;&amp;#103;&amp;#110;&amp;#111;&amp;#114;&amp;#101;&amp;#73;&amp;#102;&amp;#65;&amp;#108;&amp;#114;&amp;#101;&amp;#97;&amp;#100;&amp;#121;&amp;#69;&amp;#120;&amp;#105;&amp;#115;&amp;#116;&amp;#115;&amp;#61;&amp;#34;&amp;#84;&amp;#114;&amp;#117;&amp;#101;&amp;#34;&amp;#47;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#9;&amp;#60;&amp;#70;&amp;#105;&amp;#108;&amp;#101;&amp;#32;&amp;#85;&amp;#114;&amp;#108;&amp;#61;&amp;#34;&amp;#91;&amp;#78;&amp;#65;&amp;#77;&amp;#69;&amp;#93;&amp;#47;&amp;#99;&amp;#117;&amp;#115;&amp;#116;&amp;#111;&amp;#109;&amp;#95;&amp;#116;&amp;#97;&amp;#98;&amp;#108;&amp;#101;&amp;#115;&amp;#46;&amp;#99;&amp;#115;&amp;#115;&amp;#34;&amp;#32;&amp;#84;&amp;#121;&amp;#112;&amp;#101;&amp;#61;&amp;#34;&amp;#71;&amp;#104;&amp;#111;&amp;#115;&amp;#116;&amp;#97;&amp;#98;&amp;#108;&amp;#101;&amp;#73;&amp;#110;&amp;#76;&amp;#105;&amp;#98;&amp;#114;&amp;#97;&amp;#114;&amp;#121;&amp;#34;&amp;#32;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#73;&amp;#103;&amp;#110;&amp;#111;&amp;#114;&amp;#101;&amp;#73;&amp;#102;&amp;#65;&amp;#108;&amp;#114;&amp;#101;&amp;#97;&amp;#100;&amp;#121;&amp;#69;&amp;#120;&amp;#105;&amp;#115;&amp;#116;&amp;#115;&amp;#61;&amp;#34;&amp;#84;&amp;#114;&amp;#117;&amp;#101;&amp;#34;&amp;#47;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#32;&amp;#32;&amp;#32;&amp;#32;&amp;#60;&amp;#47;&amp;#77;&amp;#111;&amp;#100;&amp;#117;&amp;#108;&amp;#101;&amp;#62;&amp;#13;&lt;br /&gt;&amp;#60;&amp;#47;&amp;#69;&amp;#108;&amp;#101;&amp;#109;&amp;#101;&amp;#110;&amp;#116;&amp;#115;&amp;#62;&amp;#13;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Text;&lt;br /&gt;using Microsoft.SharePoint;&lt;br /&gt;&lt;br /&gt;namespace CustomMaster&lt;br /&gt;{&lt;br /&gt;    public class ChangeMaster : Microsoft.SharePoint.SPFeatureReceiver&lt;br /&gt;    {&lt;br /&gt;        public override void FeatureInstalled&lt;br /&gt;          (SPFeatureReceiverProperties properties)&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;        public override void FeatureUninstalling&lt;br /&gt;           (SPFeatureReceiverProperties properties)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        public override void FeatureActivated&lt;br /&gt;           (SPFeatureReceiverProperties properties)&lt;br /&gt;        {&lt;br /&gt;            string strKey = "VisualDesignName";&lt;br /&gt;            string name = properties.Definition.Properties[strKey].Value;&lt;br /&gt;            &lt;br /&gt;            SPWeb CurrentWeb = properties.Feature.Parent as SPWeb;&lt;br /&gt;            string filler = "/";&lt;br /&gt;            if (CurrentWeb.ServerRelativeUrl == "/")&lt;br /&gt;            {&lt;br /&gt;                filler = "";&lt;br /&gt;            }&lt;br /&gt;            CurrentWeb.MasterUrl = CurrentWeb.ServerRelativeUrl + filler + "_catalogs/masterpage/" + name + "/NewDesign.master";&lt;br /&gt;            CurrentWeb.CustomMasterUrl = CurrentWeb.ServerRelativeUrl + filler + "_catalogs/masterpage/" +name + "/custom.master";            &lt;br /&gt;            CurrentWeb.Update();&lt;br /&gt;        }&lt;br /&gt;        public override void FeatureDeactivating&lt;br /&gt;           (SPFeatureReceiverProperties properties)&lt;br /&gt;        {&lt;br /&gt;            SPWeb CurrentWeb = properties.Feature.Parent as SPWeb;&lt;br /&gt;&lt;br /&gt;            string filler = "/";&lt;br /&gt;            if (CurrentWeb.ServerRelativeUrl == "/")&lt;br /&gt;            {&lt;br /&gt;                filler = "";&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            CurrentWeb.MasterUrl = CurrentWeb.ServerRelativeUrl + filler + "_catalogs/masterpage/default.master";&lt;br /&gt;            CurrentWeb.CustomMasterUrl = CurrentWeb.ServerRelativeUrl + filler + "_catalogs/masterpage/default.master";&lt;br /&gt;            CurrentWeb.Update();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-590587514617388596?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/590587514617388596/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=590587514617388596' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/590587514617388596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/590587514617388596'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2008/01/generic-feature-to-install-custom.html' title='generic feature to install a custom masterpage'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-1344503490283922856</id><published>2007-12-19T15:59:00.001+01:00</published><updated>2008-04-01T20:33:51.386+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>How to make a connection with a database</title><content type='html'>To retrieve data from a database, you have to make a connection first with it. But for some reason, sometimes you don't want to embed connection strings in your web.config (and code), but how are you going to manage this?&lt;br /&gt;&lt;br /&gt;One option is to use Single Signon for this. But what IS sso and how does it work?&lt;br /&gt;&lt;br /&gt;Single Signon is a microsoft service that can store various (logon) information in a database. The only thing that is needed , is to specify a user(admin? ;)) that is allowed to maintain this information, after that, it's a piece of cake to use.&lt;br /&gt;&lt;br /&gt;When the sso service is started, usernames, passwords and other information, for example databases, can be specified to be used. When this service is used, the information that is looked for will be returned and can be used to signon to, for example, a database. Using sso, no data needs to be stored in the web.config and all logon information can be stored in a central place. The great thing about this, is that groups can be specified that are allowed to retrieve is information.&lt;br /&gt;&lt;br /&gt;How does this work for a sharepoint user that doesnt have the rights to acces a database?&lt;br /&gt;&lt;br /&gt;* At first, enable to Single signon service: Open the services window in the administration panel and open the Microsoft Single Signon Service. Set the startup type to automatic. Go to the Log On tab, select "This account" and fill in the administrator account.&lt;br /&gt;* Go to the Sharepoint Central Administration page and select the Operations tab.&lt;br /&gt;* In the Security Configuration, select "Manage settings for single sign-on"&lt;br /&gt;* Open "Manage Server Settings for Single Sign-on"&lt;br /&gt;* Single Sign-On Administrator Account: the administrator account that you also filled in in the Single Signon Service.&lt;br /&gt;* fill in the same account for Enterprise application definition administrator account&lt;br /&gt;* fill in the database server and database name that is storing sso information&lt;br /&gt;* use the default timeout settings. Press OK&lt;br /&gt;* Next, create an encryption key&lt;br /&gt;* After the creation of a key, navigate to the Manage Enterprise application definitions.&lt;br /&gt;* Create a new item&lt;br /&gt;* Fill in the display name (for example sql acces&lt;br /&gt;* application name, the string that is used to identify the data&lt;br /&gt;* email address for support&lt;br /&gt;* select a group account type&lt;br /&gt;* select windows authentication as authentication type&lt;br /&gt;* In logon account information, fill in the fields that will be filled&lt;br /&gt;* Field 1: username, mask: no&lt;br /&gt;* Field 2: Password, mask: yes&lt;br /&gt;* Field 3: database name&lt;br /&gt;* When the data is created, select the "manage account information for an Enterprise Application Definition&lt;br /&gt;* Select the application definition that you just created and fill in the group that will have acces to the credentials for logging in to the database&lt;br /&gt;* You will see the 3 fields that you created: username, password and database name&lt;br /&gt;* Fill in the credentials that are used to log in onto the database.&lt;br /&gt;* Now you will be ready to write some code to retrieve the credentials, when you are allowed to get them&lt;br /&gt;&lt;br /&gt;example code:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;private WindowsImpersonationContext LoadCredentials()&lt;br /&gt;        {&lt;br /&gt;string[] rgGetCredentialData = null;&lt;br /&gt;            Credentials.GetCredentials(1, "encisql", ref rgGetCredentialData);&lt;br /&gt;&lt;br /&gt;            if (rgGetCredentialData == null)&lt;br /&gt;            {&lt;br /&gt;                throw new ApplicationException("Didn't get CredentialData");&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            string _userName = rgGetCredentialData[0];&lt;br /&gt;            string _password = rgGetCredentialData[1];&lt;br /&gt;&lt;br /&gt;            string[] userDomain = _userName.Split('\\');&lt;br /&gt;            IdentityHelper.IdentityHelper ih = new AjaxWebParts.IdentityHelper.IdentityHelper();&lt;br /&gt;&lt;br /&gt;            before = WindowsIdentity.GetCurrent().Name;&lt;br /&gt;            WindowsIdentity id = ih.CreateIdentity(userDomain[1], userDomain[0], _password);            &lt;br /&gt;            WindowsImpersonationContext impersonatedUser = id.Impersonate();&lt;br /&gt;            after = WindowsIdentity.GetCurrent().Name;&lt;br /&gt;&lt;br /&gt;            return impersonatedUser;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void GetData()&lt;br /&gt;{&lt;br /&gt;            WindowsImpersonationContext impersonatorID = LoadCredentials();&lt;br /&gt;            &lt;br /&gt;            // code to retrieve data from database&lt;br /&gt;         &lt;br /&gt;            UndoCredentials(impersonatorID);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;* Now you can logon to the given database, with the credentials of the account that is allowed to logon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-1344503490283922856?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/1344503490283922856/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=1344503490283922856' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/1344503490283922856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/1344503490283922856'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2007/12/how-to-make-connection-with-database.html' title='How to make a connection with a database'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-7526046714449253512</id><published>2007-12-17T09:34:00.000+01:00</published><updated>2008-04-01T20:32:19.638+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='customize'/><title type='text'>CSS styleguide for sharepoint 2007</title><content type='html'>When creating a new masterpage and/or a theme for sharepoint 2007, there are really a lot of default styles used. &lt;a href="http://www.heathersolomon.com/"&gt;&lt;em&gt;Heather Solomon&lt;/em&gt;&lt;/a&gt; wrote a CSS styleguide with a lot of commonly used styles when branding sharepoint&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.heathersolomon.com/content/sp07cssreference.htm"&gt;Click here&lt;/a&gt; for the reference guide&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-7526046714449253512?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/7526046714449253512/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=7526046714449253512' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/7526046714449253512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/7526046714449253512'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2007/12/css-styleguide-for-sharepoint-2007.html' title='CSS styleguide for sharepoint 2007'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-3652077581182625483</id><published>2007-12-17T09:23:00.000+01:00</published><updated>2008-04-01T20:32:19.639+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='customize'/><title type='text'>Branding Sharepoint</title><content type='html'>it can be a pain when you want to brand a sharepoint for the very first time. That's why i decided to make up this post. If you want some more information, you can always send me an email about branding.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* download the minimalistic masterpage &lt;a href="http://www.heathersolomon.com/blog/articles/BaseMasterPages.aspx"&gt;click here&lt;/a&gt;.&lt;br /&gt;* create a html mockup (I prefer tables!)&lt;br /&gt;* copy the masterpage to _catalogs/masterpage of your page (within sharepoint designer)&lt;br /&gt;* paste the html mockup in the minimalistic masterpage&lt;br /&gt;* make sure to place the masterpage contentholders between two div-tags: in this way, the content will be displayed below your html mockup.&lt;br /&gt;* cut and paste contentplaceholders one by one to the place where you want your content to be shown. If you dont need a certain content placeholder, &lt;em&gt;DONT&lt;/em&gt; delete it, but place it inside the asp:panel tags. In this way, they &lt;em&gt;are&lt;/em&gt; available, but they won't be shown.&lt;br /&gt;* Add a css with your custom style's in it.&lt;br /&gt;* you are finished&lt;br /&gt;&lt;br /&gt;If you want to, you can deploy this masterpage with a (webapplication) feature, it will be available troughout whole the site then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-3652077581182625483?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/3652077581182625483/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=3652077581182625483' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3652077581182625483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/3652077581182625483'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2007/12/branding-sharepoint.html' title='Branding Sharepoint'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8904656588378643516.post-5114410287705094284</id><published>2007-11-15T11:50:00.000+01:00</published><updated>2008-04-01T20:32:19.639+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='customize'/><title type='text'>Theming in Sharepoint 2007</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;Creating Themes in MOSS 2007&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;li&gt;On the Sharepointserver open the Themes folder. Default it is located &lt;em&gt;c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Themes&lt;/em&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;li&gt;Make a copy one of the existing theme folders and its contents rename it e.g. MyTheme.&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Rename the .INF file within the MyTheme folder to MyTheme.INF&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Edit MyTheme.INF. At the info section, Change the title, to MyTheme. In the titles section, rename the names to your new name. this section is to present the name in the different language. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Provide an image to give a preview of your theme. This image should be placed in &lt;i&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\IMAGES&lt;/i&gt;. E.g. tmbMyTheme.gif &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Modify the &lt;i&gt;c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Layouts\1033\SPTHEMES.xml&lt;/i&gt; to include a reference to the new MyTheme theme.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Modify the css to your needs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;reset iis&lt;/li&gt;&lt;br /&gt;&lt;li&gt;apply the theme to a test site&lt;/li&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8904656588378643516-5114410287705094284?l=sp2k7.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sp2k7.blogspot.com/feeds/5114410287705094284/comments/default' title='Reacties plaatsen'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8904656588378643516&amp;postID=5114410287705094284' title='0 reacties'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/5114410287705094284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8904656588378643516/posts/default/5114410287705094284'/><link rel='alternate' type='text/html' href='http://sp2k7.blogspot.com/2007/11/theming-in-sharepoint-2007.html' title='Theming in Sharepoint 2007'/><author><name>Bas Lijten</name><uri>http://www.blogger.com/profile/08202650165141834171</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
