Archive | SharePoint 2010 RSS feed for this section

ListData.svc and Resource Throttling

18 Jul

One of the new features in SharePoint 2010 is Resource Throttling.  It allows SharePoint farm administrators to put hard limits on the number of items that a user can display in a single view.  By default the limit is set to 5,000 items for regular users and 20,000 for administrators (not site collection administrators) and auditors.  You can read more about resource throttling and large lists here.

Although resource throttling is great for farm administrators, it can be a real pain for the SharePoint developer if they are not careful with their design.  When you exceed the 5,000 item limit, SharePoint can throw some really intimidating errors and will even disable your ListView webpart making your list unavailable until you bring the list into compliance.    The following Microsoft video demonstrates exactly what happens when you exceed the list limit and provides some techniques to address large lists.

The other day I noticed that my javascript on a site page was throwing an error in a section that makes a call to the new RESTful web service  ListData.svc.  If you have not used this wonderful web service, I highly recommend it–you can learn more about it here.  What makes listdata.svc so powerful are the field-value pairs you can pass along in a query string.  These field-value pairs allow you to define specific queries that return only the data you are interested in–instead of returning everything and then parsing it yourself.  The query string that I was building was using the $filter command to search for items in my list that met my criteria.  The query looked something like this:


var url = "http://localhost/_vti_bin/ListData.svc/MyList?$filter=ListColInternalName%20eq%20'My Value'";

You can build way more complex and sophisticated queries using other commands such as $select and $orderby and there are plenty of blogs that describe how to do so.  Anyway, I started digging around in the code and tried entering the URL directly into a browser to see what was going on.  I noticed that I was getting HTTP status code 500.  At first I thought it was due to server patches that our network administrators deployed over the weekend–wishful thinking!

The reason the code was failing was that I was trying to filter a  list that had passed the 5,000 limit  set by resource throttling .  I knew I had more than 5,000 items in the list since I was trying different techniques to create a large list without triggering the warnings.  This particular list had 4,999 items and 1 folder with 50 items for a total of 5,050 items and  the XSLT ListView webpart displayed just fine without any warnings and I could filter it appropriately.  Folders is one of the options you have for building lists that exceed the resource throttling limits.   However, ListData.svc does not take into account your folder structure and instead goes by the number of items in your list.  If your list exceeds the resource throttling limits and you try to filter using $filter, the web service will return HTTP status code 500.  Other commands such as $select work fine against the list, returning 1,000 items (the limit set by the web service)  without issue.

Filtering is one of the problems that arises when dealing with large lists.  For the XSLT ListView webpart, SharePoint displays a message “Displaying only the newest results below.”  You may not get back all your data, but at least you get back something.  With ListData.svc, you don’t even get back a meaningful error message.  I guess Microsoft’s SharePoint developers were just too busy to write one!

Advertisements

Author Field in a DataForm WebPart

7 Jun

The other day I was trying to access the Author field in a DataForm WebPart and noticed that it wasn’t listed in the Data Source Details taskpane.  If you are new to SharePoint, you recognize the Author field as the Created By column in a SharePoint list.  Created By is the display name while Author is the name used internal by SharePoint.  There are several great sites that list the display/common names for built-in SharePoint fields:

Link 1Link 2

If you look towards the bottom of your form, you will notice that SharePoint automatically takes care of displaying the Created/Created By and the Modified/Modified By information for you.

SharePoint automatically adds this information to the bottom of any form created.

SharePoint bundles this information into the following server control:

<SharePoint:CreatedModifiedInfo ControlMode="Display" runat="server"/>

Although convenient for SharePoint, it is not very convenient for the developer.  How else do you display the Created By field or Modified By?  Well, after some searches online, I discovered that this tag can be customized using templates which shouldn’t come as a surprise since it is an offspring of ASP.NET server controls.  It is through this customization that you can access the fields shown above in your DataForm WebPart.  After adding the CreatedModifiedInfo server control in the desired location, you need to add CustomTemplate tags, and add a FormField server control between those tags while setting the FieldName to the field you want using the internal name.  Below is some sample code:

<SharePoint:CreatedModifiedInfo ControlMode="Display" runat="server">
   <CustomTemplate>
      <SharePoint:FormField FieldName="Author" runat="server" ControlMode="Display" DisableInputFieldLabel="true"/>
   </CustomTemplate>
</SharePoint:CreatedModifiedInfo>

 

If you want to display the Modified field, you would replace Author with Editor since Editor is the internal name for Modified-remember to check out the links above to learn more about internal names.  Or if you want to display both fields, you can just add another FormField control on the page and style it any way you want by adding HTML code between the CustomTemplate tags.  One thing to keep in mind is that ControlMode needs to be set according to the type of form you are creating.  In my example, I am modifying a display form so ControlMode is set to Display.

One final note, you could modify the ASCX for CreatedModifiedInfo server code by modifying the templates stored on the SharePoint server.  Of course this is NOT RECOMMENDED, but if you are feeling courageous or curious, they are found under the following directory:

\TEMPLATES\CONTROLTEMPLATES\DefaultTemplates.ascx.

If anything, you will learn just how the control bundles the information you see by default.