Default values on a content type not set in a page layout

Now this took me some time to figure out…

Basically the problem I was having was that some of my fields, specifically date time fields, weren’t being populated with their default values of [Today]. I had set the default value correctly on the field and assigned the field to my Content Type which I had then applied to my Pages library (all through a Feature). Everything looked fine until I created a page, and hey presto all my fields were empty.

I thought at first it was to do with how I was provisioning my fields in xml but everything appeared fine, I then added a date time field through the GUI with a default value to my content type to make sure and that didn’t work either!

I then started looking at the settings on my Pages library to see if anything there was wrong. I did have multiple Content Types assigned to my library so I thought to avoid confusion I’d remove all the other Content Types and leave mine as the default. I created a page and all my default values were populated!! Aha, I thought, there’s a conflict somewhere or a corrupt Content Type. So I added them all back in, testing after each one and everything worked!

After further testing, it turns out that default values on fields in a Content Type on a page layout will ONLY get populated on the DEFAULT Content Type on a library. Definitely seems to be a bug… and is a problem if your multiple content types each have fields with default values, luckily for me that wasn’t the case.

An unhandled exception occurred in the user interface. Exception Information: OSearch (SearchAccount)

Had this not very nice error whilst trying to start the search service on my single server SharePoint installation through Central Administration:

An unhandled exception occurred in the user interface. Exception Information: OSearch (SearchAccount)

This took me a while to figure out as it appears that even though I wasn’t using a Domain account, the UI seems to expect a ‘Domain format’ account, so entering DevMachine\SearchAccount worked!


Day 3 of the SharePoint European Best Practices Conference

The final day of the conference got off to a great start when I discovered I had won a Sat Nav in the prize draw. Can’t complain!

The first talk I went to was Maurice Prather’ssession on best practices for creating, deploying and managing list and item events. This was very interesting as, not matter how much you think you know about this topic, there were plenty of useful nuggets to take away. One common theme that surfaced again in this talk was being careful what you package in a wsp to minimise the upgrade impact. I think the best approach is to logically group together bunches of functionality so that on an upgrade you will upgrade only the functional area you have changed rather than say all the event receivers. Other best practices:

  • In general its better to bind event receivers to content types rather than lists, caveats being some lists have multiple content types so its better in that case to bind to the list. Also, a document added event only uses the default content type
  • If PartiallyTrustedCallers are not allowed on your event receiver class you may get skewed results
  • Use DisableEventFiring and EnableEventFiring in your event receiver class to control recursion in events and prevent the ‘fan’ effect
  • There is no Site Added event, but if you have an auto-activated feature on a site, you can use the featureactivated event to simulate site added

The next session was Spencer Harbarand Andrew Connell’ssession on launching your MOSS publishing site. This had some repeated content from Andrew’s previous session on building high performance solutions but it’s such a broad subject that he was able to dig deeper in other areas. A few things I noted down from this event:

  • To get rid of the ActiveX warning message that you get the first time you go to a SharePoint site, see MS KB 931509
  • To get the ActiveX warning message to reappear after you have accepted it, go to IE settings->Manage Add-ons and disable the namectrl class and then delete it, though this didn’t seem to work in Andrew’s demo!
  • The ViewFormPagesLockDown feature needs to be reactivated when changing the anonymous settings on a site collection
  • Remember to enable AND configure your page output caching
  • The Blobcache maxsize in the web.config is in Gigabytes NOT Megabytes

During the lunch session got a chance to see a really nice Silverlight demo of a SharePoint site being tested in schools in Leeds by Andrew Woodward. It was very, very nice and a lot of people came away very impressed. A few people asked about the accessibility of using Silverlight which always happens. My feelings about accessibility is that its a means to get the core information out of the site to the user, so why can’t you have one mechanism for one and another for the rest, I get fed up of trying to deploy a single (often lowest common denominator) solution…

After lunch it was time for Chris O’Brien’ssession on the various approaches to and the best practices for deploying SharePoint sites through multiple environments. Been looking forward to this one, as I have a lot of time for Chris (we worked together for a while a few months back) and I have been helping him a little with the Kivati piece of his talk. One thing I noted during the demo was that his Content Deployment Wizardcan now import multiple .cmp files in one go. I’m pretty sure it hasn’t always been able to do that, plus you can command-line script it now which is very handy. I’m thinking of writing a deployment post myself to cover integration of Powershell and the command-line content deployment wizard to give you a nice complete deployment solution… Very good talk by Chris, he comes across very relaxed on stage and I’m pretty sure that he had the most questions after a session than a lot of the others which shows the interest in this area. I have to say a big thanks to Chris for pimping me out as the ‘Kivati guy’, hopefully that can only be a good thing, though the phone hasn’t rung yet 🙂

Final session of the day was Eric Shupps’session on high performance programming for SharePoint developers. This was very interesting as it went into quite a low level at some points and the demos gave good timing comparisons for various techniques to get list items. An interesting thing he mentioned is that every piece of data in a SharePoint site collection, no matter where it is in the site collection all goes into one SQL table, which emphasis the importance of optimised data access. A few tips here:

  • Use the Search API for cross-site queries on lists, use targeted scopes to allow for more frequent indexing. I really like this idea and can see lots of uses, and not only that but the performance is really good, the only caveat being that the data could be stale (depending on the frequency of your index) so it may not fit all situations
  • Get your data either via web services or search api and then use LINQ to provide a relational data layer to aggregate data across lists

We then had the Q&A session for developers and yet again the panel all worked so well together on stage so that not only was it very informative but also very entertaining. My two questions got answered, one being what’s the best way to monitor that your events are still firing as expected, and the answer was that when an event fails there is nothing logged, so you’d have to implement some sort of tracing/CRUD mechanism that would occasionally run, maybe overnight?, so that you were testing in a controlled fashion. Now I’ve thought about this, and probably the only way to do this would be to have a test harness that would interrogate a list that has an event attached, before triggering an event it would write to a SQL table, the event would then be responsible for updating the SQL table. That way you could see if any weren’t firing? Future project for me I think…

My other question was about how many gallons exactly was Eric’s hat, and the answer is that there is no such thing anymore there are only high and low ones now apparently but he thought the question was funny, at least he didn’t hit me anyway…

SharePint in the evening was great, chatted to loads of people and really enjoyed myself. Really had a great time over the last 3 days and will definitely go again, I just need to convince Chris to talk about Kivati again and then convince him that he needs me to travel with him to the next conference…;-)

Day 2 of the SharePoint European Best Practices Conference

Day 2 in sunny’ish London and a lovely start to the day with croissants and tea. I got there nice and early, had a wander around and met some nice people, including Philip Broadbery from a growing company called Fernhart New Mediathat seems to be going places…

The first talk I attended was Eric Shupps’talk on designing and deploying enterprise branding solutions using custom site definitions. This seems to be a contentious issue between some of the MVP’s with some interesting arguments in the Q&A session at the end of the day regarding declarative versus code solutions. I’m leaning more towards the code solution at the moment, but my recent experiences with site definitions has debunked a number of myths around their complexity and I’m not as scared of them as I once was… Eric was a very entertaining talker, a large presence on the stage, particularly in his large cowboy hat! Couple of useful tips I got from this included separating out the features and site definitions into different wsp’s. Quite often they get bundled together in deployments into one solution but what this means is that when you upgrade, the infrastructure will always recycle the app pools because you are re-provisioning onet.xml files etc, when quite often they haven’t changed and its only really the features that have changed. Having them separate alleviates that problem and makes live deployments less ‘impactful’. Another tip was a pointer to Patterns and Practices SharePoint Guidanceon codeplex which is a great resource for MOSS developers.

Next talk was by Ben Robbon customizing the Search UI in SharePoint 2007. This was actual quite a useful talk, as it was particularly pertinent to some problems we were facing with my current client. He suggested using the out-of-the-box search web parts where possible, and customising them using Xslt rather than re-inventing the wheel. He mentioned a few SEO things to help your sites, including organising your sites logically and having an up-to-date sitemap file in the root of your site. One suggestion was to have a custom timer job that uses the sitemap provider on the site collection to regenerate the sitemap xml file and then re-copy to the root.  A simple idea, but one I don’t think I’ve seen done anywhere…

Todd Bleekerwas up next to talk about best practices for creating custom field types. The amount of information that this guy can cram into a session is amazing. I was physically exhausted afterwards…! Some really good content here (too much to remember, let alone post but I should get that DVD so I’ll follow up). His main recommendation was to utilise User Controls for the UI of the control class of a custom field type and use a Value class to enable serialisation into a friendly object. This gives you the nice logical separation of ui/code and also the design surface and intellisense within Visual Studio. This is instead of using the rendering template xml that is currently the only documented way of doing this. Use the FieldEditorUserControl property in the fldtypes.xml file to point to your user control.

Andrew Connellswiftly followed with a talk on building high performance solutions on MOSS 2007. Again another talk crammed with content. Key things I picked out of this, was to minimise the perception of page load by using a lazy-load core.js (see Microsoft Knowledge Base Article 933823); look at image stitching/clustering to save on http requests for page furniture. This sort of works along the same principles as sprite batch files, where your images are in one long panorama, that you index with an offset of the image width, though its done via cropping in css. He suggested a company that has some useful tools to help with this as I imagine it would be a bit of a pig to do manually. The company was Get Run-time Page Optimizer.Another big area that can lead to rapid improvements is IIS Http compression. Dynamic compression level isn’t set by default for IIS7 sites, if you start by setting the level at 9 (10 is the max, but the CPU hit just isn’t worth it) and then scale it down until your cpu usage is acceptable it can give you performance improvements of 20%+ just by ‘checking a box’…

That was the last talk of the day but it was followed by a Developer Panel Q&A session which was quite interesting though difficult to write down. Lots of interesting talks about site definitions versus feature stapling, defining meta data at the site level (consensus seemed to be, set it on the default page of the site as its essentially the same thing). Hope these sessions are included on the DVD we get. Will let you know!

Anyway more fun tomorrow!

Day 1 of the SharePoint European Best Practices Conference

Ok, so the first day didn’t get off to the best of starts as I somehow managed to spray water all over my trousers and shirt in the toilet and had to wait until they dried out before I could come out…but after that it got a whole lot better!

I arrived nice and early and was pleased to receive my SharePoint rucksack and a free copy of the Microsoft Office SharePoint Server 2007 Best Practices book(that i received for being an early booker). The book gets some good reviews so I’ll forward to giving it a look at some point.

The keynote was by Joel Olesonwho seems to have been involved with SharePoint since the dawn of time. He came out with a Union Jack hat and some pictures of himself in a London phone box wearing an Arsenal shirt and then proceeded to compare SharePoint to the killer rabbit from Monty Python and the Holy Grail which got a few laughs. His basic premise being that SharePoint can lull you into thinking its nice and soft and cuddly but treat it the wrong way and it can tear your throat out… Harsh but probably fair. He then went on to talk about 10 key steps to a successful SharePoint deployment which was interesting but he started to run out of time and became a bit rushed towards the end which was a shame.

I then went to Todd Bleeker’ssession which was all about the best practices for developing web parts. The main thing I took away from his talk was that I would love to go on one of his training courses. He is a very articulate, (and gesticulate-if that’s a word) presenter whose obvious enthusiasm for all things .Net really shines through. He provided some very solid guidelines on developing web parts, and the thing was that a lot of what he was talking about was validating the way that I go about developing web parts myself (something I owe a lot to Riaz Ahmed from my time at Lbi). One thing I do want to look more into that he mentioned (and I will blog my findings with this at some point!) was using the ICallbackinterface for updating web parts on a page in isolation. Sounded really good. He also mentioned a handy registry ‘hack’ to allow for right-clicking a .wsp to add the solution to the solution store, you can find that here.

For some reason I then decided to stray from the developer track (the next session there was on InfoPath Forms Services) and attend a session on the Business Adoption track on Governance. This was presented by Natalya Voskresenskayaand was a case study on Governance from one of her past projects. To be honest, it wasn’t as interesting as I was hoping so not really much more to say there. A few people there seemed to like but it just wasn’t my thing.

Back onto the developer track with a session by Andrew Connellon understanding the differences between using field controls and and web parts. Another brilliant speaker, very natural on stage and I thoroughly enjoyed his talk. Didn’t learn a tremendous amount of new stuff (I have his bookwhich I can’t recommend enough) and this does go into some of this. But a very worthwhile session none-the-less. A big part of his talk was describing when to use field controls (and what you gain/lose) and when to use web parts (and what you gain/lose). This is an important topic as it can often come back to bite you (like the killer rabbit…) if you get it wrong. Key points to remember, web parts have no history, values are stored in the personalisation store. Field controls give you that history but no personalisation is available etc.

The last session of the day was from an old colleague of mine Daniel McPhersonfrom back in my Barclays days when he used to work for Microsoft. His talk was about using SharePoint as a social computing platform, and the things that SharePoint can do incorporate the various ‘social’ platform ideas into the intranet space. He demoed the ability to have tagged links (which is a free download on his site) within your intranet. What this gives your employees is the ability to add an interesting link very quickly and easily to a tagged links list within your site collection that can be shared with your colleagues. This automatically gives you figures on most viewed etc and the most popular links bubble to the top. He also demoed a cool concept that he is currently working on, of providing twitter-like functionality to your intranet, this builds on the Colleagues functionality that you get out of the box, but gives the ability of posting updates and tracking other peoples updates in an aggregated way. Daniel also came across very well in his talk and provided enough of a different style of presenting that very much detracted from the ‘graveyard’ slot that he had. Glad I went.

So that wraps up Day 1. Looking forward to tomorrow. Apparently we get a DVD sent out with the content of all the sessions so I may follow up with some more details on the ones I attended or on the ones that I couldn’t make. And at least I have now worked out the best angle to put your hands under the taps but I’m going to wear my waterproofs just in case…

Welcome to my blog!

Welcome to my blog. This is hopefully the start of something good, well the start of something anyway… The main reason is primarily to serve as a memory dump for myself, I don’t know how many times I’ve either solved a particularly tricky problem, or stumbled across something really cool and then immediately forgotten about it. At least now it will be archived somewhere. Also, it’s good to share…

My primary job is as a Microsoft SharePoint consultant, so I expect the majority of my posts to be in that area, but I also like to dabble with XNA and Silverlight and I have a couple of personal projects going on with those technologies that I will probably want to blog about too.

So stay tuned…

Justin French