Introduction
In this article, we will explore how to maintain the version of the field and fetch the attachment URL of a list item. Here, I will show how to do it using client-side mode via SharePoint Web service using Webservice only ( _vit_bin/lists.asmx)..
Scenario:
The scenario is best suited when in-migration from one SharePoint version to another, we need to maintain the attachment URL and the versioning of the fields using Webservice only ( _vit_bin/lists.asmx).
Solutions:
Code:
- public static void getListData(string weburl)
- {
- Lists.Lists myservice = new Lists.Lists();
- myservice.Credentials = System.Net.CredentialCache.DefaultCredentials;
- myservice.Url = weburl + "/_vti_bin/Lists.asmx";
- try
- {
- /* Assign values to pass the GetListItems method*/
- string listName = "Test List";
- string viewName = "";
- string rowLimit = "100";
- // Instantiate an XmlDocument object
- System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
- System.Xml.XmlElement query = xmlDoc.CreateElement("Query");
- System.Xml.XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
- System.Xml.XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");
- /*Use CAML query*/
- query.InnerXml = string.Format("<Where><And>" +
- "<Gt>" +
- "<FieldRef Name='ID' /><Value Type='Counter'>{0}</Value>" +
- "</Gt>" +
- "<Leq><FieldRef Name='ID' /><Value Type='Counter'>{1}</Value></Leq>" +
- "</And></Where>", 0, 100);
- viewFields.InnerXml = "<FieldRef Name='Title' />" +
- "<FieldRef Name='Created' />" +
- "<FieldRef Name='Modified' />" +
- "<FieldRef Name='Author' />" +
- "<FieldRef Name='Editor' />";
- queryOptions.InnerXml = "";
- System.Xml.XmlNode nodeListItems = myservice.GetListItems(listName, viewName, query, viewFields, rowLimit, null, null);
- XmlDataDocument xmlDocResult = new XmlDataDocument();
- xmlDocResult.LoadXml(nodeListItems.InnerXml);
- XmlNodeList rows = xmlDocResult.GetElementsByTagName("z:row");
- foreach(XmlNode attribute in rows) {
- Console.WriteLine(attribute.Attributes["ows_Title"].Value);
- string AttachmentUrl = GetAttachmentUrls(weburl, listName, attribute.Attributes["ows_ID"].Value, "");
- string vesrsion = GetVersions(weburl, listName, attribute.Attributes["ows_ID"].Value, "Title");
- }
- } catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- }
- public static string GetAttachmentUrls(string siteUrl, string listId, string itemId, string fieldName)
- {
- StringBuilder sb = new StringBuilder();
- Lists.Lists listService = new Lists.Lists();
- listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
- listService.Url = siteUrl + "/_vti_bin/lists.asmx";#
- region Get the list of attachments
- XmlNode nodeAttachments = listService.GetAttachmentCollection(listId, itemId);
- List < string > values = new List < string > ();
- foreach(System.Xml.XmlNode xNode in nodeAttachments)
- {
- values.Add(xNode.InnerText);
- }
- return string.Join(";", values.ToArray());#
- endregion
- }
- public static string GetVersions(string siteUrl, string listId, string itemId, string fieldName)
- {
- StringBuilder sb = new StringBuilder();
- Lists.Lists listService = new Lists.Lists();
- listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
- listService.Url = siteUrl + "/_vti_bin/lists.asmx";
- #region Get version histories
- if (!string.IsNullOrEmpty(fieldName))
- {
- XmlNode nodeVersions = listService.GetVersionCollection(listId, itemId, fieldName);
- foreach(System.Xml.XmlNode xNode in nodeVersions)
- {
- string dateHistory = xNode.Attributes["Modified"].Value;
- dateHistory = FormatDateFromSP(dateHistory);
- string commentHistory = xNode.Attributes[fieldName].Value;
- string editor = GetEditor(xNode.Attributes["Editor"].Value);
- sb.Append(editor + " (" + dateHistory + ") " + commentHistory + "\n\n");
- }
- }
- return sb.ToString();#
- endregion
- }
- private static string FormatDateFromSP(string dateHistory)
- {
- string result;
- result = dateHistory.Replace("T", " ");
- result = result.Replace("Z", "");
- return result;
- }
- /// <summary>
- /// The XmlNode for version on the Editor contains the Editor Name
- /// </summary>
- /// <param name="ienumEditor"></param>
- /// <returns></returns>
- private static string GetEditor(string nodeValue)
- {
- string[] arr;
- char[] sep =
- {
- '#'
- };
- // Go for the Editor attribute value
- // A sample is: 30;#Jo�o Faneca,#VIATECLA\\jfaneca,#joao.faneca@viatecla.pt,#joao.faneca@viatecla.pt,#Jo�o Faneca
- arr = nodeValue.Split(sep);
- // Grab the second element for the array
- nodeValue = arr[1];
- // Remove the last comma from the Editor value
- return nodeValue.Remove(nodeValue.Length - 1);
- }
- }
Summary
Using SharePoint web services to retrieve the version history and attachment URLs for the list item on the client-side.
No comments:
Post a Comment