怪异的SharePoint项目更新行为

本文关键字:更新 项目 SharePoint | 更新日期: 2023-09-27 18:02:51

我有一个SharePoint列表,在那里我注册了一个自定义ItemUpdating事件接收器,但我在这个解决方案中看到一些非常奇怪的行为。如果我向事件接收器添加base.ItemUpdating以外的任何代码,则会发生此行为。

发生的是,如果我调试事件接收器,我可以看到属性。AfterProperties具有在字段和属性中输入的所有值。ListItem包含原始项。但是,一旦ER完成运行并重新加载页面,就不会保存任何内容,它只是返回到我更改值之前的状态。更奇怪的是,如果我手动设置类似下面的属性,它会工作,更新被正确保存。基本上,事件接收者让我负责对项目做任何更改,但这不是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);
}

怪异的SharePoint项目更新行为

是否因为您根本没有保存当前项目,例如:

item.update();