Поскольку CamlQuery.ViewXml
Свойство ожидает View
в качестве корневого элемента, в представленном примере строку:
camlQuery1.ViewXml = view.ViewQuery;
необходимо заменить на:
camlQuery1.ViewXml = String.Format("<View><Query>{0}</Query></View>", view.ViewQuery);
Итак, вот общий пример того, как получить элементы списка для каждого представления:
//1.Request view query
var list = ctx.Web.Lists.GetByTitle(listName);
var view = list.Views.GetByTitle(viewName);
ctx.Load(view);
ctx.ExecuteQuery();
//2.construct list query from view query and retrieve items
var qry = new CamlQuery();
qry.ViewXml = String.Format("<View><Query>{0}</Query></View>", view.ViewQuery);
var items = list.GetItems(qry);
ctx.Load(items);
ctx.ExecuteQuery();
О группировке
Но здесь идет сложная часть, на предоставленном скриншоте только сгруппированы (в частности, свернутые) элементы отображаются.Дело в том, что в SharePoint GroupBy
элемент ведет себя не совсем так, как ожидалось (например, как GROUP BY
в SQL), что означает, что все элементы на запрос представления возвращаются дажеесли применяется оператор GroupBy
.
Для извлечения точно таких же данных , которые отображаются в виде списка, лучше использовать метод List.RenderListData
, например:
var list = ctx.Web.Lists.GetByTitle(listName);
var view = list.Views.GetByTitle(viewName);
ctx.Load(view);
ctx.ExecuteQuery();
var qry = new CamlQuery();
qry.ViewXml = String.Format("<View><Query>{0}</Query></View>", view.ViewQuery);
var result = list.RenderListData(qry.ViewXml);
ctx.ExecuteQuery();
//parse json and print
var data = JObject.Parse(result.Value);
foreach (var row in data["Row"])
{
Console.WriteLine(row["Status"]);
}