Thursday, February 5, 2015

Significance of BaseViewID="0" in schema.xml for SharePoint List Definition

Whenever you create a SharePoint List Definition in Visual Studio the schema.xml file contains two entries for View.

<View BaseViewID="0" Type="HTML" MobileView="TRUE" TabularView="FALSE">

<View BaseViewID="1" Type="HTML" WebPartZoneID="Main" 
      DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" 
      DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" 
      SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" 
      Url="AllItems.aspx">

Note that one of the views has BaseViewID="0" while other one has BaseViewID="1". The view with BaseViewID set to 1 is the default view with Url set to AllItems.aspx. But the view with BaseViewID set to 0 has no Url attribute set. Any modification for BaseViewID="1" gets reflected on the default view but I couldn’t figure out where the BaseViewID="0" view was being used. Even MSDN documentation is not very clear about it. A bit puzzled about this I posted this question on SharePoint StackExchange and was pointed to this answer which explains the reason for this additional view.

Wednesday, February 4, 2015

Prevent adding duplicates records from predefined data in ListInstance while reactivating its feature

In SharePoint if we have predefined data in ListInstance then deactivating and then reactivating its feature causes the predefined data to created again resulting in duplicates. Say, for e.g. our ListInstance looks something like this.

<ListInstance ...>
  <Data>
    <Rows>
      <Row>
        <Field Name="Title">Record 1</Field>
      </Row>
      <Row>
        <Field Name="Title">Record 2</Field>
      </Row>
    </Rows>
  </Data>
</ListInstance>

If we deploy this to a SharePoint site and if we deactivate and reactivate its feature then we will have “Record 1” and “Record 2” appear twice. Deactivating and reactivating it again would only create more duplicates.