Ostatnie miałem problem z dużą listą w trakcie prac nad projektem w SharePoint 2010 dla jednego z klientów. Projekt był raczej prosty, tyle że wymagał sporo „klepania”. W rezultacie otrzymałem prostą listę. Dla tej listy potrzebowałem własnej formy, tak aby móc dodawać do niej elementy. W SharePoint designer lista wyświetlała się bez większych problemów, wszystko działało bardzo płynnie. Ale już po załadowaniu do serwera SharePoint i przy próbie dodania czegoś do listy za pomocą mojego formularza pojawił się dziwny błąd:

“Unable to display this Web Part. To troubleshoot the problem, open this Web page in a Microsoft SharePoint Foundation-compatible HTML editor such as Microsoft SharePoint Designer. If the problem persists, contact your Web server administrator.

Co się dzieje? Rozwiązanie było całkiem proste, ale wymagało trochę pracy. Okazuje się, że SharePoint ma problem z dużymi przetwarzaniami XSL w pojedynczej formie. O ile wiem ten limit wynosi 50 elementów, problem został zgłoszony w Microsoft, ale wiele wskazuje na to, że chłopaki darują sobie temat. Znalazłem rozwiązanie na Technecie, ale było napisane takim językiem, że pokusiłem się o przełożenie tego na chłopski, może się komuś przyda.

Po przełączeniu się do widoku kodu w designerze musimy znaleźć element . Po jego wybraniu robimy proste CTRL-C, a bezpośrednio pod nim CTRL-V. do tego drugiego ciągu dodajemy 2 na końcu. W wyniku dostajemy coś takiego: .
Jak dla mnie to wystarczyło, ale jeżeli macie jaką większą listę to potrzebujecie więcej takich elementów. Wróćmy do naszego kodu i elementu . Wybieramy to i szukamy taga go zamykającego – powinien być gdzieś na dole. Dobrze. Teraz tuż pod nim wklejamy następujący kod :


<xsl:template name="dvt_1.rowedit1">
 <xsl:param name="Pos" select="position()"/>

<tr>

<td>

<table border="0" cellspacing="0" width="100%">
 </table>

 </td>

 </tr>

 </xsl:template>

Teraz pozostaje nam tylko przekopiowanie pomiędzy tagi

części z naszych wierszy zawierających dane z formularza. Ja wziąłem połowę. Wasz kod powinien wyglądać na koniec mniej więcej tak:


<xsl:template name="dvt_1.rowedit1">
 <xsl:param name="Pos" select="position()"/>

<tr>

<td>

<table border="0" cellspacing="0" width="100%">

<tr>

<td width="190px" valign="top" class="ms-formlabel">

<H3 class="ms-standardheader">
 <nobr>ID/Status</nobr> </H3>

 </td>

<td width="400px" valign="top" class="ms-formbody">
 <SharePoint:FormField runat="server" id="ff22{$Pos}" ControlMode="New" FieldName="ID_x002f_Status" __designer:bind="{ddwrt:DataBind('i',concat('ff22',$Pos), 'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@ID_x002f_Status')}"/>
 <SharePoint:FieldDescription runat="server" id="ff22description{$Pos}" FieldName="ID_x002f_Status" ControlMode="New"/>

</td>

 </tr>

 </table>

 </td>

</tr>

 </xsl:template>

Po zapisaniu zmian i załadowaniu danych na serwer formularz bez problem nam się powinien wyświetlić. I tak w ten stosunkowo prosty sposób można rozwiązać problem z dużą listą w SharePoint 2010.