Я пытаюсь удалить элементы из myDestinationList, если они не существуют в mySourceList. Я пытаюсь получить этот метод в C#. Я настроил это так, потому что два списка находятся на разных серверах. Какие-либо предложения?Удаление элементов списка Sharepoint с одного сайта на другое программно
Также я мог бы назначить автора/редактора из исходного списка в поля Author/Editor в списке адресатов?
Обновление: список содержит более 2 тыс. Элементов, клиент может обновлять список один раз в день или один раз в неделю, это может различаться.
static void Main(string[] args) {
ClientContext context = new ClientContext(site2);
List mySourceList = context.Web.Lists.GetByTitle(ListName);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View></View>";
ListItemCollection mySourceItemColl = mySourceList.GetItems(camlQuery);
context.Load(mySourceItemColl);
context.ExecuteQuery();
SPSite myDestinationSite = new SPSite(site2);
SPWeb myDestinationWeb = myDestinationSite.OpenWeb();
SPList myDestinationList = myDestinationWeb.Lists[ListName2];
SPQuery myDestinationListQuery = new SPQuery();
myDestinationListQuery.Query = "" +
"" +
"" +
"" +
"";
SPListItemCollection myDestinationItemColl = myDestinationList.GetItems(myDestinationListQuery);
foreach(ListItem mySourceListItem in mySourceItemColl) {
foreach() {
//delete items
item.Delete();
}
foreach(SPListItem myDestinationListItem in myDestinationItemColl) {
//Update items here
}
}
}
Event Receiver
public override void ItemAdded(SPItemEventProperties properties) {
using(ClientContext context = new ClientContext(site1)) {
List list = context.Web.Lists.GetByTitle(sourceList);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View></View>";
ListItemCollection collListItem = list.GetItems(camlQuery);
context.Load(collListItem);
context.ExecuteQuery();
using(ClientContext target = new ClientContext(site1)) {
List list2 = target.Web.Lists.GetByTitle(destinationList);
foreach(ListItem oListItem in collListItem) {
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
ListItem AddListItem = list2.AddItem(itemCreateInfo);
AddListItem["Title"] = oListItem["Title"];
AddListItem.Update();
target.ExecuteQuery();
}
}
}
Я бы создать суб подпрограмму для каждого из возможных типов изменений SharePoint опор (Create, Update, Delete) и добавить код в список источников через Event Receiver, который принимает соответствующее действие для обновления списка адресатов. Таким образом, после того, как вы очистите список адресатов в пакетном режиме, вы сможете выполнять небольшие, недорогие операции, чтобы синхронизировать их в будущем. Я создал похожие решения. Код STORM корректен, хотя свойства элемента в приемнике событий доступны без подключения ClientContext к вашему источнику. –
Как вы называете целевой сайт в функции (например: public override void ItemAdded (свойства SPItemEventProperties)? У меня есть код, который работает так, как если бы список находился на одном сайте. Но если я обновляю код, t update. До сих пор у меня есть SPList lstOtherList = properties.Web.Lists ["DestinationList"]; SPListItem item = lstOtherList.Items.Add(); item ["StoredId"] = properties.ListItemId; item [ Title "] = properties.AfterProperties [" Title "]; item.Update(); –
Вам понадобится создать второй ClientContext ... – STORM