Deleting a file from library using SharePoint ASMX web service
The following is the code for deleting a particular file from a library using SharePoint ASMX web service.
The technique involves identifying the document ID using “GetListItems” of the file and then executing “UpdateListItems”
public string DeleteFileFromSharePoint(string siteUrl, string libraryName, string fileName, FileDeleteInput input) { Lists listService = new Lists(); //Web reference of http://<server>/sites/<site>/_vti_bin/lists.asmx listService.Url = "http://<server>/sites/<site>/_vti_bin/lists.asmx"; listService.UseDefaultCredentials = true; string sourceUrl = fileName; string output = string.Empty; try { int fileId = GetFileIdFromList(siteUrl, libraryName, fileName, listService.Url); XmlDocument doc = new XmlDocument(); XmlElement Batch = doc.CreateElement("Batch"); Batch.SetAttribute("OnError", "Continue"); Batch.SetAttribute("ListVersion", "1"); Batch.SetAttribute("ViewName", ""); string strBatch = "<Method ID='1' Cmd='Delete'>"; strBatch += "<Field Name='ID'>" + fileId + "</Field>"; strBatch += "<Field Name='FileRef'>" + siteUrl + libraryName + "/" + fileName + "</Field>"; strBatch += "</Method>"; Batch.InnerXml = strBatch; XmlNode returnvalue = listService.UpdateListItems(libraryName, Batch); if (returnvalue.InnerXml.Contains("0x00000000")) { output = "Success: File Deleted"; } else if (returnvalue.InnerXml.Contains("Invalid file name")) { output = "Failure: No such file exists"; } else if (returnvalue.InnerXml.Contains("Access denied")) { output = "Failure: No such file exists"; } else { output = "Failure: File couldn't be deleted"; } } catch (SoapException ex) { throw ex; } catch (Exception) { throw ex; } return output; } protected int GetFileIdFromList(string siteUrl, string libraryName, string fileName, string serviceUrl) { int id = 0; Lists listService = new Lists(); //Web reference of http://<server>/sites/<site>/_vti_bin/lists.asmx listService.Url = serviceUrl; listService.UseDefaultCredentials = true; // Build the CAML Query System.Text.StringBuilder queryStringBuilder = new System.Text.StringBuilder(); queryStringBuilder.Append(" <Query>"); queryStringBuilder.Append(" <Where>"); queryStringBuilder.Append(" <Eq>"); queryStringBuilder.Append(" <FieldRef Name=\"FileLeafRef\" />"); queryStringBuilder.Append(" <Value Type=\"Text\">" + fileName + "</Value>"); queryStringBuilder.Append(" </Eq>"); queryStringBuilder.Append(" </Where>"); queryStringBuilder.Append(" </Query>"); XmlDocument query = new XmlDocument(); query.LoadXml(queryStringBuilder.ToString()); //Build the View Query queryStringBuilder.Clear(); // Clear the string builder queryStringBuilder.Append(" <ViewFields>"); queryStringBuilder.Append(" <FieldRef Name=\"ID\" /><FieldRef Name=\"Title\" /><FieldRef Name=\"Name\" />"); queryStringBuilder.Append(" </ViewFields>"); XmlDocument viewFields = new XmlDocument(); viewFields.LoadXml(queryStringBuilder.ToString()); //Build the CAML Query Options queryStringBuilder.Clear(); // Clear the string builder queryStringBuilder.Append(" <QueryOptions>"); queryStringBuilder.Append(" <Folder>" + libraryName + "/</Folder> />"); queryStringBuilder.Append(" </QueryOptions>"); XmlDocument queryOptions = new XmlDocument(); queryOptions.LoadXml(queryStringBuilder.ToString()); XmlNode listItems = listService.GetListItems(libraryName, null, query, viewFields, null, queryOptions, null); foreach (XmlNode outerNode in listItems.ChildNodes) { if (outerNode is XmlWhitespace) continue; else { if (outerNode.Name == "rs:data") { foreach (XmlNode innerNode in outerNode.ChildNodes.OfType<XmlNode>()) { if (innerNode is XmlWhitespace) continue; else { id = Int32.Parse(innerNode.Attributes["ows_ID"].Value.ToString()); } } } } } return id; }
naveen
March 26, 2014 - 2:52 PM
its very usefull for me thanks .
naveen
March 26, 2014 - 2:54 PM
but in my code queryStringBuilder.Clear(); in this clear method is not suported.