2015-08-13 188 views
0

我需要從簡單的控制檯應用程序(.net 4.5)中的SharePoint Online列表中提取數據。
爲此,我添加了對Microsoft.SharePoint.ClientMicrosoft.SharePoint.Client.Runtime的引用。
下面做什麼,我需要......我應該使用SPContext還是ClientContext?

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中不起作用?

編輯13/08 13:15
的問題似乎並沒有要與RowLimit但查詢本身。

<Neq> 
    <FieldRef Name='GroupName' /> 
    <Value Type='Lookup'></Value> 
</Neq> 

這似乎並沒有工作...

回答

0

因爲你的目標是排除項目的GroupName查找字段爲空,則更換Neq Element

<Neq> 
    <FieldRef Name='GroupName' /> 
    <Value Type='Lookup'></Value> 
</Neq> 

IsNotNull Element

<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(); 
相關問題