2009-12-01 7 views
1

У меня есть несколько SiteCollections, каждый SiteCollection с их собственной ContentDatabase связан. Теперь несколько SPListItems добавляются к одному из SiteCollections, которые должны быть перемещены в другой SiteCollection и, следовательно, в другую ContentDatabase.Перемещение SPListItems между различными ContentDatabases

Вопросы: Как переместить ListItems между этими разными коллекциями в другую ContentDatabase?

Одним из способов может быть экспорт элемента с помощью SPExport и его импорт в целевую базу данных. Но это довольно уродливо, и в время дыр появилось много ListItems.

ответ

2

Это единственный способ эффективно перемещать элемент списка. К сожалению, вы потеряете всю связанную с ним историю процессов и версий. Естественно, если бы вы использовали этот код, это потребовало бы небольшой модификации, так как я только перемещаю элемент списка в одном и том же SPWeb. Кроме того, вам нужно будет выполнить проверку типа содержимого, чтобы убедиться, что те же самые поля доступны в списке адресатов.

 private void CopyItem(SPListItem sourceItem, string destinationListName) 
     { 
      SPList destinationList = sourceItem.Web.Lists[destinationListName]; 
      SPListItem targetItem = destinationList.Items.Add(); 
      foreach (SPField field in sourceItem.Fields) 
      { 
       if (!field.ReadOnlyField && field.InternalName != "Attachments") 
       { 
        targetItem[field.Title] = sourceItem[field.Title]; 
       } 
      } 
      foreach (string fileName in sourceItem.Attachments) 
      { 
       SPFile file = sourceItem.ParentList.ParentWeb.GetFile(
        sourceItem.Attachments.UrlPrefix + fileName); 
       byte[] imageData = file.OpenBinary(); 
       targetItem.Attachments.Add(fileName, imageData); 
      } 
      targetItem.Update(); 
     }