繁体   English   中英

使用Caml筛选共享点列表时遇到问题

[英]Trouble Filtering Sharepoint List with Caml

我正在尝试过滤SharePoint列表,以便仅显示带有“是”的包含“字符串”的“管理”字段的项目,但是每当我到达ctx.ExecuteQuery()语句时,我的程序就会崩溃。 我相信我的CAMLQuery的结构正确,所以我不确定我是在错误地使用它还是缺少某些东西。 任何帮助将是巨大的! 谢谢! 我目前拥有的代码发布在下面:

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();

您的代码似乎缺少<View>标记,该标记会环绕CAML中的<Query>标记。

添加<View>根元素后,正确的CAML XML将如下所示:

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

其他疑难解答

为了帮助进行故障排除,您可以尝试通过JavaScript客户端对象模型运行相同的查询。

  1. 在Internet Explorer中访问SharePoint网站,然后按F5打开开发人员工具。
  2. 在控制台选项卡上,输入以下代码行,然后一次(通过按EnterCtrl + Enter )执行一行:

-

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());});

后期帮助解决方案在您的帮助下,我能够通过以下代码找出如何使用所需的过滤器创建新视图。 主要问题是与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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM