The typical format for the batch element Xml fragment is:
<Batch OnError='Return'>
<Method ID='1' Cmd='Delete'>
<Field Name='ID'>81</Field>
<Field Name='FileRef'>http://dev-moss/sites/home/PropertySharePoint/DocumentLibrary/300</Field>
</Method>
</Batch>
Your delete is successful if the return value is zero. You can test this out in the U2U CAML query builder from http://www.u2u.info/Blogs/Patrick/Lists/Posts/Post.aspx?ID=1315
This batchElement information can be passed into the sharepoint list web service as demonstrated in the method snippet below:
/// <summary> /// Delete folders as per http://msdn2.microsoft.com/en-us/library/ms429658.aspx for LPP-205 /// </summary> /// <param name="listName"></param> /// <param name="folderName"></param> /// <returns></returns>public XmlNode DeleteFolder(string listName, string folderName)
{ /*Use the CreateElement method of the document object to create elements for the parameters that use XML.*/ System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); XmlElement query = xmlDoc.CreateElement("Query"); XmlElement viewFields = xmlDoc.CreateElement("ViewFields"); XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");string rowLimit = int.MaxValue.ToString();
/*To specify values for the parameter elements (optional), assign CAML fragments to the InnerXml property of each element.*/ System.Text.StringBuilder sb= new System.Text.StringBuilder(); sb.Append("<Where><Eq><FieldRef Name=\"Title\" />");sb.Append(string.Format("<Value Type=\"Text\">{0}</Value></Eq></Where>", folderName));
viewFields.InnerXml = "<FieldRef Name=\"ID\" /><FieldRef Name=\"Title\" />";query.InnerXml = sb.ToString();
queryOptions.InnerXml = "";System.Xml.XmlNode nodeListItems = _listWebService.GetListItems(listName, string.Empty, query, viewFields, rowLimit, queryOptions, null);
string folderId = string.Empty;
string fileRef = string.Empty;
XmlDocument doc = new XmlDocument();doc.LoadXml(nodeListItems.InnerXml);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);nsmgr.AddNamespace("z", "#RowsetSchema");
nsmgr.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
XmlNodeList xmlNodeList = doc.SelectNodes("/rs:data/z:row", nsmgr);foreach (XmlNode node in xmlNodeList)
{ folderId = node.Attributes["ows_ID"].Value; //fileRef = node.Attributes["ows_EncodedAbsUrl"].Value;fileRef = node.Attributes["ows_FileRef"].Value.Substring(node.Attributes["ows_FileRef"].Value.IndexOf("#") + 1);
break;}
System.Xml.XmlNode result = null; //Will be populated response from update batch.
if (folderId != string.Empty)
{ System.IO.StringWriter sw = new System.IO.StringWriter(); System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);xw.WriteStartDocument();
// build batch node xw.WriteStartElement("Batch");xw.WriteAttributeString("OnError", "Return");
// Build method node xw.WriteStartElement("Method"); // Set transaction ID - doesn't really matter what the number isxw.WriteAttributeString("ID", System.Guid.NewGuid().ToString("n"));
xw.WriteAttributeString("Cmd", "Delete");
// Build field ID xw.WriteStartElement("Field");xw.WriteAttributeString("Name", "ID");
xw.WriteString(folderId);
xw.WriteEndElement(); // Field end // Build FileRef xw.WriteStartElement("Field");xw.WriteAttributeString("Name", "FileRef");
xw.WriteString(fileRef);
xw.WriteEndElement(); // Field end xw.WriteEndElement(); // Method end xw.WriteEndElement(); // Batch endxw.WriteEndDocument();
System.Xml.XmlDocument batchElement = new System.Xml.XmlDocument();batchElement.LoadXml(sw.GetStringBuilder().ToString());
//Setup web service // send update request to sharepoint to create the document folderresult = _listWebService.UpdateListItems(listName, batchElement);
}
return result;}
1 comment:
Thanks Buddy...It works like a charm....It save my one day
Post a Comment