2017-07-11 46 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();