我的JS客户共享点2013代码 不起作用:(
此处是代码段:
var query ='<view><query><where><in><fieldRef Name="Id"><values>';
for (var i in items) {
query += '<value Type="Counter">' + items[i].id + '</value>';
}
query += "</values></fieldref></in></where></query></view>";
我的问题是,这里出什么问题了;)我不知道,因为当我设置查询时,然后成为列表中的所有项目,而不仅是这个ID。
thx Andi;)
答案 0 :(得分:0)
在CAML查询格式错误的情况下,SharePoint通常会为您提供列表的默认视图,而不是尊重您的查询。听起来就是这里正在发生的事情。如果您可以清理CAML查询以满足SharePoint的期望,那么它应该可以按照您想要的方式工作。
首先,CAML区分大小写。 CAML中的每个标签名称都应以大写字母开头。另外,使用所有大写字母"ID"
而不是"Id"
来查询内置ID字段。
要注意的另一件事是FieldRef元素应为自闭标签(<FieldRef />
,而不是<FieldRef></FieldRef>
)。
最后,请注意,如果您的范围内有500个以上的值,则<Where><In>
操作将失败,如this answer中所述。如果您不希望查询包含500个值的范围,则可以忽略该限制。
更新代码以解决上述问题后,它可能看起来像这样:
var query = '<View><Query><Where>';
if(items.length < 500){
query += '<In><FieldRef Name="ID" /><Values>';
for (var i in items) {
query += '<Value Type="Counter">' + items[i].id + '</Value>';
}
query += '</Values></In>';
}else{
var orCounter = 0;
for(var i = 0, len = items.length; i < len; i++){
if(i % 500 == 0){
if(orCounter > 0){
query += '</Values></In>'
}
if(i+501 < items.length){
query += '<Or>';
orCounter++;
}
query += '<In><FieldRef Name="ID" /><Values>';
}
query += '<Value Type="Counter">' + items[i].id + '</Value>';
}
query += '</Values></In>';
for(var j = 0; j < orCounter; j++){
query+="</Or>";
}
}
query += '</Where></Query></View>';
但是,我们需要查看如何使用query
文本来确定是否存在其他可能影响查询行为的问题。