2017-07-11 62 views
0

我試圖篩選一個SharePoint列表,以便只有管理字段包含字符串的項目顯示爲「Yes」,但每當我到達ctx.ExecuteQuery ()聲明,我的程序爆炸了。我相信我的CAMLQuery的結構是正確的,所以我不確定我是否簡單地使用它或錯過了一些東西。任何幫助將是偉大的!謝謝!我公司目前擁有的代碼貼在下面:似乎缺少<View>標籤這將環繞在你的CAML標籤<Query>問題篩選與Caml的Sharepoint列表

Web myWeb = ctx.Web; 
List myList = myWeb.Lists.GetByTitle("Company Employees"); 
SPClient.View view = myList.DefaultView; 
CamlQuery qry = new CamlQuery(); 
qry.ViewXml = "<Query>" + "<Where>" + "<Eq>" + "< FieldRef Name='Management'/>" + "< Value Type='Text'>Yes</ Value >" + "</Eq>" + "</ Where >" + "</ Query >"; 
myList.GetItems(qry); 
ListItemCollection listItems = myList.GetItems(qry); 
ctx.Load(listItems); 
ctx.ExecuteQuery(); 
+1

什麼類型的列是管理字段? – Thriggle

+0

我不確定我是否理解你的問題。這只是一個包含字符串的列。我只是試圖用它來測試過濾,所以我正在檢查裏面的字符串是否爲「是」 – Kyle

+0

謝謝!我想確保它不是一個「是/否」字段,需要與「文本」和「選擇」字段進行不同的查詢。 – Thriggle

回答

2

您的代碼。

由於增加了<View>根元素的,正確的CAML XML將如下所示:

qry.ViewXml = 
    "<View>"+ 
     "<Query>"+ 
      "<Where>"+ 
       "<Eq>"+ 
        "<FieldRef Name='Management'/>"+ 
        "<Value Type='Text'>Yes</Value>"+ 
       "</Eq>"+ 
      "</Where>"+ 
     "</Query>"+ 
    "</View>"; 

其他故障排除

以幫助解決,您可以嘗試通過運行相同的查詢JavaScript客戶端對象模型。

  1. 訪問SharePoint網站在Internet Explorer中,打F5開拓的開發工具。
  2. 在控制檯標籤上,輸入的代碼的以下各行和執行(通過按輸入Ctrl鍵 + 輸入)一條線在一個時間他們:

-

var ctx = new SP.ClientContext(); 
var list = ctx.get_web().get_lists().getByTitle("Company Employees"); 
var qry = new SP.CamlQuery(); 
qry.set_viewXml("<View><Query><Where><Eq><FieldRef Name=\"Management\"/><Value Type=\"Text\">Yes</Value></Eq></Where></Query></View>"); 
var items = list.getItems(qry); 
ctx.load(items); 
ctx.executeQueryAsync(function(){alert("success!");},function(sender,args){alert(args.get_message());}); 
+0

我試圖實現這一點,但ExecuteQuery仍然會引發錯誤。你認爲這個問題是因爲我試圖過濾列表項目,而不僅僅是特定視圖中顯示的項目? – Kyle

+1

不,在查詢上設置查看XML通常是獲取過濾項目子集的好方法。你能夠捕獲錯誤信息的文本嗎?很多不同的事情可能會出錯,例如字段的內部名稱不同,或者列表超過5000項目列表視圖閾值,但如果沒有更多信息很難確定。 – Thriggle

+0

拋出的錯誤是Microsoft.SharePoint.Client.ServerException:'無法完成此操作。請再試一次' 所以我不確定如何解釋。我研究了這個錯誤,我發現所有的錯誤都是當你刪除某些東西而不更新時有時會發生這種錯誤,但我沒有刪除任何東西。 – Kyle

1

開機幫助解決方案感謝您的幫助,我能夠弄清楚如何使用以下代碼創建具有所需過濾功能的新視圖。主要問題是使用Caml查詢 - 我必須刪除和標籤,然後在創建視圖之前刪除一些行。以下是我的工作解決方案:

Web myWeb = ctx.Web; 
List myList = myWeb.Lists.GetByTitle("Company Employees"); 
SPClient.View view = myList.DefaultView; 
CamlQuery qry = new CamlQuery(); 
qry.ViewXml = 
"<Where><Eq><FieldRef Name=\"Management\"/><Value Type='Text'>Yes</Value></Eq></Where>"; 
ViewCollection viewColl = myList.Views; 
string[] viewFields = { "Title", "Promoted", "Intern", "Management" }; 
ViewCreationInformation creationInfo = new ViewCreationInformation(); 
creationInfo.Title = "Management"; 
creationInfo.RowLimit = 50; 
creationInfo.ViewFields = viewFields; 
creationInfo.ViewTypeKind = ViewType.None; 
creationInfo.SetAsDefaultView = false; 
creationInfo.Query = qry.ViewXml; 
viewColl.Add(creationInfo); 
ctx.ExecuteQuery();