SPFolder.MoveTo сохраняет метаданные для подпапок во время сброса метаданных для папки root - PullRequest
0 голосов
/ 12 января 2020

У меня есть следующее консольное приложение, которое перемещало некоторые папки из одной библиотеки документов в другую в пределах одного семейства сайтов SP 2013: -

 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() );

                       }
               }

         }

теперь MoveTo будет сохранять метаданные для подпапок и файлы, но это сбросит метаданные для корневых папок, которые были перемещены. Так может кто-нибудь посоветовать, если я могу заставить метод MoveTo сохранить данные метаданных для перемещенных папок root?

Спасибо

1 Ответ

1 голос
/ 13 января 2020

Поскольку папки root не существуют в целевой библиотеке, система будет создана первой, поэтому измененное, созданное изменится на новое время / дату. Нам нужно изменить его в коде.

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();
}
...