Вопрос

В настоящее время я разрабатываю обработчик событий для SharePoint 2010, который устанавливает по умолчанию библиотеки документов на создание (типы контента, настройки версий и т. Д.). У меня возникает проблема с конфликтами сохранения при создании библиотек документов через графический интерфейс, получатель событий не всегда работает после того, как графический интерфейс будет сохранен список.

Я предположил ListAdded будет вызван после того, как графический интерфейс правильно закончил создание списка и сохранил его, но, похоже, это не так. Я пытался установить свойства в ListAdding Функция, но изменения не сохраняются (так как список еще не создан).

Я получаю следующее сообщение при отладке в Visual Studio:

Сохранить конфликт.
Ваши изменения вступают в противоречие с теми, которые были сделаны одновременно другим пользователем. Если вы хотите, чтобы ваши изменения были применены, нажмите обратно в свой веб -браузер, обновите страницу и повторно повторно измените свои изменения.

с трассировкой стека:

Microsoft.sharepoint.spexception не было невозможно не считать код пользователя errorcode = -2130575305 CnipeerRormessage = не выполняется HR обнаружен (HR = 0x81020037)

Nativestacktrace = "" Сообщение = Сохранить конфликт.

Ваши изменения вступают в противоречие с теми, которые были сделаны одновременно другим пользователем. Если вы хотите, чтобы ваши изменения были применены, нажмите обратно в свой веб -браузер, обновите страницу и повторно повторно измените свои изменения. Source = microsoft.sharepoint stacktrace: at microsoft.sharepoint.spglobal.handlecomexception (comexception comex) на microsoft.sharepoint.library.sprequest.setlistrops (String bstrurl, String bstristname, boolean bmigrate) at microsoft.sharepoint.splist. ) at Company.SharePoint.EventReceivers.ListCreate.CompanyListCreateEventReceiver.ListAdded(SPListEventProperties properties) at Microsoft.SharePoint.SPEventManager.RunListEventReceiver(SPListEventReceiver receiver, SPUserCodeInfo userCodeInfo, SPListEventProperties properties, String receiverData) at Microsoft.SharePoint.SPEventManager.RunListEventReceiverHelper(Object receiver, Spusercodeinfo usercodeinfo, свойства объекта, контекст SpeventContext, String receiverdata) на microsoft.sharepoint.speventmanager. : System.Runtime.InterOpservices.COMEX пробег

и журналы ULS:

25.02.2011 11: 12: 52.06 W3WP.EXE (0x363C) 0x219C Фонд SharePoint Foundation General 8E2S Неизвестная ошибка Sprequest произошла. Дополнительная информация: 0x8007047e F35857AF-3D3A-462C-86A6-DE24D3B3D8D3
25.02.2011 11: 12: 52,06 W3WP.EXE (0x363C) 0x219C Фонд SharePoint General 72K4 Medium 0x8007047e F35857AF-3D3A-462C-86A6-DE24D3B3D8D3
25.02.2011 11: 12: 52,06 W3WP.EXE (0x363C) 0x219C Фонд Шарпойнта генерал 8KH7 HIGH 0x8007047E F35857AF-3D3A-462C-86A6-DE24D3B3D3D3

Существует ли способ обеспечить конфликта, или другого способа настройки или доступа к свойствам списка, которые не будут конфликтовать. Я устал создать отдельный экземпляр SPSite/SpWeb, но у этого все еще есть такая же проблема.

Простым примером кода, который снят, является:

  public class CompanyListCreateEventReceiver : SPListEventReceiver
    {

        public override void ListAdded(SPListEventProperties properties)
        {
            base.ListAdded(properties);

            SPList l_list = properties.List;
            l_list.Title = "Changed title";
            l_list.Update();

        }
}

Любая помощь будет оценена. Спасибо!

Это было полезно?

Решение

Вы должны зарегистрировать событие ITEMADDED как синхронное событие.Speventreceiversynchronication.synchronous

Вы можете определить это программно:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.speventreceiverdefinition.synchronization.aspx

Или в элементе приемника определения функции:http://msdn.microsoft.com/en-us/library/ff512765.aspx

Другие советы

Я уже некоторое время борется с приемниками мероприятий SharePoint. Много ловушек и неожиданной логики в этой части SharePoint IMO.

Я раньше не видел эту проблему, но все равно могу дать вам одно предложение. По моему опыту, изменение списка свойств иногда может иметь проблемы. Вот почему я хочу получить список из Интернета. Если это не удается (это сработало для меня), попробуйте создать новый Spweb от web.url.

В этом случае я предлагаю вам попробовать следующий подход:

 public class CompanyListCreateEventReceiver : SPListEventReceiver
{

    public override void ListAdded(SPListEventProperties properties)
    {
        base.ListAdded(properties);

        SPList l_list = properties.Web.Lists[properties.List.ID];
        l_list.Title = "Changed Title";
        l_list.Update();
    }
}

Я думаю, вам может потребоваться указать «синхронный» в вашем файле element.xml, см. http://sharepointconnoisseur.blogspot.com/2011/04/save-conflict-error-wrating-list.html

Попробуйте использовать отключение события и включить методы событий.

2) (Полезно от обновления элемента от обработчика событий)

Item[FieldName] = FieldValue;
this.DisableEventFiriing();
item.SystemUpdate(false);
or
item.Update();
this.EnableEventFiring();
//must enable event firing if we are disable it
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top