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 :
[code] <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> [/code]
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:
[code] <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> [/code]
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.