Sharepoint:使用 CAML 查询查找大型列表

Sharepoint: Lookup against a large list with CAML Query

我有一个包含所有电子邮件地址的 SharePoint 列表 (list_dls)。该列表只有一列,字段名称为“标题”。我需要验证“LookupField”中的项目是否包含在 'list_dls' 中。该列表有超过 5000 封电子邮件,因此我需要进行 CAML 查询。该脚本似乎没有找到该项目。任何让它发挥作用的想法都将不胜感激。

这是代码。

<input type='button' value='get Lists' onclick="PopulateLookupField();"/>
<p id="demo"></p>
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script language="javascript" type="text/javascript">

var LookupField = 'lnam@xyz.com';

function PopulateLookupField() 
{
    var clientContext = new SP.ClientContext.get_current();
    var LookupList = clientContext.get_web().get_lists().getByTitle('list_dls');
    var camlQuery_list = new SP.CamlQuery();
    camlQuery_list.ViewXml = @"<View Scope='RecursiveAll'><ViewFields><FieldRef Name='ID'/><FieldRef Name='Title'/></ViewFields><RowLimit Paged='TRUE'>5000</RowLimit></View>";
    LookupList<ListItem> allListItems = new LookupList<ListItem>();
    do
    {
        var listItemCollection = LookupList.GetItems(camlQuery_list);
        clientContext.Load(listItemCollection);
        clientContext.ExecuteQuery();
        allListItems.AddRange(listItemCollection);
        var ItemFound = listItemCollection.Where(item => item.FieldValues["Title"].ToString().Contains(LookupField); 
        if(ItemFound !== null){break;}
        camlQuery_list.ListItemCollectionPosition = listItemCollection.ListItemCollectionPosition;
    } while (camlQuery_list.ListItemCollectionPosition != null);
    clientContext.load(ItemFound);
    alert("ItemFound = " + ItemFound);
}
</script>

首先,转到 SharePoint 列表“list_dls”并为标题列创建一个新索引(可能已经完成)

https://support.microsoft.com/en-us/office/add-an-index-to-a-list-or-library-column-f3f00554-b7dc-44d1-a2ed-d477eac463b0

此外,您可以在列表中使用 caml 查询立即搜索

camlQuery_list.ViewXml = $"<View><Query><Where><Eq><FieldRef Name='Title' /><Value Type='Text'>{LookupField}</Value></Eq></Where></Query></View>";

ListItemCollection collection = LookupList.GetItems(camlQuery_list);

context.Load(collection);
context.ExecuteQuery();

if (collection.Count > 0)
{
    var yourItem = collection[0];
}