2015-12-17 3 views
0

Возможно ли синхронизировать два списка SharePoint, которые находятся на разных платформах, используя какую-то визуальную студию? Я новичок в этом и хотел проанализировать мои варианты синхронизации списка на разных платформах. Я хотел бы иметь возможность добавлять или обновлять элементы в списке 2, если они не существуют в списке 1 или удаляют их, если они больше не существуют в List1Sharepoint Platforms List Sync

Ex: List1 находится на платформе SharePoint 2013, List1 на платформе Sharepoint 2010

ответ

0

Microsoft.SharePoint.Client (CSOM) - это библиотека, которая может удаленно подключаться к средам SharePoint. Таким образом, вы можете легко установить соединение с одним списком, собрать данные, а затем открыть новый контекст во вторую среду и скопировать эти данные.

string url = first.site; 
string url2 = second.site; 
using (ClientContext context = new ClientContext(url)) 
{ 
    //GetListItems(); 
    using (ClientContext context2 = new ClientContext(url2)) 
    { 
     //AddListItems(); 
    } 
} 

Вы можете сделать это как приемник событий, запланированное задание, что угодно.

Вы можете вызвать List.Fields, чтобы получить список всех полей в элементе. Таким образом, вы можете сравнить имена столбцов между двумя списками, чтобы выяснить, какие метаданные будут копироваться. Вот очень неполный пример, иллюстрирующий идею.

 using (ClientContext context = new ClientContext(url)) 
     { 
      List list = context.Web.Lists.GetByTitle("Project Notes Test"); 
      FieldCollection fields = list.Fields; 
      context.Load(fields); 
      context.ExecuteQuery(); 

      using (ClientContext target = new ClientContext(url2)) 
      { 
       List list2 = target.Web.Lists.GetByTitle("Other List"); 
       FieldCollection fields2 = list2.Fields; 
       target.Load(fields2); 
       target.ExecuteQuery(); 
       foreach (Field field in fields) 
       { 
        foreach(Field field2 in fields2) 
        { 
         if(field.Title == field2.Title) 
         { 
          listItem1[field.StaticName] = listItem2[field.StaticName]; 
         } 
        } 
       } 
      } 
     } 
0

Как обеспечить, чтобы второй список получал информацию в соответствующих столбцах? Должен ли я указывать каждый столбец в списке? например: collListItem [ «Title»] = oListItem [ «Title»]

string url = first.site; 
 
string url2 = second.site; 
 
using (ClientContext context = new ClientContext(url)) 
 
{ 
 
    //Retreival code here; 
 
    foreach(ListItem listItem in collListItem) 
 
    { 
 
     using (ClientContext context2 = new ClientContext(url2)) 
 
     { 
 
     //Add Items to list; 
 
     
 
      SP.List rList = clientContext.Web.Lists.GetByTitle("List2"); 
 
      ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation(); 
 
      ListItem oListItem = rList.AddItem(itemCreateInfo); 
 
     //******How do I ensure this is getting the code I retrieved in the first list?// 
 
      oListItem["Title"] = "Hello"; 
 
      oListItem["Body"] = "New Item"; 
 

 
      oListItem.Update(); 
 

 
      clientContext.ExecuteQuery(); 
 
     } 
 
    } 
 
}

+0

Вы можете сделать это, но если вы проверить мой ответ я обновил его, чтобы показать, как можно сравнить столбцы в одном списке другой динамически. Это предполагает, что список A разделяет имена столбцов и типы со списком B, если они этого не делают, вам нужно будет очень креативно сопоставить данные. –