javascript - SharePoint 2013 ClientContext : How to DELETE specific list items by MULTIPLE CONDITION filter? -
by using sp.clientcontext javascript end, below code used "update" list item. simply:
var clientcontext = new sp.clientcontext( siteurl ); splist = clientcontext.get_web().get_lists().getbytitle( mylistname ); this.splist_existingitem = splist.getitembyid( itemid ); splist_existingitem.set_item( 'fullname', myfullname ); splist_existingitem.set_item( 'age', myage ); splist_existingitem.update(); clientcontext.executequeryasync(succeeded_handler, fail_handler); this allows me update list item by querying 1 condition is: getitembyid(itemid) here.
now let's want delete item which is:
- age = 30
- country = us
then how do such query multiple conditions. , to delete please?
updated
according answer below, found rest api more easier , cleaner use client/javascript end, compared csom. (so then, of course changed codes rest api way already.)
so conclusion is, suggest use rest api rather csom (sp.clientcontext).
thanks! :)
this can done in 2 different ways, either using csom/jsom or via sharepoint rest api. since using csom/jsom model in question, i'll show how it's done using method.
using csom/jsom
to filter sp.listitem's on mulitple conditions, there no single methods take arguments multiple filter fields. instead, you'll have resort using caml query specify list items want, below.
var clientcontext = new sp.clientcontext( siteurl ); splist = clientcontext.get_web().get_lists().getbytitle( mylistname ); //create caml-query filter conditions var camlquery = new sp.camlquery(); camlquery.set_viewxml('<view><query><where><and><eq><fieldref name=\'age\'/>' + '<value type=\'number\'>30</value></eq> <eq><fieldref name=\'country\'/>' + '<value type=\'text\'>us</value></eq></and></where></query><rowlimit>10</rowlimit></view>'); //the query return collection of items matching conditions this.colllistitem = splist.getitems(camlquery); clientcontext.load(colllistitem); //execute query clientcontext.executequeryasync(function () { var itemcount = colllistitem.get_count(); //for each list item in collection, mark deleted (var = itemcount - 1; >= 0; i--) { var olistitem = colllistitem.itemat(i); olistitem.deleteobject(); }; //execute delete operation clientcontext.executequeryasync(deletesucceeded, deletefailed); }, fail_handler); using sharepoint rest api
this method assumes use jquery able simple $.ajax() calls , use promise functionality, since might have multiple items delete. assumes understands how can use jquery deferred objects chain asynchronous functions run in sequence.
the simple idea to
- make request rest api , items matching filter conditions
- for each object in collection returned, make request deletes item, , add request array of requests
- when requests done, whatever want!
note might have modify rest api call match columns. use browser or postman check request correct.
function getitemstodelete () { //you might have modify filters correctly on columns var requesturl = _sppagecontextinfo.webabsoluteurl + "/_api/web/lists/getbytitle(" + mylistname + ")/items?$filter=age eq 30 , country eq 'us'") //return , ajax request (promise) return $.ajax({ url: requesturl, type: "get", headers: { "accept": "application/json;odata=verbose", }, success: function(result) { $.each(result.d.results, function(index, item){ //note push ajax-request array //that has been declared bit down itemstodelete.push(deleteitem(item)); }); }, error: function(error) { //something went wrong when retrieving list items } }); } function deleteitem (item) { //all sp.listitems holds metadata can accessed in '__metadata' attribute var requesturl = item.__metadata.uri; return $.ajax({ url: requesturl, type: "post", headers: { "accept": "application/json;odata=verbose", "x-requestdigest": $("#__requestdigest").val(), "if-match": item.__metadata.etag, "x-http-method": "delete" }, success: function() { console.log("item id " + item.__metadata.id + " deleted!"); }, error: function(error) { //something went wrong when trying delete item } }); } //declare array of deferred objects hold delete request //for each item deleted var itemstodelete = []; //first items delete $.when(getitemstodelete()).then(function () { $.when.apply($, itemstodelete).then(function(){ console.log("all items deleted!"); }); }); some useful sources
jquery deferred object crud operations on list items sharepoint rest api
Comments
Post a Comment