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