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:

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
  }
}
Tags:
C#236 CAML17 Errori120 SharePoint498 SharePoint 2010224
Potrebbe interessarti anche: