我应该使用SPContext还是ClientContext ?
本文关键字:ClientContext 还是 SPContext 我应该 | 更新日期: 2023-09-27 18:07:36
我需要在一个简单的控制台应用程序(.net 4.5)中从SharePoint Online列表中提取数据。
为此,我添加了对Microsoft.SharePoint.Client
和Microsoft.SharePoint.Client.Runtime
的引用。
以下是我所需要的…
ClientContext ctx = new ClientContext(siteUrl);
ctx.Credentials = new SharePointOnlineCredentials(siteUser, securePass);
Web site = ctx.Web;
ctx.Load(site);
List lst = site.Lists.GetByTitle("SomeList");
CamlQuery query = new CamlQuery();
query.ViewXml = @"<View>
<ViewFields>
<FieldRef Name='Title' />
</ViewFields>
</View>";
ListItemCollection items = lst.GetItems(query);
ctx.Load(items);
ctx.ExecuteQuery();
foreach (var item in items)
{
Console.WriteLine(item["Title"]);
}
我现在需要一些更复杂的查询与Query
和RowLimit
。在这个更复杂的CamlQuery
中,RowLimit
似乎被忽略了。
<View>
<RowLimit>1000</RowLimit>
<ViewFields>
<FieldRef Name='Title' />
<FieldRef Name='ProductName' />
<FieldRef Name='GroupName' />
</ViewFields>
<Query>
<Where>
<Neq>
<FieldRef Name='GroupName' />
<Value Type='Lookup'></Value>
</Neq>
</Where>
</Query>
</View>
我不能让RowLimit工作。我遇到的所有例子都是使用SPContext,它有能力在SPQuery对象上设置RowLimit。
SPContext需要一个大的SharePoint dll来工作,而ClientContext已经存在于Visual Studio中(使用2015),并且有更小的dll。
.
1。什么时候应该使用SPContext?
2. 是否有一些原因,RowLimit不工作在上面的CamlQuery ?
Edit 13/08 13:15
问题似乎不是与RowLimit有关,而是与查询本身有关。
<Neq>
<FieldRef Name='GroupName' />
<Value Type='Lookup'></Value>
</Neq>
由于您的目标是排除那些GroupName
查找字段为空的项,因此替换Neq元素:
<Neq>
<FieldRef Name='GroupName' />
<Value Type='Lookup'></Value>
</Neq>
with IsNotNull元素:
<IsNotNull><FieldRef Name='GroupName' /></IsNotNull>
var list = ctx.Web.Lists.GetByTitle(listTitle);
var query = new CamlQuery();
query.ViewXml =
"<View>" +
"<RowLimit>1000</RowLimit>" +
"<ViewFields>" +
"<FieldRef Name='Title' />" +
"<FieldRef Name='ProductName' />" +
"<FieldRef Name='GroupName' />" +
"</ViewFields>" +
"<Query>" +
"<Where>" +
"<IsNotNull><FieldRef Name='GroupName' /></IsNotNull>" +
"</Where>" +
"</Query>" +
"</View>";
var items = list.GetItems(query);
ctx.Load(items);
ctx.ExecuteQuery();