Important update: Waldek Mastykarz has posted a workaround here: http://blog.mastykarz.nl/inconvenient-sharepoint-2010-content-query-web-part-anonymous-access/.
This week, my team and I were upgrading a customer’s public internet site from MOSS to SP 2010. The MOSS site uses the CQWP in several places.
We went through a very detailed procedure to ensure accuracy, quality and all that good stuff. Despite that, we ran into a problem in the 11th hour that we didn’t expect or uncover until very late. Specifically, our CQWP wouldn’t render for anonymous users. It rendered find for the authors (who were logged in), but it wouldn’t show the content for anonymous users.
We did a lot of research and these are the parameters and actions we took to isolate the behavior:
- CQWP would render fine when it was pulling content from a custom list.
- CQWP would render content from the /Pages library.
- It would not render content from /SiteCollectionImages
- We created a new document library and uploaded a few docs to it. We did not add any content types to the library – this was a simple out of the box doc lib with no customization. Existing CQWP could not read from it.
- We created a new page and added a CQWP to it using all default values. it would not render for anonymous.
- We (somewhat hastily) set up a new SP 2010 environment, straight out of the box again and replicated this behavior.
Bottom line, it appears that CQWP in SP2010 can’t render content for anonymous users when the data source is a document library. Can this be true?
This is the error that we saw in the logs:
Web Part title: Content Query Web Part 653d91fb-2f83-4e6a-83af-1f39e8939f0a
07/30/2010 12:03:56.90 w3wp.exe (0x0F30) 0x1540 SharePoint Foundation Web Parts 89a1 High Error while executing web part: System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart.SetDocumentIconUrlAndOnClickString(SPWeb web, DataRow row, String strDefaultItemOpen, Boolean fSetDocIcon, Boolean fSetOnClick, String fileRefColumnRef, String progIdColumnRef, String fsobjTypeColumnRef, String permMaskColumnRef) at Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart.PreProcessForDocumentIconAndOnClickAttribute() at Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart.AddContentQueryData() at Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart.GetXPathNavigator(String viewPath) at Microsoft.SharePoint.WebPartPages.DataFormWebPart…. 653d91fb-2f83-4e6a-83af-1f39e8939f0a
It just seems kind of impossible that CQWP wouldn’t work for anonymous users. If you know any more about this, please post a comment.
Follow me on Twitter at http://www.twitter.com/pagalvin