骆驼查询简单ID

时间:2018-11-15 11:00:22

标签: sharepoint caml

我的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;)

1 个答案:

答案 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文本来确定是否存在其他可能影响查询行为的问题。

相关问题