Anyone who’s been developing SharePoint will I am sure have had problems building custom list schemas. However, this one I hadn’t seen before.
A custom site definition had been built which activated a feature which created an instance of a custom list for holding event list items.
When the site was created the events list was created perfectly, no problems.
However, when the list is created through the GUI, by clicking on Site Actions->View All Site Content and clicking Create and choosing the custom list type.
This brings up the new.aspx form, once the title and description is filled out and the create button clicked then the following exception was thrown :-
Exception occurred. (Exception from HRESULT: 0x80020009 (DISP_E_EXCEPTION)) at Microsoft.SharePoint.Library.SPRequestInternalClass.CreateListFromFormPost(String bstrUrl, String& pbstrGuid, String& pbstrNextUrl)
at Microsoft.SharePoint.Library.SPRequest.CreateListFromFormPost(String bstrUrl, String& pbstrGuid, String& pbstrNextUrl)
So the problem is something to do with the list schema.xml file. This schema.xml file is found in the feature directory. I use the following directory structure:-
Looking at the error, the stack trace mentions the function, CreateListFromFormPost. I thought the issue was due to a custom NewForm page that we were using.
I could not find anything that would fix the issue, even replacing all the custom xml relating to the NewForm element.
However, the schema.xml was missing an attribute, this was the Url=”” attribute part of the <List> element.
This issue was found by comparing the schema.xml file with an out of the box schema.xml. As soon as the Url attribute was provided (even if the attribute was blank) then the list was created properly.
To recap the section of the schema that needed to updated was:-
<List xmlns:ows=”Microsoft SharePoint” Title=”Events” DisableAttachments=”TRUE” FolderCreation=”FALSE” Url=”Lists/Events” EnableContentTypes=”TRUE” BaseType=”0″>
The way that a list is created through a List Feature Instance must be called by some separate code function probably something like CreateListFromListInstanceFeature() instead of CreateListFromFormPost() and hence the list is created ok by the List Feature.
There are a few conversations about this on MSDN but when I first read them I didn’t realise the solution that they were pointing to.
Anyway hope that helps.