首页 > 解决方案 > 通过 Caml 查询更新 SharePoint 列表项(使用项目标题) - 不工作 - 也没有错误

问题描述

我正在尝试根据“标题”(而不是 ID)更新我的 SharePoint 列表项。我为此目的使用 Caml Query。下面是代码,它不起作用。请帮忙。

    function updateTowerStatus(title, tower, status, comments)
{
    var targetSiteUrl = "https://office2.bt.com/sites/GBA-"+tower;
    var targetProductListName = tower+"Products";
    ClientContext = new SP.ClientContext(targetSiteUrl);
    var oList = ClientContext.get_web().get_lists().getByTitle(targetProductListName);

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name="Title"/><Value Type="Text">'+title+'</Value></Eq></Where></Query></View>');   

    this.collListItem = oList.getItems(camlQuery);   
    ClientContext.load(oList);
    ClientContext.load(collListItem);
    ClientContext.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}
    function onQuerySucceeded() {   
    var listItemEnumerator = collListItem.getEnumerator();
    while (listItemEnumerator.moveNext()) 
    {   
        var item = listItemEnumerator.get_current(); 
        item.set_item(tower+'ApprovalStatusOpenreach', status);
        item.set_item(tower+'CommentsOpenreach', comments);    
        item.update();
        ClientContext.load(item);
        ClientContext.executeQueryAsync(Function.createDelegate(this, this.onUpdateSucceeded), Function.createDelegate(this, this.onQueryFailed));

    }
}
    function onQueryFailed(sender, args) {
       alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }

也欢迎任何其他替代解决方案来完成这项工作。场景是,当另一个列表中具有相同标题的项目被批准/拒绝时,我需要更新一个列表的状态。我可以保存 ID 并执行此操作。但是我将如何存储正在创建的项目的 ID?

标签: sharepointsharepoint-2013

解决方案


在 onQuerySucceeded() 方法中无法访问变量 tower。它是 updateTowerStatus() 的一部分


推荐阅读