我应该使用SPContext还是ClientContext ?

本文关键字:ClientContext 还是 SPContext 我应该 | 更新日期: 2023-09-27 18:07:36

我需要在一个简单的控制台应用程序(.net 4.5)中从SharePoint Online列表中提取数据。
为此,我添加了对Microsoft.SharePoint.ClientMicrosoft.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"]);
}

我现在需要一些更复杂的查询与QueryRowLimit。在这个更复杂的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>

我应该使用SPContext还是ClientContext ?

由于您的目标是排除那些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();