Wednesday, July 25, 2012

Copy Files and Folder using Web Service


To copy files, folders and sub folders from one library to another library using web service we will make use of three web services.

1. Lists.asmx: To get all folders and lists.
2. DWS.asmx: To create folders
3. Copy.aspx: To copy files from one library to another


Add above mentioned web refrences to your project.

Sample Project


Below is the function to copy All files, Folders and subfolders




        private void GetAllListItemsRecursively(string sourcelistname, string sourceFolderURL, string destlistname, string destFolderURL)
        {
            XmlNode ndListFolders = null;
            XmlNode ndListItems = null;


            XmlDocument xDocFolders = new XmlDocument();
            XmlNode ndQueryFolders = xDocFolders.CreateNode(XmlNodeType.Element, "Query", "");
            XmlNode ndViewFieldsFolders = xDocFolders.CreateNode(XmlNodeType.Element, "ViewFields", "");
            XmlNode ndQueryOptionsFolders = xDocFolders.CreateNode(XmlNodeType.Element, "QueryOptions", "");
            ndQueryOptionsFolders.InnerXml = @"<Folder>" + sourceFolderURL + "</Folder>";
            ndQueryFolders.InnerXml = "";
            ndViewFieldsFolders.InnerXml = "";
            ndQueryFolders.InnerXml = "<Where><Eq><FieldRef Name='FSObjType' /><Value Type='Lookup'>1</Value></Eq></Where>";


            XmlDocument xDocItems = new XmlDocument();
            XmlNode ndQueryItems = xDocItems.CreateNode(XmlNodeType.Element, "Query", "");
            XmlNode ndViewFieldsItems = xDocItems.CreateNode(XmlNodeType.Element, "ViewFields", "");
            XmlNode ndQueryOptionsItems = xDocItems.CreateNode(XmlNodeType.Element, "QueryOptions", "");
            ndQueryOptionsItems.InnerXml = @"<Folder>" + sourceFolderURL + "</Folder>";
            ndQueryItems.InnerXml = "";
            ndViewFieldsItems.InnerXml = "";
            ndQueryItems.InnerXml = "<Where><Eq><FieldRef Name='FSObjType' /><Value Type='Lookup'>0</Value></Eq></Where>";


            try
            {
                ndListFolders = _Lists.GetListItems(
                                    sourcelistname,
                                    "",
                                    ndQueryFolders,
                                    ndViewFieldsFolders,
                                    null,
                                    ndQueryOptionsFolders, null
                    );


                ndListItems = _Lists.GetListItems(
                                   sourcelistname,
                                   "",
                                   ndQueryItems,
                                   ndViewFieldsItems,
                                   null,
                                   ndQueryOptionsItems, null
                   );
            }
            catch (Exception ex)
            {


            }


            //Copy Folders
            if (ndListFolders != null)
            {
                foreach (XmlNode node in ndListFolders.ChildNodes)
                {
                    if (node.Name == "rs:data")
                    {
                        for (int i = 0; i < node.ChildNodes.Count; i++)
                        {
                            if (node.ChildNodes[i].Name == "z:row")
                            {
                                string newfolderName1 = node.ChildNodes[i].Attributes["ows_LinkFilename"].Value;
                                string rootFolder = string.Format("{0}/{1}", destFolderURL, newfolderName1);
                                _Dws.CreateFolder(rootFolder);


                                GetAllListItemsRecursively(sourcelistname, sourceFolderURL + @"\" + newfolderName1, destlistname, rootFolder);
                            }
                        }
                    }
                }
            }


            //Copy Files
            if (ndListItems != null)
            {
                foreach (XmlNode node in ndListItems.ChildNodes)
                {
                    if (node.Name == "rs:data")
                    {
                        for (int i = 0; i < node.ChildNodes.Count; i++)
                        {
                            if (node.ChildNodes[i].Name == "z:row")
                            {
                                string filename = node.ChildNodes[i].Attributes["ows_LinkFilename"].Value;


                                string finalsourceFolderURL = sourceFolderURL.Replace(@"\", "/");
                                if (!finalsourceFolderURL.EndsWith("/"))
                                    finalsourceFolderURL = finalsourceFolderURL + "/";
                                finalsourceFolderURL = siteURL + finalsourceFolderURL + filename;


                                string finaldestFolderURL = destFolderURL.Replace(@"\", "/");
                                if (!finaldestFolderURL.EndsWith("/"))
                                    finaldestFolderURL = finaldestFolderURL + "/";
                                finaldestFolderURL = siteURL + finaldestFolderURL + filename;
                                string[] copyDest = { finaldestFolderURL };


                                CopyResult myCopyResult1 = new CopyResult();
                                CopyResult[] myCopyResultArray = { myCopyResult1 };


                                // string copyResult;
                                try
                                {
                                    _Copy.CopyIntoItemsLocal(finalsourceFolderURL, copyDest, out myCopyResultArray);
                                }
                                catch (Exception exc) { }
                            }
                        }
                    }
                }
            }
        }

Sample Project

1 comment:

  1. Hello Guys.

    Wow awesome you are a very minded very nice blog for sharepoint era thanks for sharing post.

    http://www.aegisisc.com/sharepoint-developers.html

    Thanks in advance.

    ReplyDelete

Popular Posts