Странное поведение при обновлении элемента SharePoint

У меня есть список SharePoint, в котором я регистрирую настраиваемый приемник событий ItemUpdating, но я наблюдаю очень странное поведение в этом решении. Это происходит, если я добавляю в приемник событий какой-либо код, кроме base.ItemUpdating.

Что происходит, если я отлаживаю приемник событий, я вижу эти свойства. 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);
}

person Nathan Kamenar    schedule 17.08.2016    source источник
comment
Вы пробовали вызывать base.ItemUpdating(properties) в начале переопределения функции, а не в конце?   -  person Thriggle    schedule 17.08.2016
comment
Ага, без разницы.   -  person Nathan Kamenar    schedule 17.08.2016


Ответы (1)


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

item.update();
person Jameel    schedule 18.08.2016
comment
Нет, обновление в ItemUpdating не требуется, поскольку вы вносите изменения перед сохранением элемента. - person Nathan Kamenar; 18.08.2016