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

  1. make request rest api , items matching filter conditions
  2. for each object in collection returned, make request deletes item, , add request array of requests
  3. 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