SPFolder.MoveTo is preserving the metadata for the sub-folders while reset the metadata for the root folder

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/274502

質問

I have the following console application, which moved some folders from one document library to another within the same SP 2013 site collection:-

 SPList sourceomslist = omsWeb.Lists.TryGetList("Order Management");
                        ;
   foreach (SPListItem currentItem in sourceomslist.Items)
          {

            if (currentItem["Status"].ToString() == "Closed")
                {

                             if (currentItem.ContentType.Name.ToLower().Contains("project"))
                       {
                         Console.WriteLine(currentItem["ID"]);
                         SPFolder folder = omsWeb.GetFolder(omsWeb.ServerRelativeUrl + "/Shared Documents/"+currentItem["ID"].ToString() );
                         folder.MoveTo(omsWeb.ServerRelativeUrl + "/ArchDocs/"+currentItem["ID"].ToString() );

                       }
               }

         }

now the MoveTo will preserve the metadata for the sub-folders and files, but it will reset the metadata for the roots folders that are been moved. So can anyone advice if i can force the MoveTo method to preserve the metadata data for the root folders that are been moved?

Thanks

役に立ちましたか?

解決

You need update folder metadata for the root folders after run the MoveTo method, modify the code as below.

if (currentItem.ContentType.Name.ToLower().Contains("project"))
{
    Console.WriteLine(currentItem["ID"]);
    SPFolder folder = omsWeb.GetFolder(omsWeb.ServerRelativeUrl + "/Shared Documents/"+currentItem["ID"].ToString());
    var modified = folder.Item["Modified"];
    var created = folder.Item["Created"];    
    folder.MoveTo(omsWeb.ServerRelativeUrl + "/ArchDocs/" + currentItem["ID"].ToString());
    SPFolder tfolder = omsWeb.GetFolder(omsWeb.ServerRelativeUrl + "/ArchDocs/" + currentItem["ID"].ToString());
    tfolder.Item["Created"] = created;
    tfolder.Item["Modified"] = modified;
    tfolder.Item.UpdateOverwriteVersion();
}
ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top