2014-03-24 40 views
0
CAMLQuery: "<Query><Where><And><Eq><FieldRef Name='Item' /> 
<Value Type='Lookup'>" + itemid + "</Value></Eq><Eq> 
<FieldRef Name='Author' /><Value Type='Integer'> 
<UserID /></Value></Eq></And></Where><OrderBy> 
<FieldRef Name='ID' Ascending='FALSE' /></OrderBy> 
<RowLimit>1</RowLimit></Query>", 

我的问题是,它是删除多行不只是一个CAML查询 - 删除1项

所有帮助appreicated

+0

这只是查询,实际上并没有删除任何内容。你打电话来删除该项目? – kei

+0

这是SP服务中的一个片段。它确实删除了所有匹配的项目,但我想删除它 –

回答

0

最后,我不得不做了很多可怕的解决方法:

function DeleteItem(itemid) { 

    $().SPServices({ 
    operation: "GetListItems", 
    async: false, 
webURL: "MYURL", 
    listName: "Basket", 
    CAMLViewFields: "<ViewFields><FieldRef Name='Title' /><FieldRef Name='Item' /> <FieldRef Name='Item:Title' /></ViewFields>", 
    CAMLQuery: "<Query><Where><And><Eq><FieldRef Name='Item' /><Value Type='Lookup'>" + itemid + "</Value></Eq><Eq><FieldRef Name='Author' /><Value Type='Integer'><UserID /></Value></Eq></And></Where><OrderBy><FieldRef Name='ID' Ascending='FALSE' /></OrderBy></Query>", 
completefunc: function (xData, Status) { 

    $(xData.responseXML).SPFilterNode("z:row").each(function() { 
    alert($(this).attr("ows_ID")); 
$().SPServices.SPUpdateMultipleListItems({ 
    listName: "Basket", 
    webURL: "MYURL", 
    CAMLRowLimit: 1, 
    CAMLQuery: "<Query><Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>" + $(this).attr("ows_ID") + "</Value></Eq></Where></Query>", 
    batchCmd: "Delete", 
    completefunc: function(xData, Status) { 


     CountItems(); 
     ViewBasket(); 
    CreateSuccess('Item deleted'); 

if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } // Stop the form acting like it normally would (refreshing the page) 

    }}); 


return false; 
    }); 
    } 
    }); 




return true; 

} 

基本上我不得不做一个获取所有项目查找,通过每个查找,删除它的ID和第一次迭代后打破循环。可怕的解决方法,但想不到另一种方式来做到这一点。

0

你的问题不清楚。你想达到什么目的? GetListItems是获取列表项,不删除。因此,如果您要删除带有WHERE子句的项目,则必须先拨打GetListItems,然后拨打UpdateListItems提供要删除的项目的ID。传递给DeleteItems的“itemit”是否会从Basket列表中仅返回一条记录?

你的代码应该看起来像:

function DeleteItem(itemid) { 
    $().SPServices({ 
    operation: "GetListItems", 
    async: true, /* don't use FALSE ! */ 
    webURL: "MYURL", 
    listName: "Basket", 
    CAMLViewFields: "<ViewFields><FieldRef Name='ID' /><FieldRef Name='Title' /><FieldRef Name='Item' /><FieldRef Name='Item:Title' /></ViewFields>", 
    CAMLQuery: "<Query><Where><And><Eq><FieldRef Name='Item' /><Value Type='Lookup'>" + itemid + "</Value></Eq><Eq><FieldRef Name='Author' /><Value Type='Integer'><UserID /></Value></Eq></And></Where><OrderBy><FieldRef Name='ID' Ascending='FALSE' /></OrderBy></Query>", 
    completefunc: function (xData, Status) { 
     // use `.eq(0)` to look at the first one only 
     $(xData.responseXML).SPFilterNode("z:row").eq(0).each(function() { 
     alert($(this).attr("ows_ID")); 
     var ID = $(this).attr("ows_ID"); 
     // now delete it with `UpdateListItems` 
     $().SPServices({ 
      operation: "UpdateListItems", 
      webURL: "MYURL", 
      listName: "Basket", 
      updates: '<Batch OnError="Continue" ListVersion="1" ViewName=""><Method ID="1" Cmd="Delete"><Field Name='ID'>"+ID+"</Field></Method></Batch>', 
      completefunc: function (xData, Status) { 
      alert("OK") 
      } 
     }); 
     }) 
    } 
    }) 
} 

FYI我创建了一个库,更易于使用:http://aymkdn.github.io/SharepointPlus/

为您的代码它看起来像:

function DeleteItem(itemid) { 
    // here I suppose that `itemid` will return only one record 
    $SP().list("Basket").remove({ 
    where:"Item = '"+itemid+"'", 
    success:function() { alert("Done!") } 
    }) 
}