ItemStyle issues after SharePoint 2013 upgrade (?)

I have a client who is running SharePoint Online, the 2010 version. She sent me an email saying “Help! None of our content query webparts work!” I took a quick look and it was that standard error that the CQWP cannot be displayed. I thought that maybe someone had messed with the ItemStyle.xsl – that’s usually the first place to start troubleshooting.

blogxslt

I tried to log into the environment using SharePoint Designer 2010, considering that’s what I’d always used for this client. She hadn’t gotten the upgrade email from Microsoft yet, but it turned out that I suddenly needed SharePoint Designer 2013 to log in.

That ItemStyle.xsl that I thought had been messed with? It hadn’t been touched in six weeks and the last person to do anything with it was me.

I traced the issue to a section that was being used to aggregate blog posts within the environment. There turned out to be two issues: the strip HTML template I was using was throwing errors and a variable wasn’t working properly.

@Body variable

I saved the template problem for later and tried to figure out why I suddenly wasn’t actually getting any input from the @Body tag.

I made sure “Body” was actually filled into the slot in the CQWP – it was.

I checked to make sure the field really was named “Body” by checking the URL – it was.

I defined it in the XSL so I could call $Body instead of @Body but that didn’t help.

Finally, I used Heather Solomon’s snippet to see which variables were actually being passed to the CQWP:

<xsl:for-each select="@*">
 P:<xsl:value-of select="name()" />
</xsl:for-each>

It turned out that it suddenly Body was called body. That makes a difference in XSLT. I replaced @Body with @body and suddenly I had data to work with again.

Remove HTML template

I finally traced the issue to a template I was using to strip the HTML from the Body field. I had used Ben Prins’ Remove HTML markup in Content Query Web Part, which had worked fine – until it suddenly didn’t.

I replaced the “removeMarkup” template with the one from Maulik Dhorajia’s Removing HTML tags using XSLT. And suddenly it all worked.

I went through the code of the two templates and I can’t really see much of a difference – it seems to come down to the order and structure of how things are called in the code. Then again, I’m not really a developer.

Lessons learned

  • I think Microsoft has done some underwater upgrades to some SharePoint Online environments which suddenly require the use of SharePoint Designer 2013
  • There must be some differences in the XSLT rendering between SharePoint 2010 and SharePoint 2013

SharePoint and the disappearing webparts

I have noticed something odd with placing list view webparts: they disappear at odd times. I place them on the page and do something such as editing the webpart, etc. and then they’re just suddenly gone. I’ve seen this on SharePoint 2013 as well as SharePoint 2010/2013 Online, with IE9, IE10 and Chrome.

missing2

When I go to re-add the webpart to the page, I suddenly get “Wiki [2]” as a webpart title, which means that the webparts aren’t completely disappearing – they’re still there, somewhere.

By going to the webpart maintenance page (add ?contents=1) to the end of the URL), I can see that the webparts is open on the page. But… I can’t see it.

missing1

I found Jennifer Mason’s blog on SharePoint 2010, Office365: Why does my web part randomly disappear?!? which also looks at the webpart maintenance page. She has a really good tip: close the webpart via the maintenance page, then re-add it to the page via Add Webpart -> Closed webparts. Voilá – it was back on the page.

However, the webpart disappeared as soon as I tried to save the page. It even disappeared when I hit “Edit Webpart” – I had the edit webpart dialogue but no webpart.

I started checking the HTML source of the zones, to see if the webpart code changed at all to cause this issue. Long story short – the problem doesn’t seem to be there.

At one point, since I was working with simple wiki pages, I edited the webpart without editing the page first. And suddenly it all worked perfectly.

So, when you’re bashing your head against the wall or are just very tired of configuring list webparts that won’t hang around, do the following:

  1. Add the webpart(s) to the page. 
  2. Save the page
  3. Edit the webparts without editing the page first