2013-08-02 2 views
1

В проекте sharepoint у меня есть приемники событий, которые так важны, пока 7 версий этого проекта не развернуты для клиентов. одна из этих версий настолько неустойчива и медленна. Иногда я имею в виду, когда обновляю элемент, который он придерживается. Это случается случайным образом.лучший способ обработки ошибки: файл «FileName» был изменен SHAREPOINT system

ПРИМЕЧАНИЕ: их скорость сети хорошая. Конечно, проблема в проекте.

Я проверил код и нашел способ, который имеет дело с ошибкой Файл «FileName» был изменен SHAREPOINT \ системы вызвать петлю, sometimes.this это код в ItemUpdated и ItemAdded приемников событий для обновления SPListItem:

base.EventFiringEnabled = false; 
bool tryAgain = false; //used to handle "The file has been modified by SHAREPOINT\system" 
do 
{ 
    tryAgain = false; 
    try 
    { 
     try 
     { 
      if (_item.File.CheckOutType == SPFile.SPCheckOutType.Online || _item.File.CheckOutType == SPFile.SPCheckOutType.Offline) 
       { 
        try 
        { 
          _item.File.CheckIn("prevent checkout/locked error"); 
        } 
        catch (Exception ex) { } 
       } 
      _item.SystemUpdate(true); 
     } 
     catch (Exception ex) 
     { 
      throw ex; //-- used to handle "The file has been modified by SHAREPOINT\system" 
     } 
    } 
    catch (Exception ex) //-- used to handle "The file has been modified by SHAREPOINT\system" 
    { 
     if (ex.Message.ToLower().Contains("has been modified by")) 
     { 
      System.Threading.Thread.Sleep(1000 * 2); 
      tryAgain = true; 
     } 
     else 
     { 
      this.HandleException(ex, ""); 
     } 
    } 
} while (tryAgain == true); 

это время цикл имеет следующие состояния:

1-элемент обновляется в первый раз и нет исключений

2-update вызывает упомянутое исключение, и он будет обновляться через несколько секунд, пока итерации

3-обновление вызывает упомянутое исключение, и оно вставляется в цикл и не будет обновляться даже после 200 итераций.

этот случай проблемы, когда проект нестабилен и иногда работает так медленно. Каков наилучший способ справиться с этой ситуацией?

ответ

2

Быстрый поиск вырвало несколько статей, упомянутые изменения определения приемника событий в Elements.xml выполнять синхронно вместо асинхронно (это значение по умолчанию):

<Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <Receivers ListTemplateId="850"> 
     <Receiver>  
     <Synchronization>Synchronous</Synchronization> 
     </Receiver>  
    </Receivers> 
</Elements> 

Статья Я взял это из: http://onlinecoder.blogspot.co.uk/2013/07/splistitemupdate-file-has-been-modified.html

+0

спасибо, но Synchronous замедляет работу! моя проблема - скорость! –

0

Может быть, уже слишком поздно .. Я сталкиваюсь с той же проблемой в 2017 году. Решение не сработало для меня. То, что я сделал, это то, что в приемнике событий ItemAdded я читаю файл и после его чтения Я создал новый поток для обновления столбцов на основе значений из файла. Это сработало.

+0

Можете ли вы разместить полный код где-нибудь? –

Смежные вопросы