SPSiteDataQuery, SPQuery e RowLimit
In SharePoint 2010 bisogna prestare attenzione alla proprietà RowLimit degli oggetti SPSiteDataQuery e SPQuery. In particolare impostare la proprietà RowLimit a 0 (zero) ha un comportamento diverso nei due oggetti.
Nel caso di SPSiteDataQuery se RowLimit è settata 0 non ritornerà mai nessuna riga:
Con l'oggetto SPQuery, RowLimit settata a 0 significa nessun limite:
Nel caso di SPSiteDataQuery se RowLimit è settata 0 non ritornerà mai nessuna riga:
C#
string url = "http://sharepoint2010/";
using (SPSite site = new SPSite(url))
{
using (SPWeb web = site.OpenWeb())
{
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists BaseType=\"1\" MaxListsLimit='0' />";
query.ViewFields = "<FieldRef Name='ID' /><FieldRef Name='Title' /><FieldRef Name='FileRef' /><FieldRef Name='EncodedAbsUrl' /><FieldRef Name='DocumentCode' Nullable='TRUE' /><FieldRef Name='SupplierCode' Nullable='TRUE' />";
//query.Webs = "<Webs Scope='SiteCollection' />";
query.Query = string.Format(@"<OrderBy><FieldRef Name='DocumentCode' /></OrderBy><Where><BeginsWith><FieldRef Name='SupplierCode' /><Value Type='Text'>{0}</Value></BeginsWith></Where>"
, "S02");
query.RowLimit = 0; // non ritornerà mai nessuna riga, se non impostato corrisponde a nessun limite
System.Data.DataTable tbl = web.GetSiteData(query);
int c = tbl.Rows.Count; //darà sempre 0
}
}
Con l'oggetto SPQuery, RowLimit settata a 0 significa nessun limite:
C#
string url = "http://sharepoint2010/";
using (SPSite site = new SPSite(url))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Contracts"];
SPQuery query = new SPQuery();
query.Query = string.Format(@"<OrderBy><FieldRef Name='DocumentCode' /></OrderBy><Where><BeginsWith><FieldRef Name='SupplierCode' /><Value Type='Text'>{0}</Value></BeginsWith></Where>"
, "S02");
query.RowLimit = 0; //nessun limite ritorna tutte le righe trovate
SPListItemCollection items = list.GetItems(query);
int c = items.Count; //il conteggio delle reali righe trovate
}
}