#SPDatasource
Explore tagged Tumblr posts
Text
List of lists - Sharepoint 2013
Bon. La problématique : Lister sur la home page d'un site sharepoint 2013 la liste des listes de type "Survey", avec un lien vers ces listes.
Après avoir farfouillé du côté des webpart sans succès j'ai décidé de faire ça avec le designer..
Le datasource : <SharePointWebControls:SPDataSource ID="SPDataSource1" runat="server" DataSourceMode="Listoflists"> </SharePointWebControls:SPDataSource>
Rien de bien sorcier... http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spdatasource.datasourcemode.aspx http://solutionizing.net/spdatasource-fields-for-webs-listsoflists/
La grid :
<asp:GridView ID="GridView1" runat="server" DataSourceID="SPDataSource1" AutoGenerateColumns="False" AllowSorting="True" AllowPaging="True" PageSize="2000" CellPadding="3" BorderStyle="Solid" BorderWidth="1px" HorizontalAlign="Left" EnableSortingAndPagingCallbacks="True"> <Columns> <asp:boundfield DataField="__spBaseTemplate" HeaderText="Survey Type"> </asp:boundfield> <asp:hyperlinkfield DataNavigateUrlFields="__spDefaultViewUrl" DataTextField="__spTitle" HeaderText="Survey Name"> </asp:hyperlinkfield> <asp:boundfield DataField="__spCreated" HeaderText="Survey Date"> </asp:boundfield> <asp:boundfield DataField="__spAuthor" HeaderText="Survey Author"> </asp:boundfield> </Columns> </asp:GridView>
Ça donne ça :

Le problème : pour filtrer et ordonner les spdatasources, on se sert généralement d'une CAML Query.
Je recommande vivement ce petit outil : CAML Designer
ça devrait donner ça pour le SPDatasource :
<SharePoint:SPDataSource ID="SPDataSource1" runat="server" DataSourceMode="Listoflists" SelectCommand="<View><ViewFields><FieldRef Name='__spTitle'/><FieldRef Name='__spCreated'/><FieldRef Name='__spBaseTemplate'/><FieldRef Name='__spDefaultViewUrl'/></ViewFields><Query><OrderBy><FieldRef Name='Created' /></OrderBy><Where><Eq><FieldRef Name='__spBaseTemplate' /><Value Type='Text'>Survey</Value></Eq></Where></Query></View>"> </SharePoint:SPDataSource>
Et bien non.... le selectcommand n'est absolument pas pris en compte pour le mode Listoflist...
Résultat : j'obtiens bien une liste de mes listes. De toutes mes listes, non filtrées et non triées par date de création...
Pour le filtrage sur le type "Survey", je fais ça en jQuery : je masque la ligne (TR) si le contenu de la 1ere colonne est "Survey", après avoir créé un div avec id pour englober ma grid. J'en profite pour mettre un peu en forme et masquer la 1ere colonne (type de liste) :
<SharePointWebControls:SPDataSource ID="SPDataSource1" runat="server" DataSourceMode="Listoflists" UseServerDataFormat="True"> </SharePointWebControls:SPDataSource> <div id="surveylist" style="display:none;"> <asp:GridView ID="GridView1" runat="server" DataSourceID="SPDataSource1" AutoGenerateColumns="False" AllowSorting="True" AllowPaging="True" PageSize="2000" CellPadding="3" BorderStyle="Solid" BorderWidth="1px" HorizontalAlign="Left" EnableSortingAndPagingCallbacks="True"> <Columns> <asp:boundfield DataField="__spBaseTemplate" HeaderText="Survey Type"> </asp:boundfield> <asp:hyperlinkfield DataNavigateUrlFields="__spDefaultViewUrl" DataTextField="__spTitle" HeaderText="Survey Name"> </asp:hyperlinkfield> <asp:boundfield DataField="__spCreated" HeaderText="Survey Date"> </asp:boundfield> <asp:boundfield DataField="__spAuthor" HeaderText="Survey Author"> </asp:boundfield> </Columns> </asp:GridView> </div> <script type="text/javascript"> $(document).ready(function() { $("tr th:first-child").hide(); $("tr td:first-child").hide(); $("tr td:first-child:not(:contains('Survey'))").closest('tr').hide(); $("#surveylist th").css('text-align','left'); $("#surveylist").show(); }); </script>
Ça donne ça :

Si jamais quelqu'un a une solution plus "propre", je suis preneur :)
0 notes