2016-08-17 6 views
0

У меня есть список SharePoint, в котором я регистрирую пользовательский приемник событий ItemUpdating, но в этом решении я вижу очень странное поведение. Такое поведение возникает, если я добавляю код в приемник событий, отличный от base.ItemUpdating.Weird SharePoint ItemUpdating Behavior

Что происходит, если я отлаживаю приемник событий, я вижу, что свойства. AfterProperties имеет все значения, введенные в поле и свойства. У ListItem есть исходный элемент. Но как только ER закончит работу и перезагрузка страницы ничего не будет сохранена, и она просто вернется к тому, что было до того, как я изменил значения. Еще более странно, если я поеду и вручную настрою свойства after, похожие на ниже, оно работает, и обновления будут сохранены правильно. Таким образом, в основном приемник событий заставляет меня нести какие-либо изменения в элементе, но это не нормальное поведение для ItemUpdating. Кто-нибудь может понять, что может вызвать это?

public override void ItemUpdating(SPItemEventProperties properties) 
{ 
    var recurringBefore = properties.ListItem.TryGetValue<bool>(Constants.CommonFields.Recurring_STATIC); 
    var recurringAfter = Convert.ToBoolean(properties.AfterProperties[Constants.CommonFields.Recurring_STATIC]); 

    //This loop is the horrible fix I have done to manually update the relevant fields but this shouldn't be necessary 
    var item = properties.ListItem; 
    foreach (SPField key in item.Fields) 
    { 
     if (item[key.InternalName] != properties.AfterProperties[key.InternalName] && key.CanBeDisplayedInEditForm && properties.AfterProperties[key.InternalName] != null) 
     { 
      //looping through and setting the AfterProperties to what they already are makes them save? If I don't do this nothing saves 
      properties.AfterProperties[key.InternalName] = properties.AfterProperties[key.InternalName].ToString(); 
     } 
    } 

    if (!recurringBefore && recurringAfter && 
     currWfStatus == Constants.WorkflowStatus.Processed) 
    { 
     //do some stuff 
    } 
    base.ItemUpdating(properties); 
} 
+0

вы пробовали вызова 'base.ItemUpdating (свойства)' в начале вашей функции переопределения вместо в конце? – Thriggle

+0

Да, не имеет значения. –

ответ

0

Это потому, что вы не спасаем текущий элемент вообще, что-то вроде этого:

item.update(); 
+0

Нет, обновление не требуется в ItemUpdating, потому что вы вносите изменения до сохранения элемента. –